xref: /plugin/simplenavi/_test/SimplenaviTest.php (revision e58e2f72dd917848130cf0286238cd1317212579)
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            ['namespace1:start', 'ZZZ Namespace 1 Start'],
29            ['namespace2:foo', 'Namespace 2 Foo'],
30            ['namespace2', 'Namespace 2 Start'],
31            ['namespace12:foo', 'Namespace 12 Foo'],
32            ['namespace12:start', 'Namespace 12 Start'],
33            ['namespace123:namespace123', 'AAA Namespace 123 Start'],
34            ['namespace123:foo', 'Namespace 123 Foo'],
35            ['namespace123:deep:start', 'Namespace 123 Deep Start'],
36            ['namespace123:deep:foo', 'Namespace 123 Deep Foo'],
37            ['namespace21:foo', 'Namespace 21 Foo'],
38            ['namespace21:start', 'Namespace 21 Start'],
39        ];
40
41        foreach ($pages as $page) {
42            saveWikiText('simplenavi:' . $page[0], '====== ' . $page[1] . ' ======', 'create test page');
43        }
44
45    }
46
47    public function dataProvider() {
48
49        yield [
50            'set' => 'by ID, all branches closed',
51            'titlesort' => false,
52            'natsort' => false,
53            'nsfirst' => false,
54            'current' => 'simplenavi:page',
55            'expect' => [
56                'simplenavi:foo',
57                'simplenavi:namespace1:start',
58                'simplenavi:namespace12:start',
59                'simplenavi:namespace123:namespace123',
60                'simplenavi:namespace2',
61                'simplenavi:namespace21:start',
62            ]
63        ];
64
65        yield [
66            'set' => 'by ID, Natural Sort, all branches closed',
67            'titlesort' => false,
68            'natsort' => true,
69            'nsfirst' => false,
70            'current' => 'simplenavi:page',
71            'expect' => [
72                'simplenavi:foo',
73                'simplenavi:namespace1:start',
74                'simplenavi:namespace2',
75                'simplenavi:namespace12:start',
76                'simplenavi:namespace21:start',
77                'simplenavi:namespace123:namespace123',
78            ]
79        ];
80
81        yield [
82            'set' => 'by ID, branch open',
83            'titlesort' => false,
84            'natsort' => false,
85            'nsfirst' => false,
86            'current' => 'simplenavi:namespace123:deep:foo',
87            'expect' => [
88                'simplenavi:foo',
89                'simplenavi:namespace1:start',
90                'simplenavi:namespace12:start',
91                'simplenavi:namespace123:namespace123',
92                'simplenavi:namespace123:deep:start',
93                'simplenavi:namespace123:deep:foo',
94                'simplenavi:namespace123:foo',
95                'simplenavi:namespace2',
96                'simplenavi:namespace21:start',
97            ]
98        ];
99
100        yield [
101            'set' => 'by ID, Natural Sort, branch open',
102            'titlesort' => false,
103            'natsort' => true,
104            'nsfirst' => false,
105            'current' => 'simplenavi:namespace123:deep:foo',
106            'expect' => [
107                'simplenavi:foo',
108                'simplenavi:namespace1:start',
109                'simplenavi:namespace2',
110                'simplenavi:namespace12:start',
111                'simplenavi:namespace21:start',
112                'simplenavi:namespace123:namespace123',
113                'simplenavi:namespace123:deep:start',
114                'simplenavi:namespace123:deep:foo',
115                'simplenavi:namespace123:foo',
116            ]
117        ];
118
119        yield [
120            'set' => 'by ID, Natural Sort, NS first, branch open',
121            'titlesort' => false,
122            'natsort' => true,
123            'nsfirst' => true,
124            'current' => 'simplenavi:namespace123:deep:foo',
125            'expect' => [
126                'simplenavi:namespace1:start',
127                'simplenavi:namespace2',
128                'simplenavi:namespace12:start',
129                'simplenavi:namespace21:start',
130                'simplenavi:namespace123:namespace123',
131                'simplenavi:namespace123:deep:start',
132                'simplenavi:namespace123:deep:foo',
133                'simplenavi:namespace123:foo',
134                'simplenavi:foo',
135            ]
136        ];
137
138        yield [
139            'set' => 'by Title, all branches closed',
140            'titlesort' => true,
141            'natsort' => false,
142            'nsfirst' => false,
143            'current' => 'simplenavi:page',
144            'expect' => [
145                'simplenavi:namespace123:namespace123',
146                'simplenavi:foo',
147                'simplenavi:namespace12:start',
148                'simplenavi:namespace2',
149                'simplenavi:namespace21:start',
150                'simplenavi:namespace1:start',
151            ]
152        ];
153
154        yield [
155            'set' => 'by Title, Natural Search, all branches closed',
156            'titlesort' => true,
157            'natsort' => true,
158            'nsfirst' => false,
159            'current' => 'simplenavi:page',
160            'expect' => [
161                'simplenavi:namespace123:namespace123',
162                'simplenavi:foo',
163                'simplenavi:namespace2',
164                'simplenavi:namespace12:start',
165                'simplenavi:namespace21:start',
166                'simplenavi:namespace1:start',
167            ]
168        ];
169
170        yield [
171            'set' => 'by Title, branch open',
172            'titlesort' => true,
173            'natsort' => false,
174            'nsfirst' => false,
175            'current' => 'simplenavi:namespace123:deep:foo',
176            'expect' => [
177                'simplenavi:namespace123:namespace123',
178                'simplenavi:namespace123:deep:start',
179                'simplenavi:namespace123:deep:foo',
180                'simplenavi:namespace123:foo',
181                'simplenavi:foo',
182                'simplenavi:namespace12:start',
183                'simplenavi:namespace2',
184                'simplenavi:namespace21:start',
185                'simplenavi:namespace1:start',
186            ]
187        ];
188
189        yield [
190            'set' => 'by Title, Natural Sort, branch open',
191            'titlesort' => true,
192            'natsort' => true,
193            'nsfirst' => false,
194            'current' => 'simplenavi:namespace123:deep:foo',
195            'expect' => [
196                'simplenavi:namespace123:namespace123',
197                'simplenavi:namespace123:deep:start',
198                'simplenavi:namespace123:deep:foo',
199                'simplenavi:namespace123:foo',
200                'simplenavi:foo',
201                'simplenavi:namespace2',
202                'simplenavi:namespace12:start',
203                'simplenavi:namespace21:start',
204                'simplenavi:namespace1:start',
205            ]
206        ];
207
208        yield [
209            'set' => 'by Title, Natural Sort, NS first, branch open',
210            'titlesort' => true,
211            'natsort' => true,
212            'nsfirst' => true,
213            'current' => 'simplenavi:namespace123:deep:foo',
214            'expect' => [
215                'simplenavi:namespace123:namespace123',
216                'simplenavi:namespace123:deep:start',
217                'simplenavi:namespace123:deep:foo',
218                'simplenavi:namespace123:foo',
219                'simplenavi:namespace2',
220                'simplenavi:namespace12:start',
221                'simplenavi:namespace21:start',
222                'simplenavi:namespace1:start',
223                'simplenavi:foo',
224            ]
225        ];
226    }
227
228    /**
229     * @dataProvider dataProvider
230     */
231    public function testSorting($set, $titlesort, $natsort, $nsfirst, $current, $expect)
232    {
233        $simpleNavi = new \syntax_plugin_simplenavi();
234        $items = $simpleNavi->getSortedItems('simplenavi', $current, $titlesort, $natsort, $nsfirst);
235        $this->assertSame($expect, array_column($items, 'id'), $set);
236    }
237
238}
239
240
241
242