xref: /plugin/simplenavi/_test/SimplenaviTest.php (revision e75a33bf67169624ba61a7d08f13132b1856e309)
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            ['namespace1:foo', 'Namespace 1 Foo'],
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            'current' => 'simplenavi',
54            'expect' => [
55                'simplenavi:namespace1:start',
56                'simplenavi:namespace12:start',
57                'simplenavi:namespace123:namespace123',
58                'simplenavi:namespace2',
59                'simplenavi:namespace21:start',
60            ]
61        ];
62
63        yield [
64            'set' => 'by ID, Natural Sort, all branches closed',
65            'titlesort' => false,
66            'natsort' => true,
67            'current' => 'simplenavi',
68            'expect' => [
69                'simplenavi:namespace1:start',
70                'simplenavi:namespace2',
71                'simplenavi:namespace12:start',
72                'simplenavi:namespace21:start',
73                'simplenavi:namespace123:namespace123',
74            ]
75        ];
76
77        yield [
78            'set' => 'by ID, branch open',
79            'titlesort' => false,
80            'natsort' => false,
81            'current' => 'simplenavi:namespace123:deep:foo',
82            'expect' => [
83                'simplenavi:namespace1:start',
84                'simplenavi:namespace12:start',
85                'simplenavi:namespace123:namespace123',
86                'simplenavi:namespace123:deep:start',
87                'simplenavi:namespace123:deep:foo',
88                'simplenavi:namespace123:foo',
89                'simplenavi:namespace2',
90                'simplenavi:namespace21:start',
91            ]
92        ];
93
94        yield [
95            'set' => 'by ID, Natural Sort, branch open',
96            'titlesort' => false,
97            'natsort' => true,
98            'current' => 'simplenavi:namespace123:deep:foo',
99            'expect' => [
100                'simplenavi:namespace1:start',
101                'simplenavi:namespace2',
102                'simplenavi:namespace12:start',
103                'simplenavi:namespace21:start',
104                'simplenavi:namespace123:namespace123',
105                'simplenavi:namespace123:deep:start',
106                'simplenavi:namespace123:deep:foo',
107                'simplenavi:namespace123:foo',
108            ]
109        ];
110
111        yield [
112            'set' => 'by Title, all branches closed',
113            'titlesort' => true,
114            'natsort' => false,
115            'current' => 'simplenavi',
116            'expect' => [
117                'simplenavi:namespace123:namespace123',
118                'simplenavi:namespace12:start',
119                'simplenavi:namespace2',
120                'simplenavi:namespace21:start',
121                'simplenavi:namespace1:start',
122            ]
123        ];
124
125        yield [
126            'set' => 'by Title, Natural Search, all branches closed',
127            'titlesort' => true,
128            'natsort' => true,
129            'current' => 'simplenavi',
130            'expect' => [
131                'simplenavi:namespace123:namespace123',
132                'simplenavi:namespace2',
133                'simplenavi:namespace12:start',
134                'simplenavi:namespace21:start',
135                'simplenavi:namespace1:start',
136            ]
137        ];
138
139        yield [
140            'set' => 'by Title, branch open',
141            'titlesort' => true,
142            'natsort' => false,
143            'current' => 'simplenavi:namespace123:deep:foo',
144            'expect' => [
145                'simplenavi:namespace123:namespace123',
146                'simplenavi:namespace123:deep:start',
147                'simplenavi:namespace123:deep:foo',
148                'simplenavi:namespace123:foo',
149                'simplenavi:namespace12:start',
150                'simplenavi:namespace2',
151                'simplenavi:namespace21:start',
152                'simplenavi:namespace1:start',
153            ]
154        ];
155
156        yield [
157            'set' => 'by Title, Natural Sort, branch open',
158            'titlesort' => true,
159            'natsort' => true,
160            'current' => 'simplenavi:namespace123:deep:foo',
161            'expect' => [
162                'simplenavi:namespace123:namespace123',
163                'simplenavi:namespace123:deep:start',
164                'simplenavi:namespace123:deep:foo',
165                'simplenavi:namespace123:foo',
166                'simplenavi:namespace2',
167                'simplenavi:namespace12:start',
168                'simplenavi:namespace21:start',
169                'simplenavi:namespace1:start',
170            ]
171        ];
172
173    }
174
175    /**
176     * @dataProvider dataProvider
177     */
178    public function testSorting($set, $titlesort, $natsort, $current, $expect)
179    {
180        $simpleNavi = new \syntax_plugin_simplenavi();
181        $items = $simpleNavi->getSortedItems('simplenavi', $current, $titlesort, $natsort);
182        $this->assertSame($expect, array_column($items, 'id'), $set);
183    }
184
185}
186
187
188
189