Completed
Push — ezp-30646 ( f6e657...2b6d7d )
by
unknown
37:24 queued 18:10
created

testUpdateLanguageNameThrowsInvalidArgumentException()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 11
rs 9.9
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * File containing the LanguageServiceTest class.
5
 *
6
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
7
 * @license For full copyright and license information view LICENSE file distributed with this source code.
8
 */
9
namespace eZ\Publish\API\Repository\Tests;
10
11
use eZ\Publish\API\Repository\Exceptions\NotFoundException;
12
use Exception;
13
use eZ\Publish\API\Repository\Values\Content\Language;
14
use eZ\Publish\API\Repository\Values\Content\LanguageCreateStruct;
15
16
/**
17
 * Test case for operations in the LanguageService using in memory storage.
18
 *
19
 * @see eZ\Publish\API\Repository\LanguageService
20
 * @group integration
21
 * @group language
22
 */
23
class LanguageServiceTest extends BaseTest
24
{
25
    /**
26
     * Test for the newLanguageCreateStruct() method.
27
     *
28
     * @covers \eZ\Publish\API\Repository\LanguageService::newLanguageCreateStruct
29
     */
30 View Code Duplication
    public function testNewLanguageCreateStruct()
31
    {
32
        $repository = $this->getRepository();
33
34
        /* BEGIN: Use Case */
35
        $languageService = $repository->getContentLanguageService();
36
37
        $languageCreate = $languageService->newLanguageCreateStruct();
38
        /* END: Use Case */
39
40
        $this->assertInstanceOf(
41
            LanguageCreateStruct::class,
42
            $languageCreate
43
        );
44
45
        $this->assertPropertiesCorrect(
46
            [
47
                'languageCode' => null,
48
                'name' => null,
49
                'enabled' => true,
50
            ],
51
            $languageCreate
52
        );
53
    }
54
55
    /**
56
     * Test for the createLanguage() method.
57
     *
58
     * @return \eZ\Publish\API\Repository\Values\Content\Language
59
     *
60
     * @covers \eZ\Publish\API\Repository\LanguageService::createLanguage
61
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testNewLanguageCreateStruct
62
     */
63
    public function testCreateLanguage()
64
    {
65
        $repository = $this->getRepository();
66
67
        /* BEGIN: Use Case */
68
        $languageService = $repository->getContentLanguageService();
69
70
        $languageCreate = $languageService->newLanguageCreateStruct();
71
        $languageCreate->enabled = true;
72
        $languageCreate->name = 'English (New Zealand)';
73
        $languageCreate->languageCode = 'eng-NZ';
74
75
        $language = $languageService->createLanguage($languageCreate);
76
        /* END: Use Case */
77
78
        $this->assertInstanceOf(
79
            '\\eZ\\Publish\\API\\Repository\\Values\\Content\\Language',
80
            $language
81
        );
82
83
        return $language;
84
    }
85
86
    /**
87
     * Test for the createLanguage() method.
88
     *
89
     * @param \eZ\Publish\API\Repository\Values\Content\Language $language
90
     *
91
     * @covers \eZ\Publish\API\Repository\LanguageService::createLanguage
92
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
93
     */
94
    public function testCreateLanguageSetsIdPropertyOnReturnedLanguage($language)
95
    {
96
        $this->assertNotNull($language->id);
97
    }
98
99
    /**
100
     * Test for the createLanguage() method.
101
     *
102
     * @param \eZ\Publish\API\Repository\Values\Content\Language $language
103
     *
104
     * @covers \eZ\Publish\API\Repository\LanguageService::createLanguage
105
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
106
     */
107
    public function testCreateLanguageSetsExpectedProperties($language)
108
    {
109
        $this->assertEquals(
110
            [
111
                true,
112
                'English (New Zealand)',
113
                'eng-NZ',
114
            ],
115
            [
116
                $language->enabled,
117
                $language->name,
118
                $language->languageCode,
119
            ]
120
        );
121
    }
122
123
    /**
124
     * Test for the createLanguage() method.
125
     *
126
     * @covers \eZ\Publish\API\Repository\LanguageService::createLanguage
127
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
128
     */
129
    public function testCreateLanguageThrowsInvalidArgumentException()
130
    {
131
        $this->expectException(\eZ\Publish\API\Repository\Exceptions\InvalidArgumentException::class);
132
        $this->expectExceptionMessage('Argument \'languageCreateStruct\' is invalid: language with specified language code already exists');
133
134
        $repository = $this->getRepository();
135
136
        /* BEGIN: Use Case */
137
        $languageService = $repository->getContentLanguageService();
138
139
        $languageCreate = $languageService->newLanguageCreateStruct();
140
        $languageCreate->enabled = true;
141
        $languageCreate->name = 'Norwegian';
142
        $languageCreate->languageCode = 'nor-NO';
143
144
        $languageService->createLanguage($languageCreate);
145
146
        // This call should fail with an InvalidArgumentException, because
147
        // the language code "nor-NO" already exists.
148
        $languageService->createLanguage($languageCreate);
149
        /* END: Use Case */
150
    }
151
152
    /**
153
     * Test for the loadLanguageById() method.
154
     *
155
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguageById
156
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguageListById
157
     * @depends testCreateLanguage
158
     */
159
    public function testLoadLanguageById()
160
    {
161
        $repository = $this->getRepository();
162
163
        $languageService = $repository->getContentLanguageService();
164
165
        $languageCreate = $languageService->newLanguageCreateStruct();
166
        $languageCreate->enabled = false;
167
        $languageCreate->name = 'English';
168
        $languageCreate->languageCode = 'eng-NZ';
169
170
        $languageId = $languageService->createLanguage($languageCreate)->id;
171
172
        $language = $languageService->loadLanguageById($languageId);
173
174
        $this->assertInstanceOf(
175
            Language::class,
176
            $language
177
        );
178
179
        $languages = $languageService->loadLanguageListById([$languageId]);
180
181
        $this->assertIsIterable($languages);
182
        $this->assertCount(1, $languages);
183
        $this->assertInstanceOf(Language::class, $languages[$languageId]);
184
    }
185
186
    /**
187
     * Test for the loadLanguageById() method.
188
     *
189
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguageById
190
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguageListById
191
     * @depends testLoadLanguageById
192
     */
193
    public function testLoadLanguageByIdThrowsNotFoundException()
194
    {
195
        $repository = $this->getRepository();
196
197
        $nonExistentLanguageId = $this->generateId('language', 2342);
198
        /* BEGIN: Use Case */
199
        $languageService = $repository->getContentLanguageService();
200
201
        $languages = $languageService->loadLanguageListById([$nonExistentLanguageId]);
202
203
        $this->assertIsIterable($languages);
204
        $this->assertCount(0, $languages);
205
206
        $this->expectException(NotFoundException::class);
207
208
        $languageService->loadLanguageById($nonExistentLanguageId);
209
        /* END: Use Case */
210
    }
211
212
    /**
213
     * Test for the updateLanguageName() method.
214
     *
215
     * @covers \eZ\Publish\API\Repository\LanguageService::updateLanguageName
216
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testLoadLanguageById
217
     */
218
    public function testUpdateLanguageName()
219
    {
220
        $repository = $this->getRepository();
221
222
        /* BEGIN: Use Case */
223
        $languageService = $repository->getContentLanguageService();
224
225
        $languageCreate = $languageService->newLanguageCreateStruct();
226
        $languageCreate->enabled = false;
227
        $languageCreate->name = 'English';
228
        $languageCreate->languageCode = 'eng-NZ';
229
230
        $languageId = $languageService->createLanguage($languageCreate)->id;
231
232
        $language = $languageService->loadLanguageById($languageId);
233
234
        $updatedLanguage = $languageService->updateLanguageName(
235
            $language,
236
            'New language name.'
237
        );
238
        /* END: Use Case */
239
240
        // Verify that the service returns an updated language instance.
241
        $this->assertInstanceOf(
242
            Language::class,
243
            $updatedLanguage
244
        );
245
246
        // Verify that the service also persists the changes
247
        $updatedLanguage = $languageService->loadLanguageById($languageId);
248
        $this->assertPropertiesCorrect(
249
            [
250
                'id' => $language->id,
251
                'name' => 'New language name.',
252
                'languageCode' => $language->languageCode,
253
                'enabled' => $language->enabled,
254
            ],
255
            $updatedLanguage
256
        );
257
    }
258
259
    /**
260
     * Test for the enableLanguage() method.
261
     *
262
     * @covers \eZ\Publish\API\Repository\LanguageService::enableLanguage
263
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testLoadLanguageById
264
     */
265 View Code Duplication
    public function testEnableLanguage()
266
    {
267
        $repository = $this->getRepository();
268
269
        /* BEGIN: Use Case */
270
        $languageService = $repository->getContentLanguageService();
271
272
        $languageCreate = $languageService->newLanguageCreateStruct();
273
        $languageCreate->enabled = false;
274
        $languageCreate->name = 'English';
275
        $languageCreate->languageCode = 'eng-NZ';
276
277
        $language = $languageService->createLanguage($languageCreate);
278
279
        // Now lets enable the newly created language
280
        $languageService->enableLanguage($language);
281
282
        $enabledLanguage = $languageService->loadLanguageById($language->id);
283
        /* END: Use Case */
284
285
        $this->assertTrue($enabledLanguage->enabled);
286
    }
287
288
    /**
289
     * Test for the disableLanguage() method.
290
     *
291
     * @covers \eZ\Publish\API\Repository\LanguageService::disableLanguage
292
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testLoadLanguageById
293
     */
294 View Code Duplication
    public function testDisableLanguage()
295
    {
296
        $repository = $this->getRepository();
297
298
        /* BEGIN: Use Case */
299
        $languageService = $repository->getContentLanguageService();
300
301
        $languageCreate = $languageService->newLanguageCreateStruct();
302
        $languageCreate->enabled = true;
303
        $languageCreate->name = 'English';
304
        $languageCreate->languageCode = 'eng-NZ';
305
306
        $language = $languageService->createLanguage($languageCreate);
307
308
        // Now lets disable the newly created language
309
        $languageService->disableLanguage($language);
310
311
        $enabledLanguage = $languageService->loadLanguageById($language->id);
312
        /* END: Use Case */
313
314
        $this->assertFalse($enabledLanguage->enabled);
315
    }
316
317
    /**
318
     * Test for the loadLanguage() method.
319
     *
320
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguage
321
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguageListByCode
322
     * @depends testCreateLanguage
323
     */
324
    public function testLoadLanguage()
325
    {
326
        $repository = $this->getRepository();
327
328
        /* BEGIN: Use Case */
329
        $languageService = $repository->getContentLanguageService();
330
331
        $languageCreate = $languageService->newLanguageCreateStruct();
332
        $languageCreate->enabled = true;
333
        $languageCreate->name = 'English';
334
        $languageCreate->languageCode = 'eng-NZ';
335
336
        $languageId = $languageService->createLanguage($languageCreate)->id;
337
338
        // Now load the newly created language by it's language code
339
        $language = $languageService->loadLanguage('eng-NZ');
340
        /* END: Use Case */
341
342
        $this->assertPropertiesCorrect(
343
            [
344
                'id' => $languageId,
345
                'languageCode' => 'eng-NZ',
346
                'name' => 'English',
347
                'enabled' => true,
348
            ],
349
            $language
350
        );
351
352
        $languages = $languageService->loadLanguageListByCode(['eng-NZ']);
353
354
        $this->assertIsIterable($languages);
355
        $this->assertCount(1, $languages);
356
357
        $this->assertPropertiesCorrect(
358
            [
359
                'id' => $languageId,
360
                'languageCode' => 'eng-NZ',
361
                'name' => 'English',
362
                'enabled' => true,
363
            ],
364
            $languages['eng-NZ']
365
        );
366
    }
367
368
    /**
369
     * Test for the loadLanguage() method.
370
     *
371
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguage
372
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguageListByCode
373
     * @depends testLoadLanguage
374
     */
375
    public function testLoadLanguageThrowsNotFoundException()
376
    {
377
        $repository = $this->getRepository();
378
379
        $languageService = $repository->getContentLanguageService();
380
381
        $languages = $languageService->loadLanguageListByCode(['fre-FR']);
382
383
        $this->assertIsIterable($languages);
384
        $this->assertCount(0, $languages);
385
386
        $this->expectException(NotFoundException::class);
387
388
        $languageService->loadLanguage('fre-FR');
389
    }
390
391
    /**
392
     * Test service method for loading language throwing InvalidArgumentException.
393
     *
394
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguage
395
     */
396
    public function testLoadLanguageThrowsInvalidArgumentException()
397
    {
398
        $this->expectException(\eZ\Publish\API\Repository\Exceptions\InvalidArgumentException::class);
399
        $this->expectExceptionMessage('Argument \'languageCode\' is invalid: language code has an invalid value');
400
401
        $repository = $this->getRepository();
402
403
        $repository->getContentLanguageService()->loadLanguage(PHP_INT_MAX);
404
    }
405
406
    /**
407
     * Test for the loadLanguages() method.
408
     *
409
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguages
410
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
411
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testLoadLanguage
412
     */
413
    public function testLoadLanguages()
414
    {
415
        $repository = $this->getRepository();
416
417
        /* BEGIN: Use Case */
418
        $languageService = $repository->getContentLanguageService();
419
420
        // Create some languages
421
        $languageCreateEnglish = $languageService->newLanguageCreateStruct();
422
        $languageCreateEnglish->enabled = false;
423
        $languageCreateEnglish->name = 'English';
424
        $languageCreateEnglish->languageCode = 'eng-NZ';
425
426
        $languageCreateFrench = $languageService->newLanguageCreateStruct();
427
        $languageCreateFrench->enabled = false;
428
        $languageCreateFrench->name = 'French';
429
        $languageCreateFrench->languageCode = 'fre-FR';
430
431
        $languageService->createLanguage($languageCreateEnglish);
432
        $languageService->createLanguage($languageCreateFrench);
433
434
        $languages = $languageService->loadLanguages();
435
        self::assertIsArray($languages);
436
        foreach ($languages as $language) {
437
            self::assertInstanceOf(Language::class, $language);
438
            $singleLanguage = $languageService->loadLanguage($language->languageCode);
439
            $this->assertStructPropertiesCorrect(
440
                $singleLanguage,
441
                $language,
442
                ['id', 'languageCode', 'name', 'enabled']
443
            );
444
        }
445
        /* END: Use Case */
446
447
        // eng-US, eng-GB, ger-DE + 2 newly created
448
        $this->assertCount(5, $languages);
449
    }
450
451
    /**
452
     * Test for the loadLanguages() method.
453
     *
454
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguages
455
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
456
     */
457
    public function loadLanguagesReturnsAnEmptyArrayByDefault()
458
    {
459
        $repository = $this->getRepository();
460
461
        $languageService = $repository->getContentLanguageService();
462
463
        $this->assertSame([], $languageService->loadLanguages());
464
    }
465
466
    /**
467
     * Test for the deleteLanguage() method.
468
     *
469
     * @covers \eZ\Publish\API\Repository\LanguageService::deleteLanguage
470
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testLoadLanguages
471
     */
472
    public function testDeleteLanguage()
473
    {
474
        $this->expectException(\eZ\Publish\Core\Base\Exceptions\NotFoundException::class);
475
        $this->expectExceptionMessage('Could not find \'Language\' with identifier \'eng-NZ\'');
476
477
        $repository = $this->getRepository();
478
        $languageService = $repository->getContentLanguageService();
479
480
        $beforeCount = count($languageService->loadLanguages());
481
482
        /* BEGIN: Use Case */
483
        $languageService = $repository->getContentLanguageService();
484
485
        $languageCreateEnglish = $languageService->newLanguageCreateStruct();
486
        $languageCreateEnglish->enabled = false;
487
        $languageCreateEnglish->name = 'English';
488
        $languageCreateEnglish->languageCode = 'eng-NZ';
489
490
        $language = $languageService->createLanguage($languageCreateEnglish);
491
492
        // Delete the newly created language
493
        $languageService->deleteLanguage($language);
494
        /* END: Use Case */
495
496
        // +1 -1
497
        $this->assertEquals($beforeCount, count($languageService->loadLanguages()));
498
499
        // ensure just created & deleted language doesn't exist
500
        $languageService->loadLanguage($languageCreateEnglish->languageCode);
501
        self::fail('Language is still returned after being deleted');
502
    }
503
504
    /**
505
     * Test for the deleteLanguage() method.
506
     *
507
     * NOTE: This test has a dependency against several methods in the content
508
     * service, but because there is no topological sort for test dependencies
509
     * we cannot declare them here.
510
     *
511
     * @covers \eZ\Publish\API\Repository\LanguageService::deleteLanguage
512
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testDeleteLanguage
513
     * @depend(s) eZ\Publish\API\Repository\Tests\ContentServiceTest::testPublishVersion
514
     */
515 View Code Duplication
    public function testDeleteLanguageThrowsInvalidArgumentException()
516
    {
517
        $this->expectException(\eZ\Publish\API\Repository\Exceptions\InvalidArgumentException::class);
518
        $this->expectExceptionMessage('Argument \'language\' is invalid: Deleting language logic error, some content still references that language and therefore it can\'t be deleted');
519
520
        $repository = $this->getRepository();
521
522
        $editorsGroupId = $this->generateId('group', 13);
523
        /* BEGIN: Use Case */
524
        // $editorsGroupId is the ID of the "Editors" user group in an eZ
525
        // Publish demo installation
526
527
        $languageService = $repository->getContentLanguageService();
528
529
        $languageCreateEnglish = $languageService->newLanguageCreateStruct();
530
        $languageCreateEnglish->enabled = true;
531
        $languageCreateEnglish->name = 'English';
532
        $languageCreateEnglish->languageCode = 'eng-NZ';
533
534
        $language = $languageService->createLanguage($languageCreateEnglish);
535
536
        $contentService = $repository->getContentService();
537
538
        // Get metadata update struct and set new language as main language.
539
        $metadataUpdate = $contentService->newContentMetadataUpdateStruct();
540
        $metadataUpdate->mainLanguageCode = 'eng-NZ';
541
542
        // Update content object
543
        $contentService->updateContentMetadata(
544
            $contentService->loadContentInfo($editorsGroupId),
545
            $metadataUpdate
546
        );
547
548
        // This call will fail with an "InvalidArgumentException", because the
549
        // new language is used by a content object.
550
        $languageService->deleteLanguage($language);
551
        /* END: Use Case */
552
    }
553
554
    /**
555
     * Test for the getDefaultLanguageCode() method.
556
     *
557
     * @covers \eZ\Publish\API\Repository\LanguageService::getDefaultLanguageCode
558
     */
559
    public function testGetDefaultLanguageCode()
560
    {
561
        $repository = $this->getRepository();
562
        $languageService = $repository->getContentLanguageService();
563
564
        $this->assertRegExp(
565
            '(^[a-z]{3}\-[A-Z]{2}$)',
566
            $languageService->getDefaultLanguageCode()
567
        );
568
    }
569
570
    /**
571
     * Test for the createLanguage() method.
572
     *
573
     * @covers \eZ\Publish\API\Repository\LanguageService::createLanguage
574
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
575
     */
576 View Code Duplication
    public function testCreateLanguageInTransactionWithRollback()
577
    {
578
        $repository = $this->getRepository();
579
580
        /* BEGIN: Use Case */
581
        $languageService = $repository->getContentLanguageService();
582
583
        // Start a new transaction
584
        $repository->beginTransaction();
585
586
        try {
587
            // Get create struct and set properties
588
            $languageCreate = $languageService->newLanguageCreateStruct();
589
            $languageCreate->enabled = true;
590
            $languageCreate->name = 'English (New Zealand)';
591
            $languageCreate->languageCode = 'eng-NZ';
592
593
            // Create new language
594
            $languageService->createLanguage($languageCreate);
595
        } catch (Exception $e) {
596
            // Cleanup hanging transaction on error
597
            $repository->rollback();
598
            throw $e;
599
        }
600
601
        // Rollback all changes
602
        $repository->rollback();
603
604
        try {
605
            // This call will fail with a "NotFoundException"
606
            $languageService->loadLanguage('eng-NZ');
607
        } catch (NotFoundException $e) {
608
            // Expected execution path
609
        }
610
        /* END: Use Case */
611
612
        $this->assertTrue(isset($e), 'Can still load language after rollback');
613
    }
614
615
    /**
616
     * Test for the createLanguage() method.
617
     *
618
     * @covers \eZ\Publish\API\Repository\LanguageService::createLanguage
619
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
620
     */
621 View Code Duplication
    public function testCreateLanguageInTransactionWithCommit()
622
    {
623
        $repository = $this->getRepository();
624
625
        /* BEGIN: Use Case */
626
        $languageService = $repository->getContentLanguageService();
627
628
        // Start a new transaction
629
        $repository->beginTransaction();
630
631
        try {
632
            // Get create struct and set properties
633
            $languageCreate = $languageService->newLanguageCreateStruct();
634
            $languageCreate->enabled = true;
635
            $languageCreate->name = 'English (New Zealand)';
636
            $languageCreate->languageCode = 'eng-NZ';
637
638
            // Create new language
639
            $languageService->createLanguage($languageCreate);
640
641
            // Commit all changes
642
            $repository->commit();
643
        } catch (Exception $e) {
644
            // Cleanup hanging transaction on error
645
            $repository->rollback();
646
            throw $e;
647
        }
648
649
        // Load new language
650
        $language = $languageService->loadLanguage('eng-NZ');
651
        /* END: Use Case */
652
653
        $this->assertEquals('eng-NZ', $language->languageCode);
654
    }
655
656
    /**
657
     * Test for the updateLanguageName() method.
658
     *
659
     * @covers \eZ\Publish\API\Repository\LanguageService::updateLanguageName
660
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testUpdateLanguageName
661
     */
662
    public function testUpdateLanguageNameInTransactionWithRollback()
663
    {
664
        $repository = $this->getRepository();
665
666
        /* BEGIN: Use Case */
667
        $languageService = $repository->getContentLanguageService();
668
669
        // Start a new transaction
670
        $repository->beginTransaction();
671
672
        try {
673
            // Load an existing language
674
            $language = $languageService->loadLanguage('eng-US');
675
676
            // Update the language name
677
            $languageService->updateLanguageName($language, 'My English');
678
        } catch (Exception $e) {
679
            // Cleanup hanging transaction on error
680
            $repository->rollback();
681
            throw $e;
682
        }
683
684
        // Rollback all changes
685
        $repository->rollback();
686
687
        // Load updated version, name will still be "English (American)"
688
        $updatedLanguage = $languageService->loadLanguage('eng-US');
689
        /* END: Use Case */
690
691
        $this->assertEquals('English (American)', $updatedLanguage->name);
692
    }
693
694
    /**
695
     * Test for the updateLanguageName() method.
696
     *
697
     * @covers \eZ\Publish\API\Repository\LanguageService::updateLanguageName
698
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testUpdateLanguageName
699
     */
700
    public function testUpdateLanguageNameInTransactionWithCommit()
701
    {
702
        $repository = $this->getRepository();
703
704
        /* BEGIN: Use Case */
705
        $languageService = $repository->getContentLanguageService();
706
707
        // Start a new transaction
708
        $repository->beginTransaction();
709
710
        try {
711
            // Load an existing language
712
            $language = $languageService->loadLanguage('eng-US');
713
714
            // Update the language name
715
            $languageService->updateLanguageName($language, 'My English');
716
717
            // Commit all changes
718
            $repository->commit();
719
        } catch (Exception $e) {
720
            // Cleanup hanging transaction on error
721
            $repository->rollback();
722
            throw $e;
723
        }
724
725
        // Load updated version, name will be "My English"
726
        $updatedLanguage = $languageService->loadLanguage('eng-US');
727
        /* END: Use Case */
728
729
        $this->assertEquals('My English', $updatedLanguage->name);
730
    }
731
}
732