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