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