xref: /plugin/acknowledge/_test/HelperTest.php (revision dee5618cb3d093227d65f0e5fc00c5aee02c9f61)
1<?php
2
3namespace dokuwiki\plugin\acknowledge\test;
4
5use DokuWikiTest;
6
7/**
8 * Helper tests for the acknowledge plugin
9 *
10 * @group plugin_acknowledge
11 * @group plugins
12 */
13class HelperTest extends DokuWikiTest
14{
15    /** @var array */
16    protected $pluginsEnabled = ['acknowledge', 'sqlite'];
17    /** @var \helper_plugin_acknowledge $helper */
18    protected $helper;
19    /** @var \helper_plugin_sqlite */
20    protected $db;
21
22    public static function setUpBeforeClass(): void
23    {
24        parent::setUpBeforeClass();
25        /** @var \auth_plugin_authplain $auth */
26        global $auth;
27        $auth->createUser('max', 'none', 'max', 'max@example.com', ['super']);
28        $auth->createUser('regular', 'none', 'regular', 'regular@example.com', ['user']);
29    }
30
31    public function setUp(): void
32    {
33        parent::setUp();
34        $this->helper = plugin_load('helper', 'acknowledge');
35
36        $this->db = $this->helper->getDB();
37
38        $pages = "REPLACE INTO pages(page,lastmod)
39            VALUES ('dokuwiki:acktest1', 1560805365),
40            ('dokuwiki:acktest2', 1560805365),
41            ('dokuwiki:acktest3', 1560805365)";
42        $this->db->query($pages);
43
44        $assignments = "REPLACE INTO assignments(page,pageassignees)
45            VALUES ('dokuwiki:acktest1', 'regular, @super'),
46            ('dokuwiki:acktest2', '@super'),
47            ('dokuwiki:acktest3', '@user')";
48        $this->db->query($assignments);
49
50        // outdated, current, outdated but replaced, current replacing outdated, outdated
51        $acks = "REPLACE INTO acks(page,user,ack)
52            VALUES
53            ('dokuwiki:acktest3', 'regular', 1550801270),
54            ('dokuwiki:acktest3', 'regular', 1560805555),
55            ('dokuwiki:acktest1', 'max', 1550805770),
56            ('dokuwiki:acktest1', 'max', 1560805770),
57            ('dokuwiki:acktest3', 'max', 1560805000)
58            ";
59        $this->db->query($acks);
60    }
61
62    /**
63     * test latest acknowledgements
64     */
65    public function test_getLatestAcknowledgements()
66    {
67        $actual = $this->helper->getAcknowledgements();
68        $expected = [
69            [
70                'page' => 'dokuwiki:acktest1',
71                'user' => 'max',
72                'ack' => '1560805770',
73                'lastmod' => '1560805365',
74            ],
75            [
76                'page' => 'dokuwiki:acktest3',
77                'user' => 'regular',
78                'ack' => '1560805555',
79                'lastmod' => '1560805365',
80            ],
81            [
82                'page' => 'dokuwiki:acktest3',
83                'user' => 'max',
84                'ack' => '1560805000',
85                'lastmod' => '1560805365',
86            ],
87        ];
88        $this->assertEquals($expected, $actual);
89    }
90
91    /**
92     * test latest acknowledgements limited to 1
93     */
94    public function test_getLimitedAcknowledgements()
95    {
96        $actual = $this->helper->getAcknowledgements(1);
97        $expected = [
98            [
99                'page' => 'dokuwiki:acktest1',
100                'user' => 'max',
101                'ack' => '1560805770',
102                'lastmod' => '1560805365',
103            ],
104        ];
105        $this->assertEquals($expected, $actual);
106    }
107
108    /**
109     * Test assignments for the given user
110     */
111    public function test_getUserAssignments()
112    {
113        $actual = $this->helper->getUserAssignments('regular', ['user']);
114        $expected = [
115            [
116                'page' => 'dokuwiki:acktest1',
117                'pageassignees' => 'regular, @super',
118                'autoassignees' => '',
119                'lastmod' => '1560805365',
120                'user' => null,
121                'ack' => null,
122            ],
123        ];
124        $this->assertEquals($expected, $actual);
125
126        $actual = $this->helper->getUserAssignments('max', ['user', 'super']);
127        $expected = [
128            [
129                'page' => 'dokuwiki:acktest2',
130                'pageassignees' => '@super',
131                'autoassignees' => '',
132                'lastmod' => '1560805365',
133                'user' => null,
134                'ack' => null,
135            ],
136            [
137                'page' => 'dokuwiki:acktest3',
138                'pageassignees' => '@user',
139                'autoassignees' => '',
140                'lastmod' => '1560805365',
141                'user' => null,
142                'ack' => null,
143            ],
144        ];
145        $this->assertEquals($expected, $actual);
146    }
147
148    /**
149     * Test all acknowledgements for a user (done or still due)
150     *
151     * @return void
152     */
153    public function test_getUserAcknowledgementsAll()
154    {
155        $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super']);
156        $expected = [
157            // current / up to date
158            [
159                'page' => 'dokuwiki:acktest1',
160                'pageassignees' => 'regular, @super',
161                'autoassignees' => '',
162                'lastmod' => '1560805365',
163                'user' => 'max',
164                'ack' => '1560805770',
165            ],
166            // due / missing
167            [
168                'page' => 'dokuwiki:acktest2',
169                'pageassignees' => '@super',
170                'autoassignees' => '',
171                'lastmod' => '1560805365',
172                'user' => null,
173                'ack' => null,
174            ],
175            // outdated
176            [
177                'page' => 'dokuwiki:acktest3',
178                'pageassignees' => '@user',
179                'autoassignees' => '',
180                'lastmod' => '1560805365',
181                'user' => 'max',
182                'ack' => '1560805000',
183            ],
184        ];
185        $this->assertEquals($expected, $actual);
186    }
187
188    /**
189     * Test pages that user still has to acknowledge
190     *
191     * @return void
192     */
193    public function test_getUserAcknowledgementsDue()
194    {
195        $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'due');
196        $expected = [
197            [
198                'page' => 'dokuwiki:acktest2',
199                'pageassignees' => '@super',
200                'autoassignees' => '',
201                'lastmod' => '1560805365',
202                'user' => null,
203                'ack' => null,
204            ],
205            [
206                'page' => 'dokuwiki:acktest3',
207                'pageassignees' => '@user',
208                'autoassignees' => '',
209                'lastmod' => '1560805365',
210                'user' => 'max',
211                'ack' => '1560805000',
212            ],
213        ];
214        $this->assertEquals($expected, $actual);
215    }
216
217    /**
218     * Test current / up-to-date acknowledgements
219     *
220     * @return void
221     */
222    public function test_getUserAcknowledgementsCurrent()
223    {
224        $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'current');
225        $expected = [
226            [
227                'page' => 'dokuwiki:acktest1',
228                'pageassignees' => 'regular, @super',
229                'autoassignees' => '',
230                'lastmod' => '1560805365',
231                'user' => 'max',
232                'ack' => '1560805770',
233            ],
234        ];
235        $this->assertEquals($expected, $actual);
236    }
237
238    /**
239     * Test outdated acknowledgements (ack exists, but for older page revision)
240     *
241     * @return void
242     */
243    public function test_getUserAcknowledgementsOutdated()
244    {
245        $actual = $this->helper->getUserAcknowledgements('max', ['user', 'super'], 'outdated');
246        $expected = [
247            [
248                'page' => 'dokuwiki:acktest3',
249                'pageassignees' => '@user',
250                'autoassignees' => '',
251                'lastmod' => '1560805365',
252                'user' => 'max',
253                'ack' => '1560805000',
254            ],
255        ];
256        $this->assertEquals($expected, $actual);
257    }
258
259    /**
260     * Check what users are assigned to a page that has a user and a group in the database
261     */
262    public function test_getPageAssignees()
263    {
264        $actual = $this->helper->getPageAssignees('dokuwiki:acktest1');
265        $expected = ['regular', 'max'];
266        $this->assertEquals($expected, $actual);
267    }
268
269    /**
270     * Check what acknowledgments are there for a page
271     */
272    public function test_getPageAcknowledgements()
273    {
274        $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest1');
275        $expected = [
276            [
277                'page' => 'dokuwiki:acktest1',
278                'lastmod' => '1560805365',
279                'user' => 'max',
280                'ack' => '1560805770',
281            ],
282            [
283                'page' => 'dokuwiki:acktest1',
284                'lastmod' => '1560805365',
285                'user' => 'regular',
286                'ack' => null,
287            ],
288
289        ];
290        $this->assertEquals($expected, $actual);
291
292        $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest1', 'max');
293        $expected = [
294            [
295                'page' => 'dokuwiki:acktest1',
296                'lastmod' => '1560805365',
297                'user' => 'max',
298                'ack' => '1560805770',
299            ],
300        ];
301        $this->assertEquals($expected, $actual);
302
303        $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest2', '', 'due');
304        $expected = [
305            [
306                'page' => 'dokuwiki:acktest2',
307                'lastmod' => '1560805365',
308                'user' => 'max',
309                'ack' => null,
310            ],
311        ];
312        $this->assertEquals($expected, $actual);
313
314        $actual = $this->helper->getPageAcknowledgements('dokuwiki:acktest3', '', 'current');
315        $expected = [
316            [
317                'page' => 'dokuwiki:acktest3',
318                'lastmod' => '1560805365',
319                'user' => 'regular',
320                'ack' => '1560805555',
321            ],
322        ];
323        $this->assertEquals($expected, $actual);
324    }
325}
326