Completed
Push — paratest ( 20b7df...126921 )
by André
31:14
created

testCreateLanguageSetsExpectedProperties()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 1
dl 0
loc 15
rs 9.7666
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 View Code Duplication
    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
            array(
111
                true,
112
                'English (New Zealand)',
113
                'eng-NZ',
114
            ),
115
            array(
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
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
128
     * @expectedExceptionMessage Argument 'languageCreateStruct' is invalid: language with specified language code already exists
129
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
130
     */
131 View Code Duplication
    public function testCreateLanguageThrowsInvalidArgumentException()
132
    {
133
        $repository = $this->getRepository();
134
135
        /* BEGIN: Use Case */
136
        $languageService = $repository->getContentLanguageService();
137
138
        $languageCreate = $languageService->newLanguageCreateStruct();
139
        $languageCreate->enabled = true;
140
        $languageCreate->name = 'Norwegian';
141
        $languageCreate->languageCode = 'nor-NO';
142
143
        $languageService->createLanguage($languageCreate);
144
145
        // This call should fail with an InvalidArgumentException, because
146
        // the language code "nor-NO" already exists.
147
        $languageService->createLanguage($languageCreate);
148
        /* END: Use Case */
149
    }
150
151
    /**
152
     * Test for the loadLanguageById() method.
153
     *
154
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguageById
155
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
156
     */
157 View Code Duplication
    public function testLoadLanguageById()
158
    {
159
        $repository = $this->getRepository();
160
161
        /* BEGIN: Use Case */
162
        $languageService = $repository->getContentLanguageService();
163
164
        $languageCreate = $languageService->newLanguageCreateStruct();
165
        $languageCreate->enabled = false;
166
        $languageCreate->name = 'English';
167
        $languageCreate->languageCode = 'eng-NZ';
168
169
        $languageId = $languageService->createLanguage($languageCreate)->id;
170
171
        $language = $languageService->loadLanguageById($languageId);
172
        /* END: Use Case */
173
174
        $this->assertInstanceOf(
175
            Language::class,
176
            $language
177
        );
178
    }
179
180
    /**
181
     * Test for the loadLanguageById() method.
182
     *
183
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguageById
184
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
185
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testLoadLanguageById
186
     */
187
    public function testLoadLanguageByIdThrowsNotFoundException()
188
    {
189
        $repository = $this->getRepository();
190
191
        $nonExistentLanguageId = $this->generateId('language', 2342);
192
        /* BEGIN: Use Case */
193
        $languageService = $repository->getContentLanguageService();
194
195
        // This call should fail with a "NotFoundException"
196
        $languageService->loadLanguageById($nonExistentLanguageId);
197
        /* END: Use Case */
198
    }
199
200
    /**
201
     * Test for the updateLanguageName() method.
202
     *
203
     * @covers \eZ\Publish\API\Repository\LanguageService::updateLanguageName
204
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testLoadLanguageById
205
     */
206
    public function testUpdateLanguageName()
207
    {
208
        $repository = $this->getRepository();
209
210
        /* BEGIN: Use Case */
211
        $languageService = $repository->getContentLanguageService();
212
213
        $languageCreate = $languageService->newLanguageCreateStruct();
214
        $languageCreate->enabled = false;
215
        $languageCreate->name = 'English';
216
        $languageCreate->languageCode = 'eng-NZ';
217
218
        $languageId = $languageService->createLanguage($languageCreate)->id;
219
220
        $language = $languageService->loadLanguageById($languageId);
221
222
        $updatedLanguage = $languageService->updateLanguageName(
223
            $language,
224
            'New language name.'
225
        );
226
        /* END: Use Case */
227
228
        // Verify that the service returns an updated language instance.
229
        $this->assertInstanceOf(
230
            Language::class,
231
            $updatedLanguage
232
        );
233
234
        // Verify that the service also persists the changes
235
        $updatedLanguage = $languageService->loadLanguageById($languageId);
236
        $this->assertPropertiesCorrect(
237
            [
238
                'id' => $language->id,
239
                'name' => 'New language name.',
240
                'languageCode' => $language->languageCode,
241
                'enabled' => $language->enabled,
242
            ],
243
            $updatedLanguage
244
        );
245
    }
246
247
    /**
248
     * Test service method for updating language name throwing InvalidArgumentException.
249
     *
250
     * @covers \eZ\Publish\API\Repository\LanguageService::updateLanguageName
251
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
252
     * @expectedExceptionMessage Argument 'newName' is invalid: '1' is wrong value
253
     */
254
    public function testUpdateLanguageNameThrowsInvalidArgumentException()
255
    {
256
        $repository = $this->getRepository();
257
        $languageService = $repository->getContentLanguageService();
258
259
        $language = $languageService->loadLanguage('eng-GB');
260
        $languageService->updateLanguageName($language, 1);
261
    }
262
263
    /**
264
     * Test for the enableLanguage() method.
265
     *
266
     * @covers \eZ\Publish\API\Repository\LanguageService::enableLanguage
267
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testLoadLanguageById
268
     */
269 View Code Duplication
    public function testEnableLanguage()
270
    {
271
        $repository = $this->getRepository();
272
273
        /* BEGIN: Use Case */
274
        $languageService = $repository->getContentLanguageService();
275
276
        $languageCreate = $languageService->newLanguageCreateStruct();
277
        $languageCreate->enabled = false;
278
        $languageCreate->name = 'English';
279
        $languageCreate->languageCode = 'eng-NZ';
280
281
        $language = $languageService->createLanguage($languageCreate);
282
283
        // Now lets enable the newly created language
284
        $languageService->enableLanguage($language);
285
286
        $enabledLanguage = $languageService->loadLanguageById($language->id);
287
        /* END: Use Case */
288
289
        $this->assertTrue($enabledLanguage->enabled);
290
    }
291
292
    /**
293
     * Test for the disableLanguage() method.
294
     *
295
     * @covers \eZ\Publish\API\Repository\LanguageService::disableLanguage
296
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testLoadLanguageById
297
     */
298 View Code Duplication
    public function testDisableLanguage()
299
    {
300
        $repository = $this->getRepository();
301
302
        /* BEGIN: Use Case */
303
        $languageService = $repository->getContentLanguageService();
304
305
        $languageCreate = $languageService->newLanguageCreateStruct();
306
        $languageCreate->enabled = true;
307
        $languageCreate->name = 'English';
308
        $languageCreate->languageCode = 'eng-NZ';
309
310
        $language = $languageService->createLanguage($languageCreate);
311
312
        // Now lets disable the newly created language
313
        $languageService->disableLanguage($language);
314
315
        $enabledLanguage = $languageService->loadLanguageById($language->id);
316
        /* END: Use Case */
317
318
        $this->assertFalse($enabledLanguage->enabled);
319
    }
320
321
    /**
322
     * Test for the loadLanguage() method.
323
     *
324
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguage
325
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
326
     */
327
    public function testLoadLanguage()
328
    {
329
        $repository = $this->getRepository();
330
331
        /* BEGIN: Use Case */
332
        $languageService = $repository->getContentLanguageService();
333
334
        $languageCreate = $languageService->newLanguageCreateStruct();
335
        $languageCreate->enabled = true;
336
        $languageCreate->name = 'English';
337
        $languageCreate->languageCode = 'eng-NZ';
338
339
        $languageId = $languageService->createLanguage($languageCreate)->id;
340
341
        // Now load the newly created language by it's language code
342
        $language = $languageService->loadLanguage('eng-NZ');
343
        /* END: Use Case */
344
345
        $this->assertPropertiesCorrect(
346
            [
347
                'id' => $languageId,
348
                'languageCode' => 'eng-NZ',
349
                'name' => 'English',
350
                'enabled' => true,
351
            ],
352
            $language
353
        );
354
    }
355
356
    /**
357
     * Test for the loadLanguage() method.
358
     *
359
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguage
360
     * @expectedException \eZ\Publish\API\Repository\Exceptions\NotFoundException
361
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testLoadLanguage
362
     */
363
    public function testLoadLanguageThrowsNotFoundException()
364
    {
365
        $repository = $this->getRepository();
366
367
        /* BEGIN: Use Case */
368
        $languageService = $repository->getContentLanguageService();
369
370
        // This call should fail with an exception
371
        $languageService->loadLanguage('fre-FR');
372
        /* END: Use Case */
373
    }
374
375
    /**
376
     * Test service method for loading language throwing InvalidArgumentException.
377
     *
378
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
379
     * @expectedExceptionMessage Argument 'languageCode' is invalid: language code has an invalid value
380
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguage
381
     */
382
    public function testLoadLanguageThrowsInvalidArgumentException()
383
    {
384
        $repository = $this->getRepository();
385
386
        $repository->getContentLanguageService()->loadLanguage(PHP_INT_MAX);
387
    }
388
389
    /**
390
     * Test for the loadLanguages() method.
391
     *
392
     * @covers \eZ\Publish\API\Repository\LanguageService::loadLanguages
393
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
394
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testLoadLanguage
395
     */
396
    public function testLoadLanguages()
397
    {
398
        $repository = $this->getRepository();
399
400
        /* BEGIN: Use Case */
401
        $languageService = $repository->getContentLanguageService();
402
403
        // Create some languages
404
        $languageCreateEnglish = $languageService->newLanguageCreateStruct();
405
        $languageCreateEnglish->enabled = false;
406
        $languageCreateEnglish->name = 'English';
407
        $languageCreateEnglish->languageCode = 'eng-NZ';
408
409
        $languageCreateFrench = $languageService->newLanguageCreateStruct();
410
        $languageCreateFrench->enabled = false;
411
        $languageCreateFrench->name = 'French';
412
        $languageCreateFrench->languageCode = 'fre-FR';
413
414
        $languageService->createLanguage($languageCreateEnglish);
415
        $languageService->createLanguage($languageCreateFrench);
416
417
        $languages = $languageService->loadLanguages();
418
        self::assertInternalType('array', $languages);
0 ignored issues
show
Deprecated Code introduced by
The method PHPUnit\Framework\Assert::assertInternalType() has been deprecated with message: https://github.com/sebastianbergmann/phpunit/issues/3369

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

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