1<?php 2 3namespace dokuwiki\plugin\acknowledge\test; 4 5use DokuWikiTest; 6 7/** 8 * Helper tests for the acknowledge plugin 9 * 10 * @group plugin_acknowledge 11 * @group plugins 12 */ 13class HelperTest extends DokuWikiTest 14{ 15 /** @var array */ 16 protected $pluginsEnabled = ['acknowledge', 'sqlite']; 17 /** @var \helper_plugin_acknowledge $helper */ 18 protected $helper; 19 /** @var \helper_plugin_sqlite */ 20 protected $db; 21 22 public static function setUpBeforeClass(): void 23 { 24 parent::setUpBeforeClass(); 25 /** @var \auth_plugin_authplain $auth */ 26 global $auth; 27 $auth->createUser('max', 'none', 'max', 'max@example.com', ['super']); 28 $auth->createUser('regular', 'none', 'regular', 'regular@example.com', ['user']); 29 } 30 31 public function setUp(): void 32 { 33 parent::setUp(); 34 $this->helper = plugin_load('helper', 'acknowledge'); 35 36 $this->db = $this->helper->getDB(); 37 38 $pages = "REPLACE INTO pages(page,lastmod) 39 VALUES ('dokuwiki:acktest1', 1560805365), 40 ('dokuwiki:acktest2', 1560805365), 41 ('dokuwiki:acktest3', 1560805365), 42 ('dokuwiki:acktest4', 1560805365)"; 43 $this->db->query($pages); 44 45 $assignments = "REPLACE INTO assignments(page,pageassignees) 46 VALUES ('dokuwiki:acktest1', 'regular, @super'), 47 ('dokuwiki:acktest2', '@super'), 48 ('dokuwiki:acktest3', '@user'), 49 ('dokuwiki:acktest4', 'max')"; 50 $this->db->query($assignments); 51 52 // outdated, current, outdated but replaced, current replacing outdated, outdated, outdated 53 $acks = "REPLACE INTO acks(page,user,ack) 54 VALUES 55 ('dokuwiki:acktest3', 'regular', 1550801270), 56 ('dokuwiki:acktest3', 'regular', 1560805555), 57 ('dokuwiki:acktest1', 'max', 1550805770), 58 ('dokuwiki:acktest1', 'max', 1560805770), 59 ('dokuwiki:acktest3', 'max', 1560805000), 60 ('dokuwiki:acktest4', 'max', 1560805000) 61 "; 62 $this->db->query($acks); 63 } 64 65 /** 66 * test latest acknowledgements 67 */ 68 public function test_getLatestAcknowledgements() 69 { 70 $actual = $this->helper->getAcknowledgements(); 71 $expected = [ 72 [ 73 'page' => 'dokuwiki:acktest1', 74 'user' => 'max', 75 'ack' => '1560805770', 76 'lastmod' => '1560805365', 77 ], 78 [ 79 'page' => 'dokuwiki:acktest3', 80 'user' => 'regular', 81 'ack' => '1560805555', 82 'lastmod' => '1560805365', 83 ], 84 [ 85 'page' => 'dokuwiki:acktest3', 86 'user' => 'max', 87 'ack' => '1560805000', 88 'lastmod' => '1560805365', 89 ], 90 [ 91 'page' => 'dokuwiki:acktest4', 92 'user' => 'max', 93 'ack' => '1560805000', 94 'lastmod' => '1560805365', 95 ], 96 ]; 97 $this->assertEquals($expected, $actual); 98 } 99 100 /** 101 * test latest acknowledgements limited to 1 102 */ 103 public function test_getLimitedAcknowledgements() 104 { 105 $actual = $this->helper->getAcknowledgements(1); 106 $expected = [ 107 [ 108 'page' => 'dokuwiki:acktest1', 109 'user' => 'max', 110 'ack' => '1560805770', 111 'lastmod' => '1560805365', 112 ], 113 ]; 114 $this->assertEquals($expected, $actual); 115 } 116 117 /** 118 * Test assignments for the given user 119 */ 120 public function test_getUserAssignments() 121 { 122 $actual = $this->helper->getUserAssignments('regular', ['user']); 123 $expected = [ 124 [ 125 'page' => 'dokuwiki:acktest1', 126 'pageassignees' => 'regular, @super', 127 'autoassignees' => '', 128 'lastmod' => '1560805365', 129 'user' => null, 130 'ack' => null, 131 ], 132 ]; 133 $this->assertEquals($expected, $actual); 134 135 $actual = $this->helper->getUserAssignments('max', ['user', 'super']); 136 $expected = [ 137 [ 138 'page' => 'dokuwiki:acktest2', 139 'pageassignees' => '@super', 140 'autoassignees' => '', 141 'lastmod' => '1560805365', 142 'user' => null, 143 'ack' => null, 144 ], 145 [ 146 'page' => 'dokuwiki:acktest3', 147 'pageassignees' => '@user', 148 'autoassignees' => '', 149 'lastmod' => '1560805365', 150 'user' => null, 151 'ack' => null, 152 ], 153 [ 154 'page' => 'dokuwiki:acktest4', 155 'pageassignees' => 'max', 156 'autoassignees' => '', 157 'lastmod' => '1560805365', 158 'user' => null, 159 'ack' => null, 160 ], 161 ]; 162 $this->assertEquals($expected, $actual); 163 } 164 165 /** 166 * Test all acknowledgements for a user (done or still due) 167 * 168 * @return void 169 */ 170 public function test_getUserAcknowledgementsAll() 171 { 172 $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super']); 173 $expected = [ 174 // current / up to date 175 [ 176 'page' => 'dokuwiki:acktest1', 177 'pageassignees' => 'regular, @super', 178 'autoassignees' => '', 179 'lastmod' => '1560805365', 180 'user' => 'max', 181 'ack' => '1560805770', 182 ], 183 // due / missing 184 [ 185 'page' => 'dokuwiki:acktest2', 186 'pageassignees' => '@super', 187 'autoassignees' => '', 188 'lastmod' => '1560805365', 189 'user' => null, 190 'ack' => null, 191 ], 192 // outdated 193 [ 194 'page' => 'dokuwiki:acktest3', 195 'pageassignees' => '@user', 196 'autoassignees' => '', 197 'lastmod' => '1560805365', 198 'user' => 'max', 199 'ack' => '1560805000', 200 ], 201 // outdated 202 [ 203 'page' => 'dokuwiki:acktest4', 204 'pageassignees' => 'max', 205 'autoassignees' => '', 206 'lastmod' => '1560805365', 207 'user' => 'max', 208 'ack' => '1560805000', 209 ], 210 ]; 211 $this->assertEquals($expected, $actual); 212 } 213 214 /** 215 * Test pages that user still has to acknowledge 216 * 217 * @return void 218 */ 219 public function test_getUserAcknowledgementsDue() 220 { 221 $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'due'); 222 $expected = [ 223 [ 224 'page' => 'dokuwiki:acktest2', 225 'pageassignees' => '@super', 226 'autoassignees' => '', 227 'lastmod' => '1560805365', 228 'user' => null, 229 'ack' => null, 230 ], 231 [ 232 'page' => 'dokuwiki:acktest3', 233 'pageassignees' => '@user', 234 'autoassignees' => '', 235 'lastmod' => '1560805365', 236 'user' => 'max', 237 'ack' => '1560805000', 238 ], 239 [ 240 'page' => 'dokuwiki:acktest4', 241 'pageassignees' => 'max', 242 'autoassignees' => '', 243 'lastmod' => '1560805365', 244 'user' => 'max', 245 'ack' => '1560805000', 246 ], 247 ]; 248 $this->assertEquals($expected, $actual); 249 } 250 251 /** 252 * Test current / up-to-date acknowledgements 253 * 254 * @return void 255 */ 256 public function test_getUserAcknowledgementsCurrent() 257 { 258 $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'current'); 259 $expected = [ 260 [ 261 'page' => 'dokuwiki:acktest1', 262 'pageassignees' => 'regular, @super', 263 'autoassignees' => '', 264 'lastmod' => '1560805365', 265 'user' => 'max', 266 'ack' => '1560805770', 267 ], 268 ]; 269 $this->assertEquals($expected, $actual); 270 } 271 272 /** 273 * Test outdated acknowledgements (ack exists, but for older page revision) 274 * 275 * @return void 276 */ 277 public function test_getUserAcknowledgementsOutdated() 278 { 279 $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'outdated'); 280 $expected = [ 281 [ 282 'page' => 'dokuwiki:acktest3', 283 'pageassignees' => '@user', 284 'autoassignees' => '', 285 'lastmod' => '1560805365', 286 'user' => 'max', 287 'ack' => '1560805000', 288 ], 289 [ 290 'page' => 'dokuwiki:acktest4', 291 'pageassignees' => 'max', 292 'autoassignees' => '', 293 'lastmod' => '1560805365', 294 'user' => 'max', 295 'ack' => '1560805000', 296 ], 297 ]; 298 $this->assertEquals($expected, $actual); 299 } 300 301 /** 302 * Check what users are assigned to a page that has a user and a group in the database 303 */ 304 public function test_getPageAssignees() 305 { 306 $actual = $this->helper->getPageAssignees('dokuwiki:acktest1'); 307 $expected = ['regular', 'max']; 308 $this->assertEquals($expected, $actual); 309 } 310 311 /** 312 * Check what acknowledgments are there for a page 313 */ 314 public function test_getPageAcknowledgements() 315 { 316 $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest1'); 317 $expected = [ 318 [ 319 'page' => 'dokuwiki:acktest1', 320 'lastmod' => '1560805365', 321 'user' => 'max', 322 'ack' => '1560805770', 323 ], 324 [ 325 'page' => 'dokuwiki:acktest1', 326 'lastmod' => '1560805365', 327 'user' => 'regular', 328 'ack' => null, 329 ], 330 331 ]; 332 $this->assertEquals($expected, $actual); 333 334 $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest1', 'max'); 335 $expected = [ 336 [ 337 'page' => 'dokuwiki:acktest1', 338 'lastmod' => '1560805365', 339 'user' => 'max', 340 'ack' => '1560805770', 341 ], 342 ]; 343 $this->assertEquals($expected, $actual); 344 345 $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest2', '', 'due'); 346 $expected = [ 347 [ 348 'page' => 'dokuwiki:acktest2', 349 'lastmod' => '1560805365', 350 'user' => 'max', 351 'ack' => null, 352 ], 353 ]; 354 $this->assertEquals($expected, $actual); 355 356 $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest3', '', 'current'); 357 $expected = [ 358 [ 359 'page' => 'dokuwiki:acktest3', 360 'lastmod' => '1560805365', 361 'user' => 'regular', 362 'ack' => '1560805555', 363 ], 364 ]; 365 $this->assertEquals($expected, $actual); 366 367 $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest4', '', 'current'); 368 $expected = []; 369 $this->assertEquals($expected, $actual); 370 } 371} 372