109527955SAndreas Gohr<?php 209527955SAndreas Gohr 309527955SAndreas Gohr 409527955SAndreas Gohrnamespace dokuwiki\plugin\acknowledge\test; 509527955SAndreas Gohr 609527955SAndreas Gohruse DokuWikiTest; 709527955SAndreas Gohr 809527955SAndreas Gohr/** 909527955SAndreas Gohr * Helper tests for the acknowledge plugin 1009527955SAndreas Gohr * 1109527955SAndreas Gohr * @group plugin_acknowledge 1209527955SAndreas Gohr * @group plugins 1309527955SAndreas Gohr */ 1409527955SAndreas Gohrclass HelperTest extends DokuWikiTest 1509527955SAndreas Gohr{ 1609527955SAndreas Gohr /** @var array */ 1709527955SAndreas Gohr protected $pluginsEnabled = ['acknowledge', 'sqlite']; 1809527955SAndreas Gohr /** @var \helper_plugin_acknowledge $helper */ 1909527955SAndreas Gohr protected $helper; 2009527955SAndreas Gohr /** @var \helper_plugin_sqlite */ 2109527955SAndreas Gohr protected $db; 2209527955SAndreas Gohr 2309527955SAndreas Gohr public static function setUpBeforeClass(): void 2409527955SAndreas Gohr { 2509527955SAndreas Gohr parent::setUpBeforeClass(); 2609527955SAndreas Gohr /** @var \auth_plugin_authplain $auth */ 2709527955SAndreas Gohr global $auth; 2809527955SAndreas Gohr $auth->createUser('max', 'none', 'max', 'max@example.com', ['super']); 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 50*5966046cSAnna Dabrowska // outdated, current, outdated but replaced, current replacing outdated, outdated 5109527955SAndreas Gohr $acks = "REPLACE INTO acks(page,user,ack) 5209527955SAndreas Gohr VALUES ('dokuwiki:acktest3', 'regular', 1550801270), 5309527955SAndreas Gohr ('dokuwiki:acktest3', 'regular', 1560805555), 5409527955SAndreas Gohr ('dokuwiki:acktest1', 'max', 1550805770), 5509527955SAndreas Gohr ('dokuwiki:acktest1', 'max', 1560805770), 5609527955SAndreas Gohr ('dokuwiki:acktest3', 'max', 1560805000) 5709527955SAndreas Gohr "; 5809527955SAndreas Gohr $this->db->query($acks); 5909527955SAndreas Gohr } 6009527955SAndreas Gohr 6109527955SAndreas Gohr /** 6209527955SAndreas Gohr * test latest acknowledgements 6309527955SAndreas Gohr */ 6409527955SAndreas Gohr public function test_getLatestAcknowledgements() 6509527955SAndreas Gohr { 6609527955SAndreas Gohr $actual = $this->helper->getAcknowledgements(); 6709527955SAndreas Gohr $expected = [ 6809527955SAndreas Gohr [ 6909527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 7009527955SAndreas Gohr 'user' => 'max', 7109527955SAndreas Gohr 'ack' => '1560805770', 7209527955SAndreas Gohr 'lastmod' => '1560805365', 7309527955SAndreas Gohr ], 7409527955SAndreas Gohr [ 7509527955SAndreas Gohr 'page' => 'dokuwiki:acktest3', 7609527955SAndreas Gohr 'user' => 'regular', 7709527955SAndreas Gohr 'ack' => '1560805555', 7809527955SAndreas Gohr 'lastmod' => '1560805365', 7909527955SAndreas Gohr ], 8009527955SAndreas Gohr [ 8109527955SAndreas Gohr 'page' => 'dokuwiki:acktest3', 8209527955SAndreas Gohr 'user' => 'max', 8309527955SAndreas Gohr 'ack' => '1560805000', 8409527955SAndreas Gohr 'lastmod' => '1560805365', 8509527955SAndreas Gohr ], 8609527955SAndreas Gohr ]; 8709527955SAndreas Gohr $this->assertEquals($expected, $actual); 8809527955SAndreas Gohr } 8909527955SAndreas Gohr 9009527955SAndreas Gohr /** 9109527955SAndreas Gohr * test latest acknowledgements limited to 1 9209527955SAndreas Gohr */ 9309527955SAndreas Gohr public function test_getLimitedAcknowledgements() 9409527955SAndreas Gohr { 9509527955SAndreas Gohr $actual = $this->helper->getAcknowledgements(1); 9609527955SAndreas Gohr $expected = [ 9709527955SAndreas Gohr [ 9809527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 9909527955SAndreas Gohr 'user' => 'max', 10009527955SAndreas Gohr 'ack' => '1560805770', 10109527955SAndreas Gohr 'lastmod' => '1560805365', 10209527955SAndreas Gohr ], 10309527955SAndreas Gohr ]; 10409527955SAndreas Gohr $this->assertEquals($expected, $actual); 10509527955SAndreas Gohr } 10609527955SAndreas Gohr 10709527955SAndreas Gohr /** 10809527955SAndreas Gohr * test assignment query 10909527955SAndreas Gohr */ 11009527955SAndreas Gohr public function test_getUserAssignments() 11109527955SAndreas Gohr { 11209527955SAndreas Gohr $actual = $this->helper->getUserAssignments('regular', ['user']); 11309527955SAndreas Gohr $expected = [ 11409527955SAndreas Gohr [ 11509527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 11609527955SAndreas Gohr 'pageassignees' => 'regular, @super', 11709527955SAndreas Gohr 'autoassignees' => '', 11809527955SAndreas Gohr 'lastmod' => '1560805365', 11909527955SAndreas Gohr 'user' => null, 12009527955SAndreas Gohr 'ack' => null, 12109527955SAndreas Gohr ], 12209527955SAndreas Gohr ]; 12309527955SAndreas Gohr $this->assertEquals($expected, $actual); 12409527955SAndreas Gohr 12509527955SAndreas Gohr $actual = $this->helper->getUserAssignments('max', ['user', 'super']); 12609527955SAndreas Gohr $expected = [ 12709527955SAndreas Gohr [ 12809527955SAndreas Gohr 'page' => 'dokuwiki:acktest2', 12909527955SAndreas Gohr 'pageassignees' => '@super', 13009527955SAndreas Gohr 'autoassignees' => '', 13109527955SAndreas Gohr 'lastmod' => '1560805365', 13209527955SAndreas Gohr 'user' => null, 13309527955SAndreas Gohr 'ack' => null, 13409527955SAndreas Gohr ], 13509527955SAndreas Gohr [ 13609527955SAndreas Gohr 'page' => 'dokuwiki:acktest3', 13709527955SAndreas Gohr 'pageassignees' => '@user', 13809527955SAndreas Gohr 'autoassignees' => '', 13909527955SAndreas Gohr 'lastmod' => '1560805365', 14009527955SAndreas Gohr 'user' => null, 14109527955SAndreas Gohr 'ack' => null, 14209527955SAndreas Gohr ], 14309527955SAndreas Gohr ]; 14409527955SAndreas Gohr $this->assertEquals($expected, $actual); 14509527955SAndreas Gohr } 14609527955SAndreas Gohr 147*5966046cSAnna Dabrowska /** 148*5966046cSAnna Dabrowska * Test all acknowledgements for a user (done or still due) 149*5966046cSAnna Dabrowska * 150*5966046cSAnna Dabrowska * @return void 151*5966046cSAnna Dabrowska */ 152*5966046cSAnna Dabrowska public function test_getUserAcknowledgementsAll() 15309527955SAndreas Gohr { 15409527955SAndreas Gohr $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super']); 15509527955SAndreas Gohr $expected = [ 156*5966046cSAnna Dabrowska // current / up to date 157*5966046cSAnna Dabrowska [ 158*5966046cSAnna Dabrowska 'page' => 'dokuwiki:acktest1', 159*5966046cSAnna Dabrowska 'pageassignees' => 'regular, @super', 160*5966046cSAnna Dabrowska 'autoassignees' => '', 161*5966046cSAnna Dabrowska 'lastmod' => '1560805365', 162*5966046cSAnna Dabrowska 'user' => 'max', 163*5966046cSAnna Dabrowska 'ack' => '1560805770', 164*5966046cSAnna Dabrowska ], 165*5966046cSAnna Dabrowska // due / missing 166*5966046cSAnna Dabrowska [ 167*5966046cSAnna Dabrowska 'page' => 'dokuwiki:acktest2', 168*5966046cSAnna Dabrowska 'pageassignees' => '@super', 169*5966046cSAnna Dabrowska 'autoassignees' => '', 170*5966046cSAnna Dabrowska 'lastmod' => '1560805365', 171*5966046cSAnna Dabrowska 'user' => null, 172*5966046cSAnna Dabrowska 'ack' => null, 173*5966046cSAnna Dabrowska ], 174*5966046cSAnna Dabrowska // outdated 175*5966046cSAnna Dabrowska [ 176*5966046cSAnna Dabrowska 'page' => 'dokuwiki:acktest3', 177*5966046cSAnna Dabrowska 'pageassignees' => '@user', 178*5966046cSAnna Dabrowska 'autoassignees' => '', 179*5966046cSAnna Dabrowska 'lastmod' => '1560805365', 180*5966046cSAnna Dabrowska 'user' => 'max', 181*5966046cSAnna Dabrowska 'ack' => '1560805000', 182*5966046cSAnna Dabrowska ], 183*5966046cSAnna Dabrowska ]; 184*5966046cSAnna Dabrowska $this->assertEquals($expected, $actual); 185*5966046cSAnna Dabrowska } 186*5966046cSAnna Dabrowska 187*5966046cSAnna Dabrowska /** 188*5966046cSAnna Dabrowska * Test pages that user still has to acknowledge 189*5966046cSAnna Dabrowska * 190*5966046cSAnna Dabrowska * @return void 191*5966046cSAnna Dabrowska */ 192*5966046cSAnna Dabrowska public function test_getUserAcknowledgementsDue() 193*5966046cSAnna Dabrowska { 194*5966046cSAnna Dabrowska $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'due'); 195*5966046cSAnna Dabrowska $expected = [ 196*5966046cSAnna Dabrowska [ 197*5966046cSAnna Dabrowska 'page' => 'dokuwiki:acktest2', 198*5966046cSAnna Dabrowska 'pageassignees' => '@super', 199*5966046cSAnna Dabrowska 'autoassignees' => '', 200*5966046cSAnna Dabrowska 'lastmod' => '1560805365', 201*5966046cSAnna Dabrowska 'user' => null, 202*5966046cSAnna Dabrowska 'ack' => null, 203*5966046cSAnna Dabrowska ], 204*5966046cSAnna Dabrowska [ 205*5966046cSAnna Dabrowska 'page' => 'dokuwiki:acktest3', 206*5966046cSAnna Dabrowska 'pageassignees' => '@user', 207*5966046cSAnna Dabrowska 'autoassignees' => '', 208*5966046cSAnna Dabrowska 'lastmod' => '1560805365', 209*5966046cSAnna Dabrowska 'user' => 'max', 210*5966046cSAnna Dabrowska 'ack' => '1560805000', 211*5966046cSAnna Dabrowska ], 212*5966046cSAnna Dabrowska ]; 213*5966046cSAnna Dabrowska $this->assertEquals($expected, $actual); 214*5966046cSAnna Dabrowska } 215*5966046cSAnna Dabrowska 216*5966046cSAnna Dabrowska /** 217*5966046cSAnna Dabrowska * Test current / up-to-date acknowledgements 218*5966046cSAnna Dabrowska * 219*5966046cSAnna Dabrowska * @return void 220*5966046cSAnna Dabrowska */ 221*5966046cSAnna Dabrowska public function test_getUserAcknowledgementsCurrent() 222*5966046cSAnna Dabrowska { 223*5966046cSAnna Dabrowska $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'current'); 224*5966046cSAnna Dabrowska $expected = [ 22509527955SAndreas Gohr [ 22609527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 22709527955SAndreas Gohr 'pageassignees' => 'regular, @super', 22809527955SAndreas Gohr 'autoassignees' => '', 22909527955SAndreas Gohr 'lastmod' => '1560805365', 23009527955SAndreas Gohr 'user' => 'max', 23109527955SAndreas Gohr 'ack' => '1560805770', 23209527955SAndreas Gohr ], 233*5966046cSAnna Dabrowska ]; 234*5966046cSAnna Dabrowska $this->assertEquals($expected, $actual); 235*5966046cSAnna Dabrowska } 236*5966046cSAnna Dabrowska 237*5966046cSAnna Dabrowska /** 238*5966046cSAnna Dabrowska * Test outdated acknowledgements (ack exists, but for older page revision) 239*5966046cSAnna Dabrowska * 240*5966046cSAnna Dabrowska * @return void 241*5966046cSAnna Dabrowska */ 242*5966046cSAnna Dabrowska public function test_getUserAcknowledgementsOutdated() 243*5966046cSAnna Dabrowska { 244*5966046cSAnna Dabrowska $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'outdated'); 245*5966046cSAnna Dabrowska $expected = [ 24609527955SAndreas Gohr [ 24709527955SAndreas Gohr 'page' => 'dokuwiki:acktest3', 24809527955SAndreas Gohr 'pageassignees' => '@user', 24909527955SAndreas Gohr 'autoassignees' => '', 25009527955SAndreas Gohr 'lastmod' => '1560805365', 25109527955SAndreas Gohr 'user' => 'max', 25209527955SAndreas Gohr 'ack' => '1560805000', 25309527955SAndreas Gohr ], 25409527955SAndreas Gohr ]; 25509527955SAndreas Gohr $this->assertEquals($expected, $actual); 25609527955SAndreas Gohr } 25709527955SAndreas Gohr 25809527955SAndreas Gohr /** 25909527955SAndreas Gohr * Check what users are assigned to a page that has a user and a group in the database 26009527955SAndreas Gohr */ 26109527955SAndreas Gohr public function test_getPageAssignees() 26209527955SAndreas Gohr { 26309527955SAndreas Gohr $actual = $this->helper->getPageAssignees('dokuwiki:acktest1'); 26409527955SAndreas Gohr $expected = ['regular', 'max']; 26509527955SAndreas Gohr $this->assertEquals($expected, $actual); 26609527955SAndreas Gohr } 26709527955SAndreas Gohr 26809527955SAndreas Gohr /** 26909527955SAndreas Gohr * Check what acknowledgments are there for a page 27009527955SAndreas Gohr */ 27109527955SAndreas Gohr public function test_getPageAcknowledgements() 27209527955SAndreas Gohr { 27309527955SAndreas Gohr $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest1'); 27409527955SAndreas Gohr $expected = [ 27509527955SAndreas Gohr [ 27609527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 27709527955SAndreas Gohr 'lastmod' => '1560805365', 27809527955SAndreas Gohr 'user' => 'max', 27909527955SAndreas Gohr 'ack' => '1560805770', 28009527955SAndreas Gohr ], 28109527955SAndreas Gohr [ 28209527955SAndreas Gohr 'page' => 'dokuwiki:acktest1', 28309527955SAndreas Gohr 'lastmod' => '1560805365', 28409527955SAndreas Gohr 'user' => 'regular', 28509527955SAndreas Gohr 'ack' => null, 28609527955SAndreas Gohr ], 28709527955SAndreas Gohr 28809527955SAndreas Gohr ]; 28909527955SAndreas Gohr $this->assertEquals($expected, $actual); 29009527955SAndreas Gohr 29109527955SAndreas Gohr } 29209527955SAndreas Gohr} 293