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']); 28*dee5618cSAnna 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), 4109527955SAndreas Gohr ('dokuwiki:acktest3', 1560805365)"; 4209527955SAndreas Gohr $this->db->query($pages); 4309527955SAndreas Gohr 4409527955SAndreas Gohr $assignments = "REPLACE INTO assignments(page,pageassignees) 4509527955SAndreas Gohr VALUES ('dokuwiki:acktest1', 'regular, @super'), 4609527955SAndreas Gohr ('dokuwiki:acktest2', '@super'), 4709527955SAndreas Gohr ('dokuwiki:acktest3', '@user')"; 4809527955SAndreas Gohr $this->db->query($assignments); 4909527955SAndreas Gohr 505966046cSAnna Dabrowska // outdated, current, outdated but replaced, current replacing outdated, outdated 5109527955SAndreas Gohr $acks = "REPLACE INTO acks(page,user,ack) 52*dee5618cSAnna Dabrowska VALUES 53*dee5618cSAnna Dabrowska ('dokuwiki:acktest3', 'regular', 1550801270), 5409527955SAndreas Gohr ('dokuwiki:acktest3', 'regular', 1560805555), 5509527955SAndreas Gohr ('dokuwiki:acktest1', 'max', 1550805770), 5609527955SAndreas Gohr ('dokuwiki:acktest1', 'max', 1560805770), 5709527955SAndreas Gohr ('dokuwiki:acktest3', 'max', 1560805000) 5809527955SAndreas Gohr "; 5909527955SAndreas Gohr $this->db->query($acks); 6009527955SAndreas Gohr } 6109527955SAndreas Gohr 6209527955SAndreas Gohr /** 6309527955SAndreas Gohr * test latest acknowledgements 6409527955SAndreas Gohr */ 6509527955SAndreas Gohr public function test_getLatestAcknowledgements() 6609527955SAndreas Gohr { 6709527955SAndreas Gohr $actual = $this->helper->getAcknowledgements(); 6809527955SAndreas Gohr $expected = [ 6909527955SAndreas Gohr [ 7009527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 7109527955SAndreas Gohr 'user' => 'max', 7209527955SAndreas Gohr 'ack' => '1560805770', 7309527955SAndreas Gohr 'lastmod' => '1560805365', 7409527955SAndreas Gohr ], 7509527955SAndreas Gohr [ 7609527955SAndreas Gohr 'page' => 'dokuwiki:acktest3', 7709527955SAndreas Gohr 'user' => 'regular', 7809527955SAndreas Gohr 'ack' => '1560805555', 7909527955SAndreas Gohr 'lastmod' => '1560805365', 8009527955SAndreas Gohr ], 8109527955SAndreas Gohr [ 8209527955SAndreas Gohr 'page' => 'dokuwiki:acktest3', 8309527955SAndreas Gohr 'user' => 'max', 8409527955SAndreas Gohr 'ack' => '1560805000', 8509527955SAndreas Gohr 'lastmod' => '1560805365', 8609527955SAndreas Gohr ], 8709527955SAndreas Gohr ]; 8809527955SAndreas Gohr $this->assertEquals($expected, $actual); 8909527955SAndreas Gohr } 9009527955SAndreas Gohr 9109527955SAndreas Gohr /** 9209527955SAndreas Gohr * test latest acknowledgements limited to 1 9309527955SAndreas Gohr */ 9409527955SAndreas Gohr public function test_getLimitedAcknowledgements() 9509527955SAndreas Gohr { 9609527955SAndreas Gohr $actual = $this->helper->getAcknowledgements(1); 9709527955SAndreas Gohr $expected = [ 9809527955SAndreas Gohr [ 9909527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 10009527955SAndreas Gohr 'user' => 'max', 10109527955SAndreas Gohr 'ack' => '1560805770', 10209527955SAndreas Gohr 'lastmod' => '1560805365', 10309527955SAndreas Gohr ], 10409527955SAndreas Gohr ]; 10509527955SAndreas Gohr $this->assertEquals($expected, $actual); 10609527955SAndreas Gohr } 10709527955SAndreas Gohr 10809527955SAndreas Gohr /** 109*dee5618cSAnna Dabrowska * Test assignments for the given user 11009527955SAndreas Gohr */ 11109527955SAndreas Gohr public function test_getUserAssignments() 11209527955SAndreas Gohr { 11309527955SAndreas Gohr $actual = $this->helper->getUserAssignments('regular', ['user']); 11409527955SAndreas Gohr $expected = [ 11509527955SAndreas Gohr [ 11609527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 11709527955SAndreas Gohr 'pageassignees' => 'regular, @super', 11809527955SAndreas Gohr 'autoassignees' => '', 11909527955SAndreas Gohr 'lastmod' => '1560805365', 12009527955SAndreas Gohr 'user' => null, 12109527955SAndreas Gohr 'ack' => null, 12209527955SAndreas Gohr ], 12309527955SAndreas Gohr ]; 12409527955SAndreas Gohr $this->assertEquals($expected, $actual); 12509527955SAndreas Gohr 12609527955SAndreas Gohr $actual = $this->helper->getUserAssignments('max', ['user', 'super']); 12709527955SAndreas Gohr $expected = [ 12809527955SAndreas Gohr [ 12909527955SAndreas Gohr 'page' => 'dokuwiki:acktest2', 13009527955SAndreas Gohr 'pageassignees' => '@super', 13109527955SAndreas Gohr 'autoassignees' => '', 13209527955SAndreas Gohr 'lastmod' => '1560805365', 13309527955SAndreas Gohr 'user' => null, 13409527955SAndreas Gohr 'ack' => null, 13509527955SAndreas Gohr ], 13609527955SAndreas Gohr [ 13709527955SAndreas Gohr 'page' => 'dokuwiki:acktest3', 13809527955SAndreas Gohr 'pageassignees' => '@user', 13909527955SAndreas Gohr 'autoassignees' => '', 14009527955SAndreas Gohr 'lastmod' => '1560805365', 14109527955SAndreas Gohr 'user' => null, 14209527955SAndreas Gohr 'ack' => null, 14309527955SAndreas Gohr ], 14409527955SAndreas Gohr ]; 14509527955SAndreas Gohr $this->assertEquals($expected, $actual); 14609527955SAndreas Gohr } 14709527955SAndreas Gohr 1485966046cSAnna Dabrowska /** 1495966046cSAnna Dabrowska * Test all acknowledgements for a user (done or still due) 1505966046cSAnna Dabrowska * 1515966046cSAnna Dabrowska * @return void 1525966046cSAnna Dabrowska */ 1535966046cSAnna Dabrowska public function test_getUserAcknowledgementsAll() 15409527955SAndreas Gohr { 15509527955SAndreas Gohr $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super']); 15609527955SAndreas Gohr $expected = [ 1575966046cSAnna Dabrowska // current / up to date 1585966046cSAnna Dabrowska [ 1595966046cSAnna Dabrowska 'page' => 'dokuwiki:acktest1', 1605966046cSAnna Dabrowska 'pageassignees' => 'regular, @super', 1615966046cSAnna Dabrowska 'autoassignees' => '', 1625966046cSAnna Dabrowska 'lastmod' => '1560805365', 1635966046cSAnna Dabrowska 'user' => 'max', 1645966046cSAnna Dabrowska 'ack' => '1560805770', 1655966046cSAnna Dabrowska ], 1665966046cSAnna Dabrowska // due / missing 1675966046cSAnna Dabrowska [ 1685966046cSAnna Dabrowska 'page' => 'dokuwiki:acktest2', 1695966046cSAnna Dabrowska 'pageassignees' => '@super', 1705966046cSAnna Dabrowska 'autoassignees' => '', 1715966046cSAnna Dabrowska 'lastmod' => '1560805365', 1725966046cSAnna Dabrowska 'user' => null, 1735966046cSAnna Dabrowska 'ack' => null, 1745966046cSAnna Dabrowska ], 1755966046cSAnna Dabrowska // outdated 1765966046cSAnna Dabrowska [ 1775966046cSAnna Dabrowska 'page' => 'dokuwiki:acktest3', 1785966046cSAnna Dabrowska 'pageassignees' => '@user', 1795966046cSAnna Dabrowska 'autoassignees' => '', 1805966046cSAnna Dabrowska 'lastmod' => '1560805365', 1815966046cSAnna Dabrowska 'user' => 'max', 1825966046cSAnna Dabrowska 'ack' => '1560805000', 1835966046cSAnna Dabrowska ], 1845966046cSAnna Dabrowska ]; 1855966046cSAnna Dabrowska $this->assertEquals($expected, $actual); 1865966046cSAnna Dabrowska } 1875966046cSAnna Dabrowska 1885966046cSAnna Dabrowska /** 1895966046cSAnna Dabrowska * Test pages that user still has to acknowledge 1905966046cSAnna Dabrowska * 1915966046cSAnna Dabrowska * @return void 1925966046cSAnna Dabrowska */ 1935966046cSAnna Dabrowska public function test_getUserAcknowledgementsDue() 1945966046cSAnna Dabrowska { 1955966046cSAnna Dabrowska $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'due'); 1965966046cSAnna Dabrowska $expected = [ 1975966046cSAnna Dabrowska [ 1985966046cSAnna Dabrowska 'page' => 'dokuwiki:acktest2', 1995966046cSAnna Dabrowska 'pageassignees' => '@super', 2005966046cSAnna Dabrowska 'autoassignees' => '', 2015966046cSAnna Dabrowska 'lastmod' => '1560805365', 2025966046cSAnna Dabrowska 'user' => null, 2035966046cSAnna Dabrowska 'ack' => null, 2045966046cSAnna Dabrowska ], 2055966046cSAnna Dabrowska [ 2065966046cSAnna Dabrowska 'page' => 'dokuwiki:acktest3', 2075966046cSAnna Dabrowska 'pageassignees' => '@user', 2085966046cSAnna Dabrowska 'autoassignees' => '', 2095966046cSAnna Dabrowska 'lastmod' => '1560805365', 2105966046cSAnna Dabrowska 'user' => 'max', 2115966046cSAnna Dabrowska 'ack' => '1560805000', 2125966046cSAnna Dabrowska ], 2135966046cSAnna Dabrowska ]; 2145966046cSAnna Dabrowska $this->assertEquals($expected, $actual); 2155966046cSAnna Dabrowska } 2165966046cSAnna Dabrowska 2175966046cSAnna Dabrowska /** 2185966046cSAnna Dabrowska * Test current / up-to-date acknowledgements 2195966046cSAnna Dabrowska * 2205966046cSAnna Dabrowska * @return void 2215966046cSAnna Dabrowska */ 2225966046cSAnna Dabrowska public function test_getUserAcknowledgementsCurrent() 2235966046cSAnna Dabrowska { 2245966046cSAnna Dabrowska $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'current'); 2255966046cSAnna Dabrowska $expected = [ 22609527955SAndreas Gohr [ 22709527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 22809527955SAndreas Gohr 'pageassignees' => 'regular, @super', 22909527955SAndreas Gohr 'autoassignees' => '', 23009527955SAndreas Gohr 'lastmod' => '1560805365', 23109527955SAndreas Gohr 'user' => 'max', 23209527955SAndreas Gohr 'ack' => '1560805770', 23309527955SAndreas Gohr ], 2345966046cSAnna Dabrowska ]; 2355966046cSAnna Dabrowska $this->assertEquals($expected, $actual); 2365966046cSAnna Dabrowska } 2375966046cSAnna Dabrowska 2385966046cSAnna Dabrowska /** 2395966046cSAnna Dabrowska * Test outdated acknowledgements (ack exists, but for older page revision) 2405966046cSAnna Dabrowska * 2415966046cSAnna Dabrowska * @return void 2425966046cSAnna Dabrowska */ 2435966046cSAnna Dabrowska public function test_getUserAcknowledgementsOutdated() 2445966046cSAnna Dabrowska { 2455966046cSAnna Dabrowska $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'outdated'); 2465966046cSAnna Dabrowska $expected = [ 24709527955SAndreas Gohr [ 24809527955SAndreas Gohr 'page' => 'dokuwiki:acktest3', 24909527955SAndreas Gohr 'pageassignees' => '@user', 25009527955SAndreas Gohr 'autoassignees' => '', 25109527955SAndreas Gohr 'lastmod' => '1560805365', 25209527955SAndreas Gohr 'user' => 'max', 25309527955SAndreas Gohr 'ack' => '1560805000', 25409527955SAndreas Gohr ], 25509527955SAndreas Gohr ]; 25609527955SAndreas Gohr $this->assertEquals($expected, $actual); 25709527955SAndreas Gohr } 25809527955SAndreas Gohr 25909527955SAndreas Gohr /** 26009527955SAndreas Gohr * Check what users are assigned to a page that has a user and a group in the database 26109527955SAndreas Gohr */ 26209527955SAndreas Gohr public function test_getPageAssignees() 26309527955SAndreas Gohr { 26409527955SAndreas Gohr $actual = $this->helper->getPageAssignees('dokuwiki:acktest1'); 26509527955SAndreas Gohr $expected = ['regular', 'max']; 26609527955SAndreas Gohr $this->assertEquals($expected, $actual); 26709527955SAndreas Gohr } 26809527955SAndreas Gohr 26909527955SAndreas Gohr /** 27009527955SAndreas Gohr * Check what acknowledgments are there for a page 27109527955SAndreas Gohr */ 27209527955SAndreas Gohr public function test_getPageAcknowledgements() 27309527955SAndreas Gohr { 27409527955SAndreas Gohr $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest1'); 27509527955SAndreas Gohr $expected = [ 27609527955SAndreas Gohr [ 27709527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 27809527955SAndreas Gohr 'lastmod' => '1560805365', 27909527955SAndreas Gohr 'user' => 'max', 28009527955SAndreas Gohr 'ack' => '1560805770', 28109527955SAndreas Gohr ], 28209527955SAndreas Gohr [ 28309527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 28409527955SAndreas Gohr 'lastmod' => '1560805365', 28509527955SAndreas Gohr 'user' => 'regular', 28609527955SAndreas Gohr 'ack' => null, 28709527955SAndreas Gohr ], 28809527955SAndreas Gohr 28909527955SAndreas Gohr ]; 29009527955SAndreas Gohr $this->assertEquals($expected, $actual); 29109527955SAndreas Gohr 292*dee5618cSAnna Dabrowska $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest1', 'max'); 293*dee5618cSAnna Dabrowska $expected = [ 294*dee5618cSAnna Dabrowska [ 295*dee5618cSAnna Dabrowska 'page' => 'dokuwiki:acktest1', 296*dee5618cSAnna Dabrowska 'lastmod' => '1560805365', 297*dee5618cSAnna Dabrowska 'user' => 'max', 298*dee5618cSAnna Dabrowska 'ack' => '1560805770', 299*dee5618cSAnna Dabrowska ], 300*dee5618cSAnna Dabrowska ]; 301*dee5618cSAnna Dabrowska $this->assertEquals($expected, $actual); 302*dee5618cSAnna Dabrowska 303*dee5618cSAnna Dabrowska $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest2', '', 'due'); 304*dee5618cSAnna Dabrowska $expected = [ 305*dee5618cSAnna Dabrowska [ 306*dee5618cSAnna Dabrowska 'page' => 'dokuwiki:acktest2', 307*dee5618cSAnna Dabrowska 'lastmod' => '1560805365', 308*dee5618cSAnna Dabrowska 'user' => 'max', 309*dee5618cSAnna Dabrowska 'ack' => null, 310*dee5618cSAnna Dabrowska ], 311*dee5618cSAnna Dabrowska ]; 312*dee5618cSAnna Dabrowska $this->assertEquals($expected, $actual); 313*dee5618cSAnna Dabrowska 314*dee5618cSAnna Dabrowska $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest3', '', 'current'); 315*dee5618cSAnna Dabrowska $expected = [ 316*dee5618cSAnna Dabrowska [ 317*dee5618cSAnna Dabrowska 'page' => 'dokuwiki:acktest3', 318*dee5618cSAnna Dabrowska 'lastmod' => '1560805365', 319*dee5618cSAnna Dabrowska 'user' => 'regular', 320*dee5618cSAnna Dabrowska 'ack' => '1560805555', 321*dee5618cSAnna Dabrowska ], 322*dee5618cSAnna Dabrowska ]; 323*dee5618cSAnna Dabrowska $this->assertEquals($expected, $actual); 32409527955SAndreas Gohr } 32509527955SAndreas Gohr} 326