schemator-php

Форк
0
344 строки · 8.8 Кб
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Smoren\Schemator\Tests\Unit\NestedAccessor;
6

7
use Smoren\Schemator\Components\NestedAccessor;
8

9
class ExamplesTest extends \Codeception\Test\Unit
10
{
11
    /**
12
     * @dataProvider dataProviderForGetStrictSingle
13
     * @dataProvider dataProviderForGetStrictMultipleIndexed
14
     * @dataProvider dataProviderForGetCitiesStrict
15
     */
16
    public function testGetStrict($source, $path, $expected)
17
    {
18
        // Given
19
        $accessor = new NestedAccessor($source);
20

21
        // When
22
        $actual = $accessor->get($path);
23

24
        // Then
25
        $this->assertEquals($expected, $actual);
26
    }
27

28
    /**
29
     * @dataProvider dataProviderForGetStrictSingle
30
     * @dataProvider dataProviderForGetStrictMultipleIndexed
31
     * @dataProvider dataProviderForGetCitiesStrict
32
     * @dataProvider dataProviderForGetCitiesNonStrict
33
     */
34
    public function testGetNonStrict($source, $path, $expected)
35
    {
36
        // Given
37
        $accessor = new NestedAccessor($source);
38

39
        // When
40
        $actual = $accessor->get($path, false);
41

42
        // Then
43
        $this->assertEquals($expected, $actual);
44
    }
45

46
    public function dataProviderForGetStrictSingle(): array
47
    {
48
        $source = [1, 2, 3, 'a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]];
49

50
        return [
51
            [
52
                $source,
53
                'a',
54
                ['b' => [[11, 22]], 'c' => [[33, 44]]],
55
            ],
56
            [
57
                $source,
58
                'a.*',
59
                [[[11, 22]], [[33, 44]]],
60
            ],
61
            [
62
                $source,
63
                'a.*.0',
64
                [[11, 22], [33, 44]],
65
            ],
66
            [
67
                $source,
68
                'a.*.0.0',
69
                [11, 33],
70
            ],
71
            [
72
                $source,
73
                'a.*.0.1',
74
                [22, 44],
75
            ],
76
            [
77
                $source,
78
                'a.*.0.|.0',
79
                [11, 22],
80
            ],
81
        ];
82
    }
83

84
    public function dataProviderForGetStrictMultipleIndexed(): array
85
    {
86
        $source = [
87
            ['a' => ['b' => [[11, 22]], 'c' => [[33, 44]]]],
88
            ['a' => ['b' => [[12, 23]], 'd' => [[34, 45]]]],
89
            ['a' => ['b' => [[13, 24]], 'e' => [[35, 46]]]],
90
        ];
91

92
        return [
93
            [
94
                $source,
95
                '*.a',
96
                [
97
                    ['b' => [[11, 22]], 'c' => [[33, 44]]],
98
                    ['b' => [[12, 23]], 'd' => [[34, 45]]],
99
                    ['b' => [[13, 24]], 'e' => [[35, 46]]],
100
                ],
101
            ],
102
            [
103
                $source,
104
                '*.a.b',
105
                [
106
                    [[11, 22]],
107
                    [[12, 23]],
108
                    [[13, 24]],
109
                ],
110
            ],
111
            [
112
                $source,
113
                '*.a.b.0',
114
                [
115
                    [11, 22],
116
                    [12, 23],
117
                    [13, 24],
118
                ],
119
            ],
120
            [
121
                $source,
122
                '*.a.b.|.0',
123
                [[11, 22]],
124
            ],
125
            [
126
                $source,
127
                '*.a.b.*',
128
                [
129
                    [11, 22],
130
                    [12, 23],
131
                    [13, 24],
132
                ],
133
            ],
134
            [
135
                $source,
136
                '*.a.b.*.0',
137
                [11, 12, 13],
138
            ],
139
            [
140
                $source,
141
                '*.a.b.*.1',
142
                [22, 23, 24],
143
            ],
144
            [
145
                $source,
146
                '*.a.b.*.*',
147
                [11, 22, 12, 23, 13, 24],
148
            ],
149
            [
150
                $source,
151
                '*.a.b.*.|.0',
152
                [11, 22],
153
            ],
154
            [
155
                $source,
156
                '*.a.b.*.|.1',
157
                [12, 23],
158
            ],
159
            [
160
                $source,
161
                '*.a.b.*.|.2',
162
                [13, 24],
163
            ],
164
        ];
165
    }
166

167
    public function dataProviderForGetCitiesStrict(): array
168
    {
169
        $cities = [
170
            [
171
                'name' => 'London',
172
                'country' => [
173
                    'id' => 111,
174
                    'name' => 'UK',
175
                ],
176
                'streets' => [
177
                    [
178
                        'id' => 1000,
179
                        'name' => 'Carnaby Street',
180
                        'houses' => [1, 5, 9],
181
                    ],
182
                    [
183
                        'id' => 1002,
184
                        'name' => 'Abbey Road',
185
                        'houses' => [22, 35, 49],
186
                    ],
187
                    [
188
                        'id' => 1003,
189
                        'name' => 'Brick Lane',
190
                        'houses' => [11, 12, 15],
191
                    ],
192
                ],
193
            ],
194
            [
195
                'name' => 'Berlin',
196
                'country' => [
197
                    'id' => 222,
198
                    'name' => 'Germany',
199
                ],
200
                'streets' => [
201
                    [
202
                        'id' => 2000,
203
                        'name' => 'Oderbergerstrasse',
204
                        'houses' => [2, 6, 12],
205
                    ],
206
                ],
207
            ],
208
            [
209
                'name' => 'Madrid',
210
                'country' => [
211
                    'id' => 333,
212
                    'name' => 'Spain',
213
                ],
214
                'streets' => [],
215
            ],
216
        ];
217

218
        return [
219
            [
220
                $cities,
221
                '*.name',
222
                ['London', 'Berlin', 'Madrid'],
223
            ],
224
            [
225
                $cities,
226
                '*.country.name',
227
                ['UK', 'Germany', 'Spain'],
228
            ],
229
            [
230
                $cities,
231
                '*.streets.*.name',
232
                ['Carnaby Street', 'Abbey Road', 'Brick Lane', 'Oderbergerstrasse'],
233
            ],
234
            [
235
                $cities,
236
                '*.streets.*.houses.*',
237
                [1, 5, 9, 22, 35, 49, 11, 12, 15, 2, 6, 12],
238
            ],
239
            [
240
                $cities,
241
                '*.streets.*.houses',
242
                [[1, 5, 9], [22, 35, 49], [11, 12, 15], [2, 6, 12]],
243
            ],
244
        ];
245
    }
246

247
    public function dataProviderForGetCitiesNonStrict(): array
248
    {
249
        $cities = [
250
            [
251
                'name' => 'London',
252
                'country' => [
253
                    'id' => 111,
254
                    'name' => 'UK',
255
                ],
256
                'streets' => [
257
                    [
258
                        'id' => 1000,
259
                        'name' => 'Carnaby Street',
260
                        'houses' => [1, 5, 9],
261
                    ],
262
                    [
263
                        'id' => 1002,
264
                        'name' => 'Abbey Road',
265
                        'houses' => [22, 35, 49],
266
                    ],
267
                    [
268
                        'id' => 1003,
269
                        'name' => 'Brick Lane',
270
                    ],
271
                ],
272
            ],
273
            [
274
                'name' => 'Berlin',
275
                'country' => [
276
                    'id' => 222,
277
                    'name' => 'Germany',
278
                ],
279
                'streets' => [
280
                    [
281
                        'id' => 2000,
282
                        'name' => 'Oderbergerstrasse',
283
                        'houses' => [2, 6, 12],
284
                    ],
285
                ],
286
            ],
287
            [
288
                'name' => 'Madrid',
289
                'country' => [
290
                    'id' => 333,
291
                    'name' => 'Spain',
292
                ],
293
            ],
294
        ];
295

296
        return [
297
            [
298
                $cities,
299
                '*.name',
300
                ['London', 'Berlin', 'Madrid'],
301
            ],
302
            [
303
                $cities,
304
                '*.country.name',
305
                ['UK', 'Germany', 'Spain'],
306
            ],
307
            [
308
                $cities,
309
                '*.streets.*.name',
310
                ['Carnaby Street', 'Abbey Road', 'Brick Lane', 'Oderbergerstrasse'],
311
            ],
312
            [
313
                $cities,
314
                '*.streets.*.houses.*',
315
                [1, 5, 9, 22, 35, 49, 2, 6, 12],
316
            ],
317
            [
318
                $cities,
319
                '*.streets.*.houses',
320
                [[1, 5, 9], [22, 35, 49], [2, 6, 12]],
321
            ],
322
            [
323
                $cities,
324
                '*.streets.*.test',
325
                [],
326
            ],
327
            [
328
                $cities,
329
                'streets.*.test',
330
                null,
331
            ],
332
            [
333
                $cities,
334
                '*.name.*.test',
335
                [],
336
            ],
337
            [
338
                $cities,
339
                '0.name.*',
340
                null,
341
            ],
342
        ];
343
    }
344
}
345

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.