109527955SAndreas Gohr<?php 209527955SAndreas Gohr 309527955SAndreas Gohrnamespace dokuwiki\plugin\acknowledge\test; 409527955SAndreas Gohr 509527955SAndreas Gohruse DokuWikiTest; 609527955SAndreas Gohr 709527955SAndreas Gohr/** 809527955SAndreas Gohr * Helper tests for the acknowledge plugin 909527955SAndreas Gohr * 1009527955SAndreas Gohr * @group plugin_acknowledge 1109527955SAndreas Gohr * @group plugins 1209527955SAndreas Gohr */ 1309527955SAndreas Gohrclass HelperTest extends DokuWikiTest 1409527955SAndreas Gohr{ 1509527955SAndreas Gohr /** @var array */ 1609527955SAndreas Gohr protected $pluginsEnabled = ['acknowledge', 'sqlite']; 1709527955SAndreas Gohr /** @var \helper_plugin_acknowledge $helper */ 1809527955SAndreas Gohr protected $helper; 1909527955SAndreas Gohr /** @var \helper_plugin_sqlite */ 2009527955SAndreas Gohr protected $db; 2109527955SAndreas Gohr 2209527955SAndreas Gohr public static function setUpBeforeClass(): void 2309527955SAndreas Gohr { 2409527955SAndreas Gohr parent::setUpBeforeClass(); 2509527955SAndreas Gohr /** @var \auth_plugin_authplain $auth */ 2609527955SAndreas Gohr global $auth; 2709527955SAndreas Gohr $auth->createUser('max', 'none', 'max', 'max@example.com', ['super']); 28dee5618cSAnna Dabrowska $auth->createUser('regular', 'none', 'regular', 'regular@example.com', ['user']); 2909527955SAndreas Gohr } 3009527955SAndreas Gohr 3109527955SAndreas Gohr public function setUp(): void 3209527955SAndreas Gohr { 3309527955SAndreas Gohr parent::setUp(); 3409527955SAndreas Gohr $this->helper = plugin_load('helper', 'acknowledge'); 3509527955SAndreas Gohr 3609527955SAndreas Gohr $this->db = $this->helper->getDB(); 3709527955SAndreas Gohr 3809527955SAndreas Gohr $pages = "REPLACE INTO pages(page,lastmod) 3909527955SAndreas Gohr VALUES ('dokuwiki:acktest1', 1560805365), 4009527955SAndreas Gohr ('dokuwiki:acktest2', 1560805365), 41*b271ebc7SAnna Dabrowska ('dokuwiki:acktest3', 1560805365), 42*b271ebc7SAnna Dabrowska ('dokuwiki:acktest4', 1560805365)"; 4309527955SAndreas Gohr $this->db->query($pages); 4409527955SAndreas Gohr 4509527955SAndreas Gohr $assignments = "REPLACE INTO assignments(page,pageassignees) 4609527955SAndreas Gohr VALUES ('dokuwiki:acktest1', 'regular, @super'), 4709527955SAndreas Gohr ('dokuwiki:acktest2', '@super'), 48*b271ebc7SAnna Dabrowska ('dokuwiki:acktest3', '@user'), 49*b271ebc7SAnna Dabrowska ('dokuwiki:acktest4', 'max')"; 5009527955SAndreas Gohr $this->db->query($assignments); 5109527955SAndreas Gohr 52*b271ebc7SAnna Dabrowska // outdated, current, outdated but replaced, current replacing outdated, outdated, outdated 5309527955SAndreas Gohr $acks = "REPLACE INTO acks(page,user,ack) 54dee5618cSAnna Dabrowska VALUES 55dee5618cSAnna Dabrowska ('dokuwiki:acktest3', 'regular', 1550801270), 5609527955SAndreas Gohr ('dokuwiki:acktest3', 'regular', 1560805555), 5709527955SAndreas Gohr ('dokuwiki:acktest1', 'max', 1550805770), 5809527955SAndreas Gohr ('dokuwiki:acktest1', 'max', 1560805770), 59*b271ebc7SAnna Dabrowska ('dokuwiki:acktest3', 'max', 1560805000), 60*b271ebc7SAnna Dabrowska ('dokuwiki:acktest4', 'max', 1560805000) 6109527955SAndreas Gohr "; 6209527955SAndreas Gohr $this->db->query($acks); 6309527955SAndreas Gohr } 6409527955SAndreas Gohr 6509527955SAndreas Gohr /** 6609527955SAndreas Gohr * test latest acknowledgements 6709527955SAndreas Gohr */ 6809527955SAndreas Gohr public function test_getLatestAcknowledgements() 6909527955SAndreas Gohr { 7009527955SAndreas Gohr $actual = $this->helper->getAcknowledgements(); 7109527955SAndreas Gohr $expected = [ 7209527955SAndreas Gohr [ 7309527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 7409527955SAndreas Gohr 'user' => 'max', 7509527955SAndreas Gohr 'ack' => '1560805770', 7609527955SAndreas Gohr 'lastmod' => '1560805365', 7709527955SAndreas Gohr ], 7809527955SAndreas Gohr [ 7909527955SAndreas Gohr 'page' => 'dokuwiki:acktest3', 8009527955SAndreas Gohr 'user' => 'regular', 8109527955SAndreas Gohr 'ack' => '1560805555', 8209527955SAndreas Gohr 'lastmod' => '1560805365', 8309527955SAndreas Gohr ], 8409527955SAndreas Gohr [ 8509527955SAndreas Gohr 'page' => 'dokuwiki:acktest3', 8609527955SAndreas Gohr 'user' => 'max', 8709527955SAndreas Gohr 'ack' => '1560805000', 8809527955SAndreas Gohr 'lastmod' => '1560805365', 8909527955SAndreas Gohr ], 90*b271ebc7SAnna Dabrowska [ 91*b271ebc7SAnna Dabrowska 'page' => 'dokuwiki:acktest4', 92*b271ebc7SAnna Dabrowska 'user' => 'max', 93*b271ebc7SAnna Dabrowska 'ack' => '1560805000', 94*b271ebc7SAnna Dabrowska 'lastmod' => '1560805365', 95*b271ebc7SAnna Dabrowska ], 9609527955SAndreas Gohr ]; 9709527955SAndreas Gohr $this->assertEquals($expected, $actual); 9809527955SAndreas Gohr } 9909527955SAndreas Gohr 10009527955SAndreas Gohr /** 10109527955SAndreas Gohr * test latest acknowledgements limited to 1 10209527955SAndreas Gohr */ 10309527955SAndreas Gohr public function test_getLimitedAcknowledgements() 10409527955SAndreas Gohr { 10509527955SAndreas Gohr $actual = $this->helper->getAcknowledgements(1); 10609527955SAndreas Gohr $expected = [ 10709527955SAndreas Gohr [ 10809527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 10909527955SAndreas Gohr 'user' => 'max', 11009527955SAndreas Gohr 'ack' => '1560805770', 11109527955SAndreas Gohr 'lastmod' => '1560805365', 11209527955SAndreas Gohr ], 11309527955SAndreas Gohr ]; 11409527955SAndreas Gohr $this->assertEquals($expected, $actual); 11509527955SAndreas Gohr } 11609527955SAndreas Gohr 11709527955SAndreas Gohr /** 118dee5618cSAnna Dabrowska * Test assignments for the given user 11909527955SAndreas Gohr */ 12009527955SAndreas Gohr public function test_getUserAssignments() 12109527955SAndreas Gohr { 12209527955SAndreas Gohr $actual = $this->helper->getUserAssignments('regular', ['user']); 12309527955SAndreas Gohr $expected = [ 12409527955SAndreas Gohr [ 12509527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 12609527955SAndreas Gohr 'pageassignees' => 'regular, @super', 12709527955SAndreas Gohr 'autoassignees' => '', 12809527955SAndreas Gohr 'lastmod' => '1560805365', 12909527955SAndreas Gohr 'user' => null, 13009527955SAndreas Gohr 'ack' => null, 13109527955SAndreas Gohr ], 13209527955SAndreas Gohr ]; 13309527955SAndreas Gohr $this->assertEquals($expected, $actual); 13409527955SAndreas Gohr 13509527955SAndreas Gohr $actual = $this->helper->getUserAssignments('max', ['user', 'super']); 13609527955SAndreas Gohr $expected = [ 13709527955SAndreas Gohr [ 13809527955SAndreas Gohr 'page' => 'dokuwiki:acktest2', 13909527955SAndreas Gohr 'pageassignees' => '@super', 14009527955SAndreas Gohr 'autoassignees' => '', 14109527955SAndreas Gohr 'lastmod' => '1560805365', 14209527955SAndreas Gohr 'user' => null, 14309527955SAndreas Gohr 'ack' => null, 14409527955SAndreas Gohr ], 14509527955SAndreas Gohr [ 14609527955SAndreas Gohr 'page' => 'dokuwiki:acktest3', 14709527955SAndreas Gohr 'pageassignees' => '@user', 14809527955SAndreas Gohr 'autoassignees' => '', 14909527955SAndreas Gohr 'lastmod' => '1560805365', 15009527955SAndreas Gohr 'user' => null, 15109527955SAndreas Gohr 'ack' => null, 15209527955SAndreas Gohr ], 153*b271ebc7SAnna Dabrowska [ 154*b271ebc7SAnna Dabrowska 'page' => 'dokuwiki:acktest4', 155*b271ebc7SAnna Dabrowska 'pageassignees' => 'max', 156*b271ebc7SAnna Dabrowska 'autoassignees' => '', 157*b271ebc7SAnna Dabrowska 'lastmod' => '1560805365', 158*b271ebc7SAnna Dabrowska 'user' => null, 159*b271ebc7SAnna Dabrowska 'ack' => null, 160*b271ebc7SAnna Dabrowska ], 16109527955SAndreas Gohr ]; 16209527955SAndreas Gohr $this->assertEquals($expected, $actual); 16309527955SAndreas Gohr } 16409527955SAndreas Gohr 1655966046cSAnna Dabrowska /** 1665966046cSAnna Dabrowska * Test all acknowledgements for a user (done or still due) 1675966046cSAnna Dabrowska * 1685966046cSAnna Dabrowska * @return void 1695966046cSAnna Dabrowska */ 1705966046cSAnna Dabrowska public function test_getUserAcknowledgementsAll() 17109527955SAndreas Gohr { 17209527955SAndreas Gohr $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super']); 17309527955SAndreas Gohr $expected = [ 1745966046cSAnna Dabrowska // current / up to date 1755966046cSAnna Dabrowska [ 1765966046cSAnna Dabrowska 'page' => 'dokuwiki:acktest1', 1775966046cSAnna Dabrowska 'pageassignees' => 'regular, @super', 1785966046cSAnna Dabrowska 'autoassignees' => '', 1795966046cSAnna Dabrowska 'lastmod' => '1560805365', 1805966046cSAnna Dabrowska 'user' => 'max', 1815966046cSAnna Dabrowska 'ack' => '1560805770', 1825966046cSAnna Dabrowska ], 1835966046cSAnna Dabrowska // due / missing 1845966046cSAnna Dabrowska [ 1855966046cSAnna Dabrowska 'page' => 'dokuwiki:acktest2', 1865966046cSAnna Dabrowska 'pageassignees' => '@super', 1875966046cSAnna Dabrowska 'autoassignees' => '', 1885966046cSAnna Dabrowska 'lastmod' => '1560805365', 1895966046cSAnna Dabrowska 'user' => null, 1905966046cSAnna Dabrowska 'ack' => null, 1915966046cSAnna Dabrowska ], 1925966046cSAnna Dabrowska // outdated 1935966046cSAnna Dabrowska [ 1945966046cSAnna Dabrowska 'page' => 'dokuwiki:acktest3', 1955966046cSAnna Dabrowska 'pageassignees' => '@user', 1965966046cSAnna Dabrowska 'autoassignees' => '', 1975966046cSAnna Dabrowska 'lastmod' => '1560805365', 1985966046cSAnna Dabrowska 'user' => 'max', 1995966046cSAnna Dabrowska 'ack' => '1560805000', 2005966046cSAnna Dabrowska ], 201*b271ebc7SAnna Dabrowska // outdated 202*b271ebc7SAnna Dabrowska [ 203*b271ebc7SAnna Dabrowska 'page' => 'dokuwiki:acktest4', 204*b271ebc7SAnna Dabrowska 'pageassignees' => 'max', 205*b271ebc7SAnna Dabrowska 'autoassignees' => '', 206*b271ebc7SAnna Dabrowska 'lastmod' => '1560805365', 207*b271ebc7SAnna Dabrowska 'user' => 'max', 208*b271ebc7SAnna Dabrowska 'ack' => '1560805000', 209*b271ebc7SAnna Dabrowska ], 2105966046cSAnna Dabrowska ]; 2115966046cSAnna Dabrowska $this->assertEquals($expected, $actual); 2125966046cSAnna Dabrowska } 2135966046cSAnna Dabrowska 2145966046cSAnna Dabrowska /** 2155966046cSAnna Dabrowska * Test pages that user still has to acknowledge 2165966046cSAnna Dabrowska * 2175966046cSAnna Dabrowska * @return void 2185966046cSAnna Dabrowska */ 2195966046cSAnna Dabrowska public function test_getUserAcknowledgementsDue() 2205966046cSAnna Dabrowska { 2215966046cSAnna Dabrowska $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'due'); 2225966046cSAnna Dabrowska $expected = [ 2235966046cSAnna Dabrowska [ 2245966046cSAnna Dabrowska 'page' => 'dokuwiki:acktest2', 2255966046cSAnna Dabrowska 'pageassignees' => '@super', 2265966046cSAnna Dabrowska 'autoassignees' => '', 2275966046cSAnna Dabrowska 'lastmod' => '1560805365', 2285966046cSAnna Dabrowska 'user' => null, 2295966046cSAnna Dabrowska 'ack' => null, 2305966046cSAnna Dabrowska ], 2315966046cSAnna Dabrowska [ 2325966046cSAnna Dabrowska 'page' => 'dokuwiki:acktest3', 2335966046cSAnna Dabrowska 'pageassignees' => '@user', 2345966046cSAnna Dabrowska 'autoassignees' => '', 2355966046cSAnna Dabrowska 'lastmod' => '1560805365', 2365966046cSAnna Dabrowska 'user' => 'max', 2375966046cSAnna Dabrowska 'ack' => '1560805000', 2385966046cSAnna Dabrowska ], 239*b271ebc7SAnna Dabrowska [ 240*b271ebc7SAnna Dabrowska 'page' => 'dokuwiki:acktest4', 241*b271ebc7SAnna Dabrowska 'pageassignees' => 'max', 242*b271ebc7SAnna Dabrowska 'autoassignees' => '', 243*b271ebc7SAnna Dabrowska 'lastmod' => '1560805365', 244*b271ebc7SAnna Dabrowska 'user' => 'max', 245*b271ebc7SAnna Dabrowska 'ack' => '1560805000', 246*b271ebc7SAnna Dabrowska ], 2475966046cSAnna Dabrowska ]; 2485966046cSAnna Dabrowska $this->assertEquals($expected, $actual); 2495966046cSAnna Dabrowska } 2505966046cSAnna Dabrowska 2515966046cSAnna Dabrowska /** 2525966046cSAnna Dabrowska * Test current / up-to-date acknowledgements 2535966046cSAnna Dabrowska * 2545966046cSAnna Dabrowska * @return void 2555966046cSAnna Dabrowska */ 2565966046cSAnna Dabrowska public function test_getUserAcknowledgementsCurrent() 2575966046cSAnna Dabrowska { 2585966046cSAnna Dabrowska $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'current'); 2595966046cSAnna Dabrowska $expected = [ 26009527955SAndreas Gohr [ 26109527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 26209527955SAndreas Gohr 'pageassignees' => 'regular, @super', 26309527955SAndreas Gohr 'autoassignees' => '', 26409527955SAndreas Gohr 'lastmod' => '1560805365', 26509527955SAndreas Gohr 'user' => 'max', 26609527955SAndreas Gohr 'ack' => '1560805770', 26709527955SAndreas Gohr ], 2685966046cSAnna Dabrowska ]; 2695966046cSAnna Dabrowska $this->assertEquals($expected, $actual); 2705966046cSAnna Dabrowska } 2715966046cSAnna Dabrowska 2725966046cSAnna Dabrowska /** 2735966046cSAnna Dabrowska * Test outdated acknowledgements (ack exists, but for older page revision) 2745966046cSAnna Dabrowska * 2755966046cSAnna Dabrowska * @return void 2765966046cSAnna Dabrowska */ 2775966046cSAnna Dabrowska public function test_getUserAcknowledgementsOutdated() 2785966046cSAnna Dabrowska { 2795966046cSAnna Dabrowska $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'outdated'); 2805966046cSAnna Dabrowska $expected = [ 28109527955SAndreas Gohr [ 28209527955SAndreas Gohr 'page' => 'dokuwiki:acktest3', 28309527955SAndreas Gohr 'pageassignees' => '@user', 28409527955SAndreas Gohr 'autoassignees' => '', 28509527955SAndreas Gohr 'lastmod' => '1560805365', 28609527955SAndreas Gohr 'user' => 'max', 28709527955SAndreas Gohr 'ack' => '1560805000', 28809527955SAndreas Gohr ], 289*b271ebc7SAnna Dabrowska [ 290*b271ebc7SAnna Dabrowska 'page' => 'dokuwiki:acktest4', 291*b271ebc7SAnna Dabrowska 'pageassignees' => 'max', 292*b271ebc7SAnna Dabrowska 'autoassignees' => '', 293*b271ebc7SAnna Dabrowska 'lastmod' => '1560805365', 294*b271ebc7SAnna Dabrowska 'user' => 'max', 295*b271ebc7SAnna Dabrowska 'ack' => '1560805000', 296*b271ebc7SAnna Dabrowska ], 29709527955SAndreas Gohr ]; 29809527955SAndreas Gohr $this->assertEquals($expected, $actual); 29909527955SAndreas Gohr } 30009527955SAndreas Gohr 30109527955SAndreas Gohr /** 30209527955SAndreas Gohr * Check what users are assigned to a page that has a user and a group in the database 30309527955SAndreas Gohr */ 30409527955SAndreas Gohr public function test_getPageAssignees() 30509527955SAndreas Gohr { 30609527955SAndreas Gohr $actual = $this->helper->getPageAssignees('dokuwiki:acktest1'); 30709527955SAndreas Gohr $expected = ['regular', 'max']; 30809527955SAndreas Gohr $this->assertEquals($expected, $actual); 30909527955SAndreas Gohr } 31009527955SAndreas Gohr 31109527955SAndreas Gohr /** 31209527955SAndreas Gohr * Check what acknowledgments are there for a page 31309527955SAndreas Gohr */ 31409527955SAndreas Gohr public function test_getPageAcknowledgements() 31509527955SAndreas Gohr { 31609527955SAndreas Gohr $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest1'); 31709527955SAndreas Gohr $expected = [ 31809527955SAndreas Gohr [ 31909527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 32009527955SAndreas Gohr 'lastmod' => '1560805365', 32109527955SAndreas Gohr 'user' => 'max', 32209527955SAndreas Gohr 'ack' => '1560805770', 32309527955SAndreas Gohr ], 32409527955SAndreas Gohr [ 32509527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 32609527955SAndreas Gohr 'lastmod' => '1560805365', 32709527955SAndreas Gohr 'user' => 'regular', 32809527955SAndreas Gohr 'ack' => null, 32909527955SAndreas Gohr ], 33009527955SAndreas Gohr 33109527955SAndreas Gohr ]; 33209527955SAndreas Gohr $this->assertEquals($expected, $actual); 33309527955SAndreas Gohr 334dee5618cSAnna Dabrowska $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest1', 'max'); 335dee5618cSAnna Dabrowska $expected = [ 336dee5618cSAnna Dabrowska [ 337dee5618cSAnna Dabrowska 'page' => 'dokuwiki:acktest1', 338dee5618cSAnna Dabrowska 'lastmod' => '1560805365', 339dee5618cSAnna Dabrowska 'user' => 'max', 340dee5618cSAnna Dabrowska 'ack' => '1560805770', 341dee5618cSAnna Dabrowska ], 342dee5618cSAnna Dabrowska ]; 343dee5618cSAnna Dabrowska $this->assertEquals($expected, $actual); 344dee5618cSAnna Dabrowska 345dee5618cSAnna Dabrowska $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest2', '', 'due'); 346dee5618cSAnna Dabrowska $expected = [ 347dee5618cSAnna Dabrowska [ 348dee5618cSAnna Dabrowska 'page' => 'dokuwiki:acktest2', 349dee5618cSAnna Dabrowska 'lastmod' => '1560805365', 350dee5618cSAnna Dabrowska 'user' => 'max', 351dee5618cSAnna Dabrowska 'ack' => null, 352dee5618cSAnna Dabrowska ], 353dee5618cSAnna Dabrowska ]; 354dee5618cSAnna Dabrowska $this->assertEquals($expected, $actual); 355dee5618cSAnna Dabrowska 356dee5618cSAnna Dabrowska $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest3', '', 'current'); 357dee5618cSAnna Dabrowska $expected = [ 358dee5618cSAnna Dabrowska [ 359dee5618cSAnna Dabrowska 'page' => 'dokuwiki:acktest3', 360dee5618cSAnna Dabrowska 'lastmod' => '1560805365', 361dee5618cSAnna Dabrowska 'user' => 'regular', 362dee5618cSAnna Dabrowska 'ack' => '1560805555', 363dee5618cSAnna Dabrowska ], 364dee5618cSAnna Dabrowska ]; 365dee5618cSAnna Dabrowska $this->assertEquals($expected, $actual); 366*b271ebc7SAnna Dabrowska 367*b271ebc7SAnna Dabrowska $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest4', '', 'current'); 368*b271ebc7SAnna Dabrowska $expected = []; 369*b271ebc7SAnna Dabrowska $this->assertEquals($expected, $actual); 37009527955SAndreas Gohr } 37109527955SAndreas Gohr} 372