Passed
Push — master ( d2e487...b38026 )
by Tobias
05:31
created

testGetResultWithArrayMetadata()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 41
Code Lines 31

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 31
c 1
b 0
f 0
nc 2
nop 0
dl 0
loc 41
rs 9.424
1
<?php
2
3
/*
4
 * This file is part of the PHP Translation package.
5
 *
6
 * (c) PHP Translation team <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Translation\Bundle\Tests\Unit\Catalogue\Operation;
13
14
use PHPUnit\Framework\TestCase;
0 ignored issues
show
Bug introduced by
The type PHPUnit\Framework\TestCase was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
15
use Symfony\Component\Translation\MessageCatalogue;
16
use Symfony\Component\Translation\MessageCatalogueInterface;
17
use Translation\Bundle\Catalogue\Operation\ReplaceOperation;
18
19
class ReplaceOperationTest extends TestCase
20
{
21
    public function testGetMessagesFromSingleDomain(): void
22
    {
23
        $operation = $this->createOperation(
24
            new MessageCatalogue('en', ['messages' => ['a' => 'new_a', 'c' => 'new_c']]),
25
            new MessageCatalogue('en', ['messages' => ['a' => 'old_a', 'b' => 'old_b']])
26
        );
27
28
        $this->assertEquals(
29
            ['a' => 'new_a', 'b' => 'old_b', 'c' => 'new_c'],
30
            $operation->getMessages('messages')
31
        );
32
33
        $this->assertEquals(
34
            ['c' => 'new_c'],
35
            $operation->getNewMessages('messages')
36
        );
37
38
        $this->assertEquals(
39
            ['b' => 'old_b'],
40
            $operation->getObsoleteMessages('messages')
41
        );
42
    }
43
44
    public function testGetResultFromSingleDomain(): void
45
    {
46
        $this->assertEquals(
47
            new MessageCatalogue('en', [
48
                'messages' => ['a' => 'new_a', 'b' => 'old_b', 'c' => 'new_c'],
49
            ]),
50
            $this->createOperation(
51
                new MessageCatalogue('en', ['messages' => ['a' => 'new_a', 'c' => 'new_c']]),
52
                new MessageCatalogue('en', ['messages' => ['a' => 'old_a', 'b' => 'old_b']])
53
            )->getResult()
54
        );
55
    }
56
57
    public function testGetResultWithNullValues(): void
58
    {
59
        $this->assertEquals(
60
            new MessageCatalogue('en', [
61
                'messages' => ['a' => 'old_a', 'b' => 'old_b', 'c' => null],
62
            ]),
63
            $this->createOperation(
64
                new MessageCatalogue('en', ['messages' => ['a' => null, 'c' => null]]),
65
                new MessageCatalogue('en', ['messages' => ['a' => 'old_a', 'b' => 'old_b']])
66
            )->getResult()
67
        );
68
    }
69
70
    public function testGetResultWithMetadata(): void
71
    {
72
        $leftCatalogue = new MessageCatalogue('en', ['messages' => ['a' => 'new_a', 'b' => 'new_b']]);
73
        $leftCatalogue->setMetadata('a', 'foo', 'messages');
74
        $leftCatalogue->setMetadata('b', 'bar', 'messages');
75
        $rightCatalogue = new MessageCatalogue('en', ['messages' => ['b' => 'old_b', 'c' => 'old_c']]);
76
        $rightCatalogue->setMetadata('b', 'baz', 'messages');
77
        $rightCatalogue->setMetadata('c', 'qux', 'messages');
78
79
        $mergedCatalogue = new MessageCatalogue('en', ['messages' => ['a' => 'new_a', 'b' => 'new_b', 'c' => 'old_c']]);
80
        $mergedCatalogue->setMetadata('a', 'foo', 'messages');
81
        $mergedCatalogue->setMetadata('b', 'bar', 'messages');
82
        $mergedCatalogue->setMetadata('c', 'qux', 'messages');
83
84
        $this->assertEquals(
85
            $mergedCatalogue,
86
            $this->createOperation($leftCatalogue, $rightCatalogue)->getResult()
87
        );
88
    }
89
90
    public function testGetResultWithArrayMetadata(): void
91
    {
92
        $leftCatalogue = new MessageCatalogue('en', ['messages' => ['a' => 'new_a', 'b' => 'new_b']]);
93
        $notes = [
94
            ['category' => 'note1', 'content' => 'a'],
95
            ['category' => 'note2', 'content' => 'b'],
96
        ];
97
        $leftCatalogue->setMetadata('a', ['notes' => ['test']], 'messages');
98
        $leftCatalogue->setMetadata('b', ['notes' => $notes, 'meta0' => 'zz', 'meta1' => 'yy'], 'messages');
99
100
        $rightCatalogue = new MessageCatalogue('en', ['messages' => ['b' => 'old_b', 'c' => 'old_c']]);
101
        $notes = [
102
            ['category' => 'note2', 'content' => 'b'],
103
            ['category' => 'note2', 'content' => 'c'],
104
        ];
105
        $rightCatalogue->setMetadata('b', ['notes' => $notes, 'meta0' => 'aa', 'meta2' => 'xx'], 'messages');
106
        $rightCatalogue->setMetadata('c', 'qux', 'messages');
107
108
        $mergedCatalogue = new MessageCatalogue('en', ['messages' => ['a' => 'new_a', 'b' => 'new_b', 'c' => 'old_c']]);
109
        $mergedNotes = [
110
            ['category' => 'note1', 'content' => 'a'],
111
            ['category' => 'note2', 'content' => 'b'],
112
            ['category' => 'note2', 'content' => 'c'],
113
        ];
114
        $mergedCatalogue->setMetadata('a', ['notes' => ['test']], 'messages');
115
        $mergedCatalogue->setMetadata('b', ['notes' => $mergedNotes, 'meta0' => 'zz',  'meta1' => 'yy', 'meta2' => 'xx'], 'messages');
116
        $mergedCatalogue->setMetadata('c', 'qux', 'messages');
117
118
        $resultCatalogue = $this->createOperation($leftCatalogue, $rightCatalogue)->getResult();
119
120
        $this->assertEquals(['notes' => ['test']], $resultCatalogue->getMetadata('a'));
121
        $this->assertEquals('qux', $resultCatalogue->getMetadata('c'));
122
123
        $bMeta = $resultCatalogue->getMetadata('b');
124
        $this->assertCount(4, $bMeta);
125
        $this->assertEquals('zz', $bMeta['meta0']);
126
        $this->assertEquals('yy', $bMeta['meta1']);
127
        $this->assertEquals('xx', $bMeta['meta2']);
128
        $this->assertCount(3, $bMeta['notes']);
129
        foreach ($mergedNotes as $note) {
130
            $this->assertContains($note, $bMeta['notes']);
131
        }
132
    }
133
134
    protected function createOperation(MessageCatalogueInterface $source, MessageCatalogueInterface $target): ReplaceOperation
135
    {
136
        return new ReplaceOperation($source, $target);
137
    }
138
}
139