xref: /plugin/acknowledge/_test/HelperTest.php (revision dee5618cb3d093227d65f0e5fc00c5aee02c9f61)
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