xref: /plugin/simplenavi/_test/SimplenaviTest.php (revision d418c0312966259c1e7c5b4672e7cb5733092796)
1<?php
2
3namespace dokuwiki\plugin\simplenavi\test;
4
5use DokuWikiTest;
6use TestRequest;
7
8/**
9 * General tests for the simplenavi plugin
10 *
11 * @author  Michael Große <grosse@cosmocode.de>
12 *
13 * @group plugin_simplenavi
14 * @group plugins
15 */
16class SimplenaviTest extends DokuWikiTest
17{
18
19    protected $pluginsEnabled = array('simplenavi');
20
21    public function setUp(): void
22    {
23        parent::setUp();
24        saveWikiText('sidebar', '{{simplenavi>}}', 'create test sidebar');
25
26        $pages = [
27            ['foo', 'Foo Page'],
28            ['simplenavi', 'Self Start'],
29            ['namespace1:start', 'ZZZ Namespace 1 Start'],
30            ['namespace2:foo', 'Namespace 2 Foo'],
31            ['namespace2', 'Namespace 2 Start'],
32            ['namespace12:foo', 'Namespace 12 Foo'],
33            ['namespace12:start', 'Namespace 12 Start'],
34            ['namespace123:namespace123', 'AAA Namespace 123 Start'],
35            ['namespace123:foo', 'Namespace 123 Foo'],
36            ['namespace123:deep:start', 'Namespace 123 Deep Start'],
37            ['namespace123:deep:foo', 'Namespace 123 Deep Foo'],
38            ['namespace21:foo', 'Namespace 21 Foo'],
39            ['namespace21:start', 'Namespace 21 Start'],
40        ];
41
42        foreach ($pages as $page) {
43            saveWikiText('simplenavi:' . $page[0], '====== ' . $page[1] . ' ======', 'create test page');
44        }
45
46    }
47
48    public function dataProvider()
49    {
50
51        yield [
52            'set' => 'by ID, all branches closed',
53            'titlesort' => false,
54            'natsort' => false,
55            'nsfirst' => false,
56            'home' => false,
57            'current' => 'simplenavi:page',
58            'expect' => [
59                'simplenavi:foo',
60                'simplenavi:namespace1:start',
61                'simplenavi:namespace12:start',
62                'simplenavi:namespace123:namespace123',
63                'simplenavi:namespace2',
64                'simplenavi:namespace21:start',
65            ]
66        ];
67
68        yield [
69            'set' => 'by ID, Natural Sort, all branches closed',
70            'titlesort' => false,
71            'natsort' => true,
72            'nsfirst' => false,
73            'home' => false,
74            'current' => 'simplenavi:page',
75            'expect' => [
76                'simplenavi:foo',
77                'simplenavi:namespace1:start',
78                'simplenavi:namespace2',
79                'simplenavi:namespace12:start',
80                'simplenavi:namespace21:start',
81                'simplenavi:namespace123:namespace123',
82            ]
83        ];
84
85        yield [
86            'set' => 'by ID, branch open',
87            'titlesort' => false,
88            'natsort' => false,
89            'nsfirst' => false,
90            'home' => false,
91            'current' => 'simplenavi:namespace123:deep:foo',
92            'expect' => [
93                'simplenavi:foo',
94                'simplenavi:namespace1:start',
95                'simplenavi:namespace12:start',
96                'simplenavi:namespace123:namespace123',
97                'simplenavi:namespace123:deep:start',
98                'simplenavi:namespace123:deep:foo',
99                'simplenavi:namespace123:foo',
100                'simplenavi:namespace2',
101                'simplenavi:namespace21:start',
102            ]
103        ];
104
105        yield [
106            'set' => 'by ID, Natural Sort, branch open',
107            'titlesort' => false,
108            'natsort' => true,
109            'nsfirst' => false,
110            'home' => false,
111            'current' => 'simplenavi:namespace123:deep:foo',
112            'expect' => [
113                'simplenavi:foo',
114                'simplenavi:namespace1:start',
115                'simplenavi:namespace2',
116                'simplenavi:namespace12:start',
117                'simplenavi:namespace21:start',
118                'simplenavi:namespace123:namespace123',
119                'simplenavi:namespace123:deep:start',
120                'simplenavi:namespace123:deep:foo',
121                'simplenavi:namespace123:foo',
122            ]
123        ];
124
125        yield [
126            'set' => 'by ID, Natural Sort, NS first, branch open',
127            'titlesort' => false,
128            'natsort' => true,
129            'nsfirst' => true,
130            'home' => false,
131            'current' => 'simplenavi:namespace123:deep:foo',
132            'expect' => [
133                'simplenavi:namespace1:start',
134                'simplenavi:namespace2',
135                'simplenavi:namespace12:start',
136                'simplenavi:namespace21:start',
137                'simplenavi:namespace123:namespace123',
138                'simplenavi:namespace123:deep:start',
139                'simplenavi:namespace123:deep:foo',
140                'simplenavi:namespace123:foo',
141                'simplenavi:foo',
142            ]
143        ];
144
145        yield [
146            'set' => 'by Title, all branches closed',
147            'titlesort' => true,
148            'natsort' => false,
149            'nsfirst' => false,
150            'home' => false,
151            'current' => 'simplenavi:page',
152            'expect' => [
153                'simplenavi:namespace123:namespace123',
154                'simplenavi:foo',
155                'simplenavi:namespace12:start',
156                'simplenavi:namespace2',
157                'simplenavi:namespace21:start',
158                'simplenavi:namespace1:start',
159            ]
160        ];
161
162        yield [
163            'set' => 'by Title, Natural Search, all branches closed',
164            'titlesort' => true,
165            'natsort' => true,
166            'nsfirst' => false,
167            'home' => false,
168            'current' => 'simplenavi:page',
169            'expect' => [
170                'simplenavi:namespace123:namespace123',
171                'simplenavi:foo',
172                'simplenavi:namespace2',
173                'simplenavi:namespace12:start',
174                'simplenavi:namespace21:start',
175                'simplenavi:namespace1:start',
176            ]
177        ];
178
179        yield [
180            'set' => 'by Title, branch open',
181            'titlesort' => true,
182            'natsort' => false,
183            'nsfirst' => false,
184            'home' => false,
185            'current' => 'simplenavi:namespace123:deep:foo',
186            'expect' => [
187                'simplenavi:namespace123:namespace123',
188                'simplenavi:namespace123:deep:start',
189                'simplenavi:namespace123:deep:foo',
190                'simplenavi:namespace123:foo',
191                'simplenavi:foo',
192                'simplenavi:namespace12:start',
193                'simplenavi:namespace2',
194                'simplenavi:namespace21:start',
195                'simplenavi:namespace1:start',
196            ]
197        ];
198
199        yield [
200            'set' => 'by Title, Natural Sort, branch open',
201            'titlesort' => true,
202            'natsort' => true,
203            'nsfirst' => false,
204            'home' => false,
205            'current' => 'simplenavi:namespace123:deep:foo',
206            'expect' => [
207                'simplenavi:namespace123:namespace123',
208                'simplenavi:namespace123:deep:start',
209                'simplenavi:namespace123:deep:foo',
210                'simplenavi:namespace123:foo',
211                'simplenavi:foo',
212                'simplenavi:namespace2',
213                'simplenavi:namespace12:start',
214                'simplenavi:namespace21:start',
215                'simplenavi:namespace1:start',
216            ]
217        ];
218
219        yield [
220            'set' => 'by Title, Natural Sort, NS first, branch open',
221            'titlesort' => true,
222            'natsort' => true,
223            'nsfirst' => true,
224            'home' => false,
225            'current' => 'simplenavi:namespace123:deep:foo',
226            'expect' => [
227                'simplenavi:namespace123:namespace123',
228                'simplenavi:namespace123:deep:start',
229                'simplenavi:namespace123:deep:foo',
230                'simplenavi:namespace123:foo',
231                'simplenavi:namespace2',
232                'simplenavi:namespace12:start',
233                'simplenavi:namespace21:start',
234                'simplenavi:namespace1:start',
235                'simplenavi:foo',
236            ]
237        ];
238
239        yield [
240            'set' => 'by ID, branch open with home level',
241            'titlesort' => false,
242            'natsort' => false,
243            'nsfirst' => false,
244            'home' => true,
245            'current' => 'simplenavi:namespace123:deep:foo',
246            'expect' => [
247                'simplenavi:simplenavi',
248                'simplenavi:foo',
249                'simplenavi:namespace1:start',
250                'simplenavi:namespace12:start',
251                'simplenavi:namespace123:namespace123',
252                'simplenavi:namespace123:deep:start',
253                'simplenavi:namespace123:deep:foo',
254                'simplenavi:namespace123:foo',
255                'simplenavi:namespace2',
256                'simplenavi:namespace21:start',
257            ]
258        ];
259    }
260
261    /**
262     * @dataProvider dataProvider
263     */
264    public function testSorting($set, $titlesort, $natsort, $nsfirst, $home, $current, $expect)
265    {
266        $simpleNavi = new \syntax_plugin_simplenavi();
267        $items = $simpleNavi->getSortedItems('simplenavi', $current, $titlesort, $natsort, $nsfirst, $home);
268        $this->assertSame($expect, array_column($items, 'id'), $set);
269    }
270
271}
272
273
274
275