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