Completed
Push — master ( 7c0e42...8c347f )
by André
14:17
created

LanguageServiceTest::testLoadLanguage()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 28
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 15
nc 1
nop 0
dl 0
loc 28
rs 8.8571
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
            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
    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);
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
     * Helper method that creates a new language test fixture in the
553
     * API implementation under test.
554
     *
555
     * @return \eZ\Publish\API\Repository\Values\Content\Language
556
     */
557
    private function createLanguage()
558
    {
559
        $repository = $this->getRepository();
560
561
        $languageService = $repository->getContentLanguageService();
562
        $languageCreate = $languageService->newLanguageCreateStruct();
563
564
        $languageCreate->enabled = false;
565
        $languageCreate->name = 'English';
566
        $languageCreate->languageCode = 'eng-US';
567
568
        return $languageService->createLanguage($languageCreate);
569
    }
570
571
    /**
572
     * Test for the createLanguage() method.
573
     *
574
     * @covers \eZ\Publish\API\Repository\LanguageService::createLanguage
575
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
576
     */
577 View Code Duplication
    public function testCreateLanguageInTransactionWithRollback()
578
    {
579
        $repository = $this->getRepository();
580
581
        /* BEGIN: Use Case */
582
        $languageService = $repository->getContentLanguageService();
583
584
        // Start a new transaction
585
        $repository->beginTransaction();
586
587
        try {
588
            // Get create struct and set properties
589
            $languageCreate = $languageService->newLanguageCreateStruct();
590
            $languageCreate->enabled = true;
591
            $languageCreate->name = 'English (New Zealand)';
592
            $languageCreate->languageCode = 'eng-NZ';
593
594
            // Create new language
595
            $languageService->createLanguage($languageCreate);
596
        } catch (Exception $e) {
597
            // Cleanup hanging transaction on error
598
            $repository->rollback();
599
            throw $e;
600
        }
601
602
        // Rollback all changes
603
        $repository->rollback();
604
605
        try {
606
            // This call will fail with a "NotFoundException"
607
            $languageService->loadLanguage('eng-NZ');
608
        } catch (NotFoundException $e) {
609
            // Expected execution path
610
        }
611
        /* END: Use Case */
612
613
        $this->assertTrue(isset($e), 'Can still load language after rollback');
614
    }
615
616
    /**
617
     * Test for the createLanguage() method.
618
     *
619
     * @covers \eZ\Publish\API\Repository\LanguageService::createLanguage
620
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testCreateLanguage
621
     */
622 View Code Duplication
    public function testCreateLanguageInTransactionWithCommit()
623
    {
624
        $repository = $this->getRepository();
625
626
        /* BEGIN: Use Case */
627
        $languageService = $repository->getContentLanguageService();
628
629
        // Start a new transaction
630
        $repository->beginTransaction();
631
632
        try {
633
            // Get create struct and set properties
634
            $languageCreate = $languageService->newLanguageCreateStruct();
635
            $languageCreate->enabled = true;
636
            $languageCreate->name = 'English (New Zealand)';
637
            $languageCreate->languageCode = 'eng-NZ';
638
639
            // Create new language
640
            $languageService->createLanguage($languageCreate);
641
642
            // Commit all changes
643
            $repository->commit();
644
        } catch (Exception $e) {
645
            // Cleanup hanging transaction on error
646
            $repository->rollback();
647
            throw $e;
648
        }
649
650
        // Load new language
651
        $language = $languageService->loadLanguage('eng-NZ');
652
        /* END: Use Case */
653
654
        $this->assertEquals('eng-NZ', $language->languageCode);
655
    }
656
657
    /**
658
     * Test for the updateLanguageName() method.
659
     *
660
     * @covers \eZ\Publish\API\Repository\LanguageService::updateLanguageName
661
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testUpdateLanguageName
662
     */
663
    public function testUpdateLanguageNameInTransactionWithRollback()
664
    {
665
        $repository = $this->getRepository();
666
667
        /* BEGIN: Use Case */
668
        $languageService = $repository->getContentLanguageService();
669
670
        // Start a new transaction
671
        $repository->beginTransaction();
672
673
        try {
674
            // Load an existing language
675
            $language = $languageService->loadLanguage('eng-US');
676
677
            // Update the language name
678
            $languageService->updateLanguageName($language, 'My English');
679
        } catch (Exception $e) {
680
            // Cleanup hanging transaction on error
681
            $repository->rollback();
682
            throw $e;
683
        }
684
685
        // Rollback all changes
686
        $repository->rollback();
687
688
        // Load updated version, name will still be "English (American)"
689
        $updatedLanguage = $languageService->loadLanguage('eng-US');
690
        /* END: Use Case */
691
692
        $this->assertEquals('English (American)', $updatedLanguage->name);
693
    }
694
695
    /**
696
     * Test for the updateLanguageName() method.
697
     *
698
     * @covers \eZ\Publish\API\Repository\LanguageService::updateLanguageName
699
     * @depends eZ\Publish\API\Repository\Tests\LanguageServiceTest::testUpdateLanguageName
700
     */
701
    public function testUpdateLanguageNameInTransactionWithCommit()
702
    {
703
        $repository = $this->getRepository();
704
705
        /* BEGIN: Use Case */
706
        $languageService = $repository->getContentLanguageService();
707
708
        // Start a new transaction
709
        $repository->beginTransaction();
710
711
        try {
712
            // Load an existing language
713
            $language = $languageService->loadLanguage('eng-US');
714
715
            // Update the language name
716
            $languageService->updateLanguageName($language, 'My English');
717
718
            // Commit all changes
719
            $repository->commit();
720
        } catch (Exception $e) {
721
            // Cleanup hanging transaction on error
722
            $repository->rollback();
723
            throw $e;
724
        }
725
726
        // Load updated version, name will be "My English"
727
        $updatedLanguage = $languageService->loadLanguage('eng-US');
728
        /* END: Use Case */
729
730
        $this->assertEquals('My English', $updatedLanguage->name);
731
    }
732
}
733