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