Completed
Push — EZP-30885-language-service ( ae48a4 )
by
unknown
14:20
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 for the loadLanguages() method.
393
     *
394
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguages
395
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
396
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testLoadLanguage
397
     */
398
    public function testLoadLanguages()
399
    {
400
        $repository = $this->getRepository();
401
402
        /* BEGIN: Use Case */
403
        $languageService = $repository->getContentLanguageService();
404
405
        // Create some languages
406
        $languageCreateEnglish = $languageService->newLanguageCreateStruct();
407
        $languageCreateEnglish->enabled = false;
408
        $languageCreateEnglish->name = 'English';
409
        $languageCreateEnglish->languageCode = 'eng-NZ';
410
411
        $languageCreateFrench = $languageService->newLanguageCreateStruct();
412
        $languageCreateFrench->enabled = false;
413
        $languageCreateFrench->name = 'French';
414
        $languageCreateFrench->languageCode = 'fre-FR';
415
416
        $languageService->createLanguage($languageCreateEnglish);
417
        $languageService->createLanguage($languageCreateFrench);
418
419
        $languages = $languageService->loadLanguages();
420
        self::assertIsArray($languages);
421
        foreach ($languages as $language) {
422
            self::assertInstanceOf(Language::class, $language);
423
            $singleLanguage = $languageService->loadLanguage($language->languageCode);
424
            $this->assertStructPropertiesCorrect(
425
                $singleLanguage,
426
                $language,
427
                ['id', 'languageCode', 'name', 'enabled']
428
            );
429
        }
430
        /* END: Use Case */
431
432
        // eng-US, eng-GB, ger-DE + 2 newly created
433
        $this->assertCount(5, $languages);
434
    }
435
436
    /**
437
     * Test for the loadLanguages() method.
438
     *
439
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguages
440
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
441
     */
442
    public function loadLanguagesReturnsAnEmptyArrayByDefault()
443
    {
444
        $repository = $this->getRepository();
445
446
        $languageService = $repository->getContentLanguageService();
447
448
        $this->assertSame([], $languageService->loadLanguages());
449
    }
450
451
    /**
452
     * Test for the deleteLanguage() method.
453
     *
454
     * @covers \eZ\Publish\API\Repository\LanguageService::deleteLanguage
455
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testLoadLanguages
456
     */
457
    public function testDeleteLanguage()
458
    {
459
        $this->expectException(\eZ\Publish\Core\Base\Exceptions\NotFoundException::class);
460
        $this->expectExceptionMessage('Could not find \'Language\' with identifier \'eng-NZ\'');
461
462
        $repository = $this->getRepository();
463
        $languageService = $repository->getContentLanguageService();
464
465
        $beforeCount = count($languageService->loadLanguages());
466
467
        /* BEGIN: Use Case */
468
        $languageService = $repository->getContentLanguageService();
469
470
        $languageCreateEnglish = $languageService->newLanguageCreateStruct();
471
        $languageCreateEnglish->enabled = false;
472
        $languageCreateEnglish->name = 'English';
473
        $languageCreateEnglish->languageCode = 'eng-NZ';
474
475
        $language = $languageService->createLanguage($languageCreateEnglish);
476
477
        // Delete the newly created language
478
        $languageService->deleteLanguage($language);
479
        /* END: Use Case */
480
481
        // +1 -1
482
        $this->assertEquals($beforeCount, count($languageService->loadLanguages()));
483
484
        // ensure just created & deleted language doesn't exist
485
        $languageService->loadLanguage($languageCreateEnglish->languageCode);
486
        self::fail('Language is still returned after being deleted');
487
    }
488
489
    /**
490
     * Test for the deleteLanguage() method.
491
     *
492
     * NOTE: This test has a dependency against several methods in the content
493
     * service, but because there is no topological sort for test dependencies
494
     * we cannot declare them here.
495
     *
496
     * @covers \eZ\Publish\API\Repository\LanguageService::deleteLanguage
497
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testDeleteLanguage
498
     * @depend(s) eZ\Publish\API\Repository\Tests\ContentServiceTest::testPublishVersion
499
     */
500
    public function testDeleteLanguageThrowsInvalidArgumentException()
501
    {
502
        $this->expectException(\eZ\Publish\API\Repository\Exceptions\InvalidArgumentException::class);
503
        $this->expectExceptionMessage('Argument \'language\' is invalid: Deleting language logic error, some content still references that language and therefore it can\'t be deleted');
504
505
        $repository = $this->getRepository();
506
507
        $editorsGroupId = $this->generateId('group', 13);
508
        /* BEGIN: Use Case */
509
        // $editorsGroupId is the ID of the "Editors" user group in an eZ
510
        // Publish demo installation
511
512
        $languageService = $repository->getContentLanguageService();
513
514
        $languageCreateEnglish = $languageService->newLanguageCreateStruct();
515
        $languageCreateEnglish->enabled = true;
516
        $languageCreateEnglish->name = 'English';
517
        $languageCreateEnglish->languageCode = 'eng-NZ';
518
519
        $language = $languageService->createLanguage($languageCreateEnglish);
520
521
        $contentService = $repository->getContentService();
522
523
        // Get metadata update struct and set new language as main language.
524
        $metadataUpdate = $contentService->newContentMetadataUpdateStruct();
525
        $metadataUpdate->mainLanguageCode = 'eng-NZ';
526
527
        // Update content object
528
        $contentService->updateContentMetadata(
529
            $contentService->loadContentInfo($editorsGroupId),
530
            $metadataUpdate
531
        );
532
533
        // This call will fail with an "InvalidArgumentException", because the
534
        // new language is used by a content object.
535
        $languageService->deleteLanguage($language);
536
        /* END: Use Case */
537
    }
538
539
    /**
540
     * Test for the getDefaultLanguageCode() method.
541
     *
542
     * @covers \eZ\Publish\API\Repository\LanguageService::getDefaultLanguageCode
543
     */
544
    public function testGetDefaultLanguageCode()
545
    {
546
        $repository = $this->getRepository();
547
        $languageService = $repository->getContentLanguageService();
548
549
        $this->assertRegExp(
550
            '(^[a-z]{3}\-[A-Z]{2}$)',
551
            $languageService->getDefaultLanguageCode()
552
        );
553
    }
554
555
    /**
556
     * Test for the createLanguage() method.
557
     *
558
     * @covers \eZ\Publish\API\Repository\LanguageService::createLanguage
559
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
560
     */
561 View Code Duplication
    public function testCreateLanguageInTransactionWithRollback()
562
    {
563
        $repository = $this->getRepository();
564
565
        /* BEGIN: Use Case */
566
        $languageService = $repository->getContentLanguageService();
567
568
        // Start a new transaction
569
        $repository->beginTransaction();
570
571
        try {
572
            // Get create struct and set properties
573
            $languageCreate = $languageService->newLanguageCreateStruct();
574
            $languageCreate->enabled = true;
575
            $languageCreate->name = 'English (New Zealand)';
576
            $languageCreate->languageCode = 'eng-NZ';
577
578
            // Create new language
579
            $languageService->createLanguage($languageCreate);
580
        } catch (Exception $e) {
581
            // Cleanup hanging transaction on error
582
            $repository->rollback();
583
            throw $e;
584
        }
585
586
        // Rollback all changes
587
        $repository->rollback();
588
589
        try {
590
            // This call will fail with a "NotFoundException"
591
            $languageService->loadLanguage('eng-NZ');
592
        } catch (NotFoundException $e) {
593
            // Expected execution path
594
        }
595
        /* END: Use Case */
596
597
        $this->assertTrue(isset($e), 'Can still load language after rollback');
598
    }
599
600
    /**
601
     * Test for the createLanguage() method.
602
     *
603
     * @covers \eZ\Publish\API\Repository\LanguageService::createLanguage
604
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
605
     */
606 View Code Duplication
    public function testCreateLanguageInTransactionWithCommit()
607
    {
608
        $repository = $this->getRepository();
609
610
        /* BEGIN: Use Case */
611
        $languageService = $repository->getContentLanguageService();
612
613
        // Start a new transaction
614
        $repository->beginTransaction();
615
616
        try {
617
            // Get create struct and set properties
618
            $languageCreate = $languageService->newLanguageCreateStruct();
619
            $languageCreate->enabled = true;
620
            $languageCreate->name = 'English (New Zealand)';
621
            $languageCreate->languageCode = 'eng-NZ';
622
623
            // Create new language
624
            $languageService->createLanguage($languageCreate);
625
626
            // Commit all changes
627
            $repository->commit();
628
        } catch (Exception $e) {
629
            // Cleanup hanging transaction on error
630
            $repository->rollback();
631
            throw $e;
632
        }
633
634
        // Load new language
635
        $language = $languageService->loadLanguage('eng-NZ');
636
        /* END: Use Case */
637
638
        $this->assertEquals('eng-NZ', $language->languageCode);
639
    }
640
641
    /**
642
     * Test for the updateLanguageName() method.
643
     *
644
     * @covers \eZ\Publish\API\Repository\LanguageService::updateLanguageName
645
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testUpdateLanguageName
646
     */
647
    public function testUpdateLanguageNameInTransactionWithRollback()
648
    {
649
        $repository = $this->getRepository();
650
651
        /* BEGIN: Use Case */
652
        $languageService = $repository->getContentLanguageService();
653
654
        // Start a new transaction
655
        $repository->beginTransaction();
656
657
        try {
658
            // Load an existing language
659
            $language = $languageService->loadLanguage('eng-US');
660
661
            // Update the language name
662
            $languageService->updateLanguageName($language, 'My English');
663
        } catch (Exception $e) {
664
            // Cleanup hanging transaction on error
665
            $repository->rollback();
666
            throw $e;
667
        }
668
669
        // Rollback all changes
670
        $repository->rollback();
671
672
        // Load updated version, name will still be "English (American)"
673
        $updatedLanguage = $languageService->loadLanguage('eng-US');
674
        /* END: Use Case */
675
676
        $this->assertEquals('English (American)', $updatedLanguage->name);
677
    }
678
679
    /**
680
     * Test for the updateLanguageName() method.
681
     *
682
     * @covers \eZ\Publish\API\Repository\LanguageService::updateLanguageName
683
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testUpdateLanguageName
684
     */
685 View Code Duplication
    public function testUpdateLanguageNameInTransactionWithCommit()
686
    {
687
        $repository = $this->getRepository();
688
689
        /* BEGIN: Use Case */
690
        $languageService = $repository->getContentLanguageService();
691
692
        // Start a new transaction
693
        $repository->beginTransaction();
694
695
        try {
696
            // Load an existing language
697
            $language = $languageService->loadLanguage('eng-US');
698
699
            // Update the language name
700
            $languageService->updateLanguageName($language, 'My English');
701
702
            // Commit all changes
703
            $repository->commit();
704
        } catch (Exception $e) {
705
            // Cleanup hanging transaction on error
706
            $repository->rollback();
707
            throw $e;
708
        }
709
710
        // Load updated version, name will be "My English"
711
        $updatedLanguage = $languageService->loadLanguage('eng-US');
712
        /* END: Use Case */
713
714
        $this->assertEquals('My English', $updatedLanguage->name);
715
    }
716
}
717