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 $this->db->query($pages); 43 44 $assignments = "REPLACE INTO assignments(page,pageassignees) 45 VALUES ('dokuwiki:acktest1', 'regular, @super'), 46 ('dokuwiki:acktest2', '@super'), 47 ('dokuwiki:acktest3', '@user')"; 48 $this->db->query($assignments); 49 50 // outdated, current, outdated but replaced, current replacing outdated, outdated 51 $acks = "REPLACE INTO acks(page,user,ack) 52 VALUES 53 ('dokuwiki:acktest3', 'regular', 1550801270), 54 ('dokuwiki:acktest3', 'regular', 1560805555), 55 ('dokuwiki:acktest1', 'max', 1550805770), 56 ('dokuwiki:acktest1', 'max', 1560805770), 57 ('dokuwiki:acktest3', 'max', 1560805000) 58 "; 59 $this->db->query($acks); 60 } 61 62 /** 63 * test latest acknowledgements 64 */ 65 public function test_getLatestAcknowledgements() 66 { 67 $actual = $this->helper->getAcknowledgements(); 68 $expected = [ 69 [ 70 'page' => 'dokuwiki:acktest1', 71 'user' => 'max', 72 'ack' => '1560805770', 73 'lastmod' => '1560805365', 74 ], 75 [ 76 'page' => 'dokuwiki:acktest3', 77 'user' => 'regular', 78 'ack' => '1560805555', 79 'lastmod' => '1560805365', 80 ], 81 [ 82 'page' => 'dokuwiki:acktest3', 83 'user' => 'max', 84 'ack' => '1560805000', 85 'lastmod' => '1560805365', 86 ], 87 ]; 88 $this->assertEquals($expected, $actual); 89 } 90 91 /** 92 * test latest acknowledgements limited to 1 93 */ 94 public function test_getLimitedAcknowledgements() 95 { 96 $actual = $this->helper->getAcknowledgements(1); 97 $expected = [ 98 [ 99 'page' => 'dokuwiki:acktest1', 100 'user' => 'max', 101 'ack' => '1560805770', 102 'lastmod' => '1560805365', 103 ], 104 ]; 105 $this->assertEquals($expected, $actual); 106 } 107 108 /** 109 * Test assignments for the given user 110 */ 111 public function test_getUserAssignments() 112 { 113 $actual = $this->helper->getUserAssignments('regular', ['user']); 114 $expected = [ 115 [ 116 'page' => 'dokuwiki:acktest1', 117 'pageassignees' => 'regular, @super', 118 'autoassignees' => '', 119 'lastmod' => '1560805365', 120 'user' => null, 121 'ack' => null, 122 ], 123 ]; 124 $this->assertEquals($expected, $actual); 125 126 $actual = $this->helper->getUserAssignments('max', ['user', 'super']); 127 $expected = [ 128 [ 129 'page' => 'dokuwiki:acktest2', 130 'pageassignees' => '@super', 131 'autoassignees' => '', 132 'lastmod' => '1560805365', 133 'user' => null, 134 'ack' => null, 135 ], 136 [ 137 'page' => 'dokuwiki:acktest3', 138 'pageassignees' => '@user', 139 'autoassignees' => '', 140 'lastmod' => '1560805365', 141 'user' => null, 142 'ack' => null, 143 ], 144 ]; 145 $this->assertEquals($expected, $actual); 146 } 147 148 /** 149 * Test all acknowledgements for a user (done or still due) 150 * 151 * @return void 152 */ 153 public function test_getUserAcknowledgementsAll() 154 { 155 $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super']); 156 $expected = [ 157 // current / up to date 158 [ 159 'page' => 'dokuwiki:acktest1', 160 'pageassignees' => 'regular, @super', 161 'autoassignees' => '', 162 'lastmod' => '1560805365', 163 'user' => 'max', 164 'ack' => '1560805770', 165 ], 166 // due / missing 167 [ 168 'page' => 'dokuwiki:acktest2', 169 'pageassignees' => '@super', 170 'autoassignees' => '', 171 'lastmod' => '1560805365', 172 'user' => null, 173 'ack' => null, 174 ], 175 // outdated 176 [ 177 'page' => 'dokuwiki:acktest3', 178 'pageassignees' => '@user', 179 'autoassignees' => '', 180 'lastmod' => '1560805365', 181 'user' => 'max', 182 'ack' => '1560805000', 183 ], 184 ]; 185 $this->assertEquals($expected, $actual); 186 } 187 188 /** 189 * Test pages that user still has to acknowledge 190 * 191 * @return void 192 */ 193 public function test_getUserAcknowledgementsDue() 194 { 195 $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'due'); 196 $expected = [ 197 [ 198 'page' => 'dokuwiki:acktest2', 199 'pageassignees' => '@super', 200 'autoassignees' => '', 201 'lastmod' => '1560805365', 202 'user' => null, 203 'ack' => null, 204 ], 205 [ 206 'page' => 'dokuwiki:acktest3', 207 'pageassignees' => '@user', 208 'autoassignees' => '', 209 'lastmod' => '1560805365', 210 'user' => 'max', 211 'ack' => '1560805000', 212 ], 213 ]; 214 $this->assertEquals($expected, $actual); 215 } 216 217 /** 218 * Test current / up-to-date acknowledgements 219 * 220 * @return void 221 */ 222 public function test_getUserAcknowledgementsCurrent() 223 { 224 $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'current'); 225 $expected = [ 226 [ 227 'page' => 'dokuwiki:acktest1', 228 'pageassignees' => 'regular, @super', 229 'autoassignees' => '', 230 'lastmod' => '1560805365', 231 'user' => 'max', 232 'ack' => '1560805770', 233 ], 234 ]; 235 $this->assertEquals($expected, $actual); 236 } 237 238 /** 239 * Test outdated acknowledgements (ack exists, but for older page revision) 240 * 241 * @return void 242 */ 243 public function test_getUserAcknowledgementsOutdated() 244 { 245 $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'outdated'); 246 $expected = [ 247 [ 248 'page' => 'dokuwiki:acktest3', 249 'pageassignees' => '@user', 250 'autoassignees' => '', 251 'lastmod' => '1560805365', 252 'user' => 'max', 253 'ack' => '1560805000', 254 ], 255 ]; 256 $this->assertEquals($expected, $actual); 257 } 258 259 /** 260 * Check what users are assigned to a page that has a user and a group in the database 261 */ 262 public function test_getPageAssignees() 263 { 264 $actual = $this->helper->getPageAssignees('dokuwiki:acktest1'); 265 $expected = ['regular', 'max']; 266 $this->assertEquals($expected, $actual); 267 } 268 269 /** 270 * Check what acknowledgments are there for a page 271 */ 272 public function test_getPageAcknowledgements() 273 { 274 $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest1'); 275 $expected = [ 276 [ 277 'page' => 'dokuwiki:acktest1', 278 'lastmod' => '1560805365', 279 'user' => 'max', 280 'ack' => '1560805770', 281 ], 282 [ 283 'page' => 'dokuwiki:acktest1', 284 'lastmod' => '1560805365', 285 'user' => 'regular', 286 'ack' => null, 287 ], 288 289 ]; 290 $this->assertEquals($expected, $actual); 291 292 $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest1', 'max'); 293 $expected = [ 294 [ 295 'page' => 'dokuwiki:acktest1', 296 'lastmod' => '1560805365', 297 'user' => 'max', 298 'ack' => '1560805770', 299 ], 300 ]; 301 $this->assertEquals($expected, $actual); 302 303 $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest2', '', 'due'); 304 $expected = [ 305 [ 306 'page' => 'dokuwiki:acktest2', 307 'lastmod' => '1560805365', 308 'user' => 'max', 309 'ack' => null, 310 ], 311 ]; 312 $this->assertEquals($expected, $actual); 313 314 $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest3', '', 'current'); 315 $expected = [ 316 [ 317 'page' => 'dokuwiki:acktest3', 318 'lastmod' => '1560805365', 319 'user' => 'regular', 320 'ack' => '1560805555', 321 ], 322 ]; 323 $this->assertEquals($expected, $actual); 324 } 325} 326