Code Duplication    Length = 227-227 lines in 2 locations

tests/Impl/Serializer/V3/SymfonySerializerAdapterTest.php 1 location

@@ 17-243 (lines=227) @@
14
use Lamoda\IsmpClient\V3\Dto\FacadeMarkedProductsResponse;
15
use PHPUnit\Framework\TestCase;
16
17
final class SymfonySerializerAdapterTest extends TestCase
18
{
19
    /**
20
     * @var SerializerInterface
21
     */
22
    private $serializer;
23
24
    protected function setUp(): void
25
    {
26
        parent::setUp();
27
28
        $this->serializer = SymfonySerializerAdapterFactory::create();
29
    }
30
31
    /**
32
     * @dataProvider dataDeserialize
33
     */
34
    public function testDeserialize(string $class, string $data, object $expected): void
35
    {
36
        $result = $this->serializer->deserialize($class, $data);
37
38
        $this->assertEquals($expected, $result);
39
    }
40
41
    public function dataDeserialize(): array
42
    {
43
        return [
44
            [
45
                AuthCertResponse::class,
46
                json_encode(
47
                    [
48
                        'token' => 'test_token',
49
                    ]
50
                ),
51
                new AuthCertResponse(
52
                    'test_token'
53
                ),
54
            ],
55
            [
56
                FacadeDocListV2Response::class,
57
                json_encode(
58
                    [
59
                        'total' => 25,
60
                        'results' => [
61
                            [
62
                                'number' => 'b917dfb0-523d-41e0-9e64-e8bf0052c5bd',
63
                                'docDate' => '2019-01-18T06:45:35.630Z',
64
                                'receivedAt' => '2019-01-19T06:45:35.630Z',
65
                                'type' => 'LP_INTRODUCE_GOODS',
66
                                'status' => 'CHECKED_OK',
67
                                'senderName' => 'test',
68
                            ],
69
                        ],
70
                    ]
71
                ),
72
                new FacadeDocListV2Response(
73
                    25,
74
                    [
75
                        (new FacadeDocListV2ItemResponse(
76
                            'b917dfb0-523d-41e0-9e64-e8bf0052c5bd',
77
                            '2019-01-18T06:45:35.630Z',
78
                            '2019-01-19T06:45:35.630Z'
79
                        ))->setType('LP_INTRODUCE_GOODS')
80
                        ->setStatus('CHECKED_OK')
81
                        ->setSenderName('test')
82
                    ]
83
                ),
84
            ],
85
            'agent item' => [
86
                FacadeMarkedProductsResponse::class,
87
                json_encode(
88
                    [
89
                        'cis' => '010290000021360921&XjcbJ.KYB+pT',
90
                        'gtin' => '02900000213609',
91
                        'sgtin' => '&XjcbJ.KYB+pT',
92
                        'producerName' => 'ООО "ОБУВЬОПТ"',
93
                        'producerInn' => '7731362094',
94
                        'ownerName' => 'ООО "ОБУВЬОПТ"',
95
                        'ownerInn' => '7731362094',
96
                        'agentName' => 'ООО "Купишуз"',
97
                        'agentInn' => '7705935687',
98
                        'emissionDate' => '2020-01-21T13:04:54.416Z',
99
                        'introducedDate' => '2020-01-31T18:11:15.139Z',
100
                        'emissionType' => 'REMAINS',
101
                        'lastDocId' => '6e71f305-1ee4-4f1c-92ab-4a69f5bb7bf8',
102
                        'prevCises' => [],
103
                        'nextCises' => [],
104
                        'status' => 'INTRODUCED',
105
                        'countChildren' => 0,
106
                        'packType' => 'UNIT'
107
                    ]
108
                ),
109
                (new FacadeMarkedProductsResponse(
110
                    '010290000021360921&XjcbJ.KYB+pT',
111
                    '02900000213609',
112
                    '&XjcbJ.KYB+pT',
113
                    'ООО "ОБУВЬОПТ"',
114
                    '7731362094',
115
                    'INTRODUCED',
116
                    '2020-01-21T13:04:54.416Z',
117
                    'REMAINS',
118
                    [],
119
                    [],
120
                    'UNIT',
121
                    0
122
                ))
123
                    ->setOwnerInn('7731362094')
124
                    ->setOwnerName('ООО "ОБУВЬОПТ"')
125
                    ->setAgentName('ООО "Купишуз"')
126
                    ->setAgentInn('7705935687')
127
                    ->setLastDocId('6e71f305-1ee4-4f1c-92ab-4a69f5bb7bf8')
128
                    ->setIntroducedDate('2020-01-31T18:11:15.139Z')
129
            ],
130
            [
131
                FacadeMarkedProductsResponse::class,
132
                json_encode(
133
                    [
134
                        'cis' => "010463007034375021UptR1qHZW6\"B'",
135
                        'gtin' => '04630070343750',
136
                        'sgtin' => "UptR1qHZW6\"B'",
137
                        'productName' => 'Жен Полуботинки кроссовые типа кеды 005 модель CF2612 размер производителя 38 EUR, российский 37 код в учетной системе CH057AWHPGH0E380',
138
                        'producerName' => 'ООО "Купишуз"',
139
                        'producerInn' => '7705935687',
140
                        'ownerName' => 'ООО "Купишуз"',
141
                        'ownerInn' => '7705935687',
142
                        'emissionDate' => '2020-02-17T07:48:13.797Z',
143
                        'emissionType' => 'FOREIGN',
144
                        'name' => 'Жен Полуботинки кроссовые типа кеды 005 модель CF2612 размер производителя 38 EUR, российский 37 код в учетной системе CH057AWHPGH0E380',
145
                        'brand' => 'Chiara Ferragni Collection',
146
                        'model' => 'CF2612',
147
                        'prevCises' => [],
148
                        'nextCises' => [],
149
                        'status' => 'APPLIED',
150
                        'countChildren' => 0,
151
                        'packType' => 'UNIT',
152
                        'country' => 'ИТАЛИЯ',
153
                        'productTypeDesc' => 'КЕДЫ',
154
                        'color' => '005',
155
                        'materialDown' => '100 - резина',
156
                        'materialUpper' => '100 - натуральная кожа',
157
                        'goodSignedFlag' => 'true',
158
                        'materialLining' => '100 - натуральная кожа',
159
                        'goodTurnFlag' => 'true',
160
                        'goodMarkFlag' => 'true'
161
                    ]
162
                ),
163
                (new FacadeMarkedProductsResponse(
164
                    "010463007034375021UptR1qHZW6\"B'",
165
                    '04630070343750',
166
                    "UptR1qHZW6\"B'",
167
                    'ООО "Купишуз"',
168
                    '7705935687',
169
                    'APPLIED',
170
                    '2020-02-17T07:48:13.797Z',
171
                    'FOREIGN',
172
                    [],
173
                    [],
174
                    'UNIT',
175
                    0
176
                ))
177
                    ->setOwnerInn('7705935687')
178
                    ->setOwnerName('ООО "Купишуз"')
179
                    ->setProductName('Жен Полуботинки кроссовые типа кеды 005 модель CF2612 размер производителя 38 EUR, российский 37 код в учетной системе CH057AWHPGH0E380')
180
                    ->setName('Жен Полуботинки кроссовые типа кеды 005 модель CF2612 размер производителя 38 EUR, российский 37 код в учетной системе CH057AWHPGH0E380')
181
                    ->setBrand('Chiara Ferragni Collection')
182
                    ->setModel('CF2612')
183
                    ->setCountry('ИТАЛИЯ')
184
                    ->setProductTypeDesc('КЕДЫ')
185
                    ->setColor('005')
186
                    ->setMaterialDown('100 - резина')
187
                    ->setMaterialUpper('100 - натуральная кожа')
188
                    ->setMaterialLining('100 - натуральная кожа')
189
                    ->setGoodSignedFlag('true')
190
                    ->setGoodTurnFlag('true')
191
                    ->setGoodMarkFlag('true')
192
            ],
193
        ];
194
    }
195
196
    /**
197
     * @dataProvider dataSerialize
198
     */
199
    public function testSerialize(object $data, string $expected): void
200
    {
201
        $result = $this->serializer->serialize($data);
202
203
        $this->assertJsonStringEqualsJsonString($expected, $result);
204
    }
205
206
    public function dataSerialize(): array
207
    {
208
        return [
209
            [
210
                new AuthCertRequest(
211
                    'uuid_value',
212
                    'data_value'
213
                ),
214
                <<<JSON
215
{
216
  "uuid": "uuid_value",
217
  "data": "data_value"
218
}
219
JSON
220
                ,
221
            ],
222
        ];
223
    }
224
225
    public function testDeserializeError(): void
226
    {
227
        $this->expectException(IsmpSerializerErrorException::class);
228
229
        $this->serializer->deserialize('NOT_A_CLASS', null);
230
    }
231
232
    public function testSerializeError(): void
233
    {
234
        $this->expectException(IsmpSerializerErrorException::class);
235
236
        $this->serializer->serialize(new class {
237
            public function getProperty(): string
238
            {
239
                throw new \Exception();
240
            }
241
        });
242
    }
243
}
244

tests/Impl/Serializer/V4/SymfonySerializerAdapterTest.php 1 location

@@ 17-243 (lines=227) @@
14
use Lamoda\IsmpClient\V3\Dto\FacadeMarkedProductsResponse;
15
use PHPUnit\Framework\TestCase;
16
17
final class SymfonySerializerAdapterTest extends TestCase
18
{
19
    /**
20
     * @var SerializerInterface
21
     */
22
    private $serializer;
23
24
    protected function setUp(): void
25
    {
26
        parent::setUp();
27
28
        $this->serializer = SymfonySerializerAdapterFactory::create();
29
    }
30
31
    /**
32
     * @dataProvider dataDeserialize
33
     */
34
    public function testDeserialize(string $class, string $data, object $expected): void
35
    {
36
        $result = $this->serializer->deserialize($class, $data);
37
38
        $this->assertEquals($expected, $result);
39
    }
40
41
    public function dataDeserialize(): array
42
    {
43
        return [
44
            [
45
                AuthCertResponse::class,
46
                json_encode(
47
                    [
48
                        'token' => 'test_token',
49
                    ]
50
                ),
51
                new AuthCertResponse('test_token'),
52
            ],
53
            [
54
                FacadeDocListV2Response::class,
55
                json_encode(
56
                    [
57
                        'total' => 25,
58
                        'results' => [
59
                            [
60
                                'number' => 'b917dfb0-523d-41e0-9e64-e8bf0052c5bd',
61
                                'docDate' => '2019-01-18T06:45:35.630Z',
62
                                'receivedAt' => '2019-01-19T06:45:35.630Z',
63
                                'type' => 'LP_INTRODUCE_GOODS',
64
                                'status' => 'CHECKED_OK',
65
                                'senderName' => 'test',
66
                            ],
67
                        ],
68
                    ]
69
                ),
70
                new FacadeDocListV2Response(
71
                    25,
72
                    [
73
                        (new FacadeDocListV2ItemResponse(
74
                            'b917dfb0-523d-41e0-9e64-e8bf0052c5bd',
75
                            '2019-01-18T06:45:35.630Z',
76
                            '2019-01-19T06:45:35.630Z'
77
                        ))->setType('LP_INTRODUCE_GOODS')
78
                        ->setStatus('CHECKED_OK')
79
                        ->setSenderName('test')
80
                    ]
81
                ),
82
            ],
83
            'agent item' => [
84
                FacadeMarkedProductsResponse::class,
85
                json_encode(
86
                    [
87
                        'cis' => '010290000021360921&XjcbJ.KYB+pT',
88
                        'gtin' => '02900000213609',
89
                        'sgtin' => '&XjcbJ.KYB+pT',
90
                        'producerName' => 'ООО "ОБУВЬОПТ"',
91
                        'producerInn' => '7731362094',
92
                        'ownerName' => 'ООО "ОБУВЬОПТ"',
93
                        'ownerInn' => '7731362094',
94
                        'agentName' => 'ООО "Купишуз"',
95
                        'agentInn' => '7705935687',
96
                        'emissionDate' => '2020-01-21T13:04:54.416Z',
97
                        'introducedDate' => '2020-01-31T18:11:15.139Z',
98
                        'emissionType' => 'REMAINS',
99
                        'lastDocId' => '6e71f305-1ee4-4f1c-92ab-4a69f5bb7bf8',
100
                        'prevCises' => [],
101
                        'nextCises' => [],
102
                        'status' => 'INTRODUCED',
103
                        'countChildren' => 0,
104
                        'packType' => 'UNIT'
105
                    ]
106
                ),
107
                (new FacadeMarkedProductsResponse(
108
                    '010290000021360921&XjcbJ.KYB+pT',
109
                    '02900000213609',
110
                    '&XjcbJ.KYB+pT',
111
                    'ООО "ОБУВЬОПТ"',
112
                    '7731362094',
113
                    'INTRODUCED',
114
                    '2020-01-21T13:04:54.416Z',
115
                    'REMAINS',
116
                    [],
117
                    [],
118
                    'UNIT',
119
                    0
120
                ))
121
                    ->setOwnerInn('7731362094')
122
                    ->setOwnerName('ООО "ОБУВЬОПТ"')
123
                    ->setAgentName('ООО "Купишуз"')
124
                    ->setAgentInn('7705935687')
125
                    ->setLastDocId('6e71f305-1ee4-4f1c-92ab-4a69f5bb7bf8')
126
                    ->setIntroducedDate('2020-01-31T18:11:15.139Z')
127
            ],
128
            [
129
                FacadeMarkedProductsResponse::class,
130
                json_encode(
131
                    [
132
                        'cis' => "010463007034375021UptR1qHZW6\"B'",
133
                        'gtin' => '04630070343750',
134
                        'sgtin' => "UptR1qHZW6\"B'",
135
                        'productName' => 'Жен Полуботинки кроссовые типа кеды 005 модель CF2612 размер производителя 38 EUR, российский 37 код в учетной системе CH057AWHPGH0E380',
136
                        'producerName' => 'ООО "Купишуз"',
137
                        'producerInn' => '7705935687',
138
                        'ownerName' => 'ООО "Купишуз"',
139
                        'ownerInn' => '7705935687',
140
                        'emissionDate' => '2020-02-17T07:48:13.797Z',
141
                        'emissionType' => 'FOREIGN',
142
                        'name' => 'Жен Полуботинки кроссовые типа кеды 005 модель CF2612 размер производителя 38 EUR, российский 37 код в учетной системе CH057AWHPGH0E380',
143
                        'brand' => 'Chiara Ferragni Collection',
144
                        'model' => 'CF2612',
145
                        'prevCises' => [],
146
                        'nextCises' => [],
147
                        'status' => 'APPLIED',
148
                        'countChildren' => 0,
149
                        'packType' => 'UNIT',
150
                        'country' => 'ИТАЛИЯ',
151
                        'productTypeDesc' => 'КЕДЫ',
152
                        'color' => '005',
153
                        'materialDown' => '100 - резина',
154
                        'materialUpper' => '100 - натуральная кожа',
155
                        'goodSignedFlag' => 'true',
156
                        'materialLining' => '100 - натуральная кожа',
157
                        'goodTurnFlag' => 'true',
158
                        'goodMarkFlag' => 'true'
159
                    ]
160
                ),
161
                (new FacadeMarkedProductsResponse(
162
                    "010463007034375021UptR1qHZW6\"B'",
163
                    '04630070343750',
164
                    "UptR1qHZW6\"B'",
165
                    'ООО "Купишуз"',
166
                    '7705935687',
167
                    'APPLIED',
168
                    '2020-02-17T07:48:13.797Z',
169
                    'FOREIGN',
170
                    [],
171
                    [],
172
                    'UNIT',
173
                    0
174
                ))
175
                    ->setOwnerInn('7705935687')
176
                    ->setOwnerName('ООО "Купишуз"')
177
                    ->setProductName('Жен Полуботинки кроссовые типа кеды 005 модель CF2612 размер производителя 38 EUR, российский 37 код в учетной системе CH057AWHPGH0E380')
178
                    ->setName('Жен Полуботинки кроссовые типа кеды 005 модель CF2612 размер производителя 38 EUR, российский 37 код в учетной системе CH057AWHPGH0E380')
179
                    ->setBrand('Chiara Ferragni Collection')
180
                    ->setModel('CF2612')
181
                    ->setCountry('ИТАЛИЯ')
182
                    ->setProductTypeDesc('КЕДЫ')
183
                    ->setColor('005')
184
                    ->setMaterialDown('100 - резина')
185
                    ->setMaterialUpper('100 - натуральная кожа')
186
                    ->setMaterialLining('100 - натуральная кожа')
187
                    ->setGoodSignedFlag('true')
188
                    ->setGoodTurnFlag('true')
189
                    ->setGoodMarkFlag('true')
190
            ],
191
        ];
192
    }
193
194
    /**
195
     * @dataProvider dataSerialize
196
     */
197
    public function testSerialize(object $data, string $expected): void
198
    {
199
        $result = $this->serializer->serialize($data);
200
201
        $this->assertJsonStringEqualsJsonString($expected, $result);
202
    }
203
204
    public function dataSerialize(): array
205
    {
206
        return [
207
            [
208
                new AuthCertRequest(
209
                    'uuid_value',
210
                    'data_value'
211
                ),
212
                <<<JSON
213
{
214
  "uuid": "uuid_value",
215
  "data": "data_value"
216
}
217
JSON
218
                ,
219
            ],
220
        ];
221
    }
222
223
    public function testDeserializeError(): void
224
    {
225
        $this->expectException(IsmpSerializerErrorException::class);
226
227
        $this->serializer->deserialize('NOT_A_CLASS', null);
228
    }
229
230
    public function testSerializeError(): void
231
    {
232
        $this->expectException(IsmpSerializerErrorException::class);
233
234
        $this->serializer->serialize(new class {
235
            public function getProperty(): string
236
            {
237
                throw new \Exception();
238
            }
239
        });
240
    }
241
}
242