Completed
Push — develop ( caeb72...8af102 )
by Bartko
02:58
created

UtilitiesTest::testFlatToNested()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 44
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 44
c 0
b 0
f 0
rs 8.8571
cc 1
eloc 26
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace StefanoTreeTest\Unit;
6
7
use StefanoTree\NestedSet\Utilities;
8
use StefanoTreeTest\UnitTestCase;
9
10
class UtilitiesTest extends UnitTestCase
11
{
12
    public function testFlatToNested()
13
    {
14
        $flatTree = [
15
            [
16
                'id' => '1',
17
                'parent' => null,
18
                'level' => 0,
19
            ],
20
            [
21
                'id' => '1.1',
22
                'parent' => '1',
23
                'level' => 1,
24
            ],
25
            [
26
                'id' => '1.2',
27
                'parent' => '1',
28
                'level' => 1,
29
            ],
30
        ];
31
        $result = Utilities::flatToNested($flatTree);
32
33
        $this->assertEquals(
34
            [
35
                [
36
                    'id' => '1',
37
                    'parent' => null,
38
                    'level' => 0,
39
                    '_children' => [
40
                        [
41
                            'id' => '1.1',
42
                            'parent' => '1',
43
                            'level' => 1,
44
                            '_children' => [],
45
                        ],
46
                        [
47
                            'id' => '1.2',
48
                            'parent' => '1',
49
                            'level' => 1,
50
                            '_children' => [],
51
                        ],
52
                    ],
53
                ],
54
            ], $result);
55
    }
56
57
    public function testFlatToNestedMultiRootNode()
58
    {
59
        $flatTree = [
60
            [
61
                'id' => '1',
62
                'parent' => null,
63
                'level' => 1,
64
            ],
65
            [
66
                'id' => '1.2',
67
                'parent' => '1',
68
                'level' => 2,
69
            ],
70
            [
71
                'id' => '2',
72
                'parent' => null,
73
                'level' => 1,
74
            ],
75
            [
76
                'id' => '2.1',
77
                'parent' => '2',
78
                'level' => 2,
79
            ],
80
        ];
81
        $result = Utilities::flatToNested($flatTree);
82
83
        $this->assertEquals(
84
            [
85
                [
86
                    'id' => '1',
87
                    'parent' => null,
88
                    'level' => 1,
89
                    '_children' => [
90
                        [
91
                            'id' => '1.2',
92
                            'parent' => '1',
93
                            'level' => 2,
94
                            '_children' => [],
95
                        ],
96
                    ],
97
                ],
98
                [
99
                    'id' => '2',
100
                    'parent' => null,
101
                    'level' => 1,
102
                    '_children' => [
103
                        [
104
                            'id' => '2.1',
105
                            'parent' => '2',
106
                            'level' => 2,
107
                            '_children' => [],
108
                        ],
109
                    ],
110
                ],
111
            ], $result);
112
    }
113
114
    public function testFlatToNestedComplexTree()
115
    {
116
        $flatTree = [
117
            [
118
                'id' => '1',
119
                'parent' => null,
120
                'level' => 1,
121
            ],
122
            [
123
                'id' => '1.2',
124
                'parent' => '1',
125
                'level' => 2,
126
            ],
127
            [
128
                'id' => '1.2.1',
129
                'parent' => '1.2',
130
                'level' => 3,
131
            ],
132
            [
133
                'id' => '1.2.1.1',
134
                'parent' => '1.2.1',
135
                'level' => 4,
136
            ],
137
            [
138
                'id' => '2.1',
139
                'parent' => '1',
140
                'level' => 2,
141
            ],
142
            [
143
                'id' => '2.1.1',
144
                'parent' => '2.1',
145
                'level' => 3,
146
            ],
147
            [
148
                'id' => '2.1.2',
149
                'parent' => '2.1',
150
                'level' => 3,
151
            ],
152
            [
153
                'id' => '2.1.3',
154
                'parent' => '2.1',
155
                'level' => 3,
156
            ],
157
            [
158
                'id' => '2',
159
                'parent' => null,
160
                'level' => 1,
161
            ],
162
            [
163
                'id' => '2.1',
164
                'parent' => '2',
165
                'level' => 2,
166
            ],
167
            [
168
                'id' => '2.1.1',
169
                'parent' => '2.1',
170
                'level' => 3,
171
            ],
172
            [
173
                'id' => '2.2',
174
                'parent' => '2',
175
                'level' => 2,
176
            ],
177
        ];
178
        $result = Utilities::flatToNested($flatTree);
179
180
        $this->assertEquals(
181
            [
182
                [
183
                    'id' => '1',
184
                    'parent' => null,
185
                    'level' => 1,
186
                    '_children' => [
187
                        [
188
                            'id' => '1.2',
189
                            'parent' => '1',
190
                            'level' => 2,
191
                            '_children' => [
192
                                [
193
                                    'id' => '1.2.1',
194
                                    'parent' => '1.2',
195
                                    'level' => 3,
196
                                    '_children' => [
197
                                        [
198
                                            'id' => '1.2.1.1',
199
                                            'parent' => '1.2.1',
200
                                            'level' => 4,
201
                                            '_children' => [],
202
                                        ],
203
                                    ],
204
                                ],
205
                            ],
206
                        ],
207
                        [
208
                            'id' => '2.1',
209
                            'parent' => '1',
210
                            'level' => 2,
211
                            '_children' => [
212
                                [
213
                                    'id' => '2.1.1',
214
                                    'parent' => '2.1',
215
                                    'level' => 3,
216
                                    '_children' => [],
217
                                ],
218
                                [
219
                                    'id' => '2.1.2',
220
                                    'parent' => '2.1',
221
                                    'level' => 3,
222
                                    '_children' => [],
223
                                ],
224
                                [
225
                                    'id' => '2.1.3',
226
                                    'parent' => '2.1',
227
                                    'level' => 3,
228
                                    '_children' => [],
229
                                ],
230
                            ],
231
                        ],
232
                    ],
233
                ],
234
                [
235
                    'id' => '2',
236
                    'parent' => null,
237
                    'level' => 1,
238
                    '_children' => [
239
                        [
240
                            'id' => '2.1',
241
                            'parent' => '2',
242
                            'level' => 2,
243
                            '_children' => [
244
                                [
245
                                    'id' => '2.1.1',
246
                                    'parent' => '2.1',
247
                                    'level' => 3,
248
                                    '_children' => [],
249
                                ],
250
                            ],
251
                        ],
252
                        [
253
                            'id' => '2.2',
254
                            'parent' => '2',
255
                            'level' => 2,
256
                            '_children' => [],
257
                        ],
258
                    ],
259
                ],
260
            ], $result);
261
    }
262
263
    public function testFlatToNestedChangeLevelName()
264
    {
265
        $flatTree = [
266
            [
267
                'id' => '1',
268
                'parent' => null,
269
                'lvl' => 0,
270
            ],
271
            [
272
                'id' => '1.1',
273
                'parent' => '1',
274
                'lvl' => 1,
275
            ],
276
            [
277
                'id' => '1.2',
278
                'parent' => '1',
279
                'lvl' => 1,
280
            ],
281
        ];
282
        $result = Utilities::flatToNested($flatTree, 'lvl');
283
284
        $this->assertEquals(
285
            [
286
                [
287
                    'id' => '1',
288
                    'parent' => null,
289
                    'lvl' => 0,
290
                    '_children' => [
291
                        [
292
                            'id' => '1.1',
293
                            'parent' => '1',
294
                            'lvl' => 1,
295
                            '_children' => [],
296
                        ],
297
                        [
298
                            'id' => '1.2',
299
                            'parent' => '1',
300
                            'lvl' => 1,
301
                            '_children' => [],
302
                        ],
303
                    ],
304
                ],
305
            ], $result);
306
    }
307
}
308