xref: /dokuwiki/_test/tests/inc/changelog_getrelativerevision.test.php (revision 555855b8168658b045d55a1fa5f14b40602f9140)
1<?php
2
3use dokuwiki\ChangeLog\PageChangeLog;
4
5/**
6 * Tests for requesting revisioninfo of a revision of a page with getRevisionInfo()
7 *
8 * This class uses the files:
9 * - data/pages/mailinglist.txt
10 * - data/meta/mailinglist.changes
11 */
12class changelog_getrelativerevision_test extends DokuWikiTest {
13
14    private $logline = "1362525899	127.0.0.1	E	mailinglist	pubcie	[Data entry] 	\n";
15    private $pageid = 'mailinglist';
16
17    function setup() : void {
18        parent::setup();
19        global $cache_revinfo;
20        $cache =& $cache_revinfo;
21        if(isset($cache['nonexist'])) {
22            unset($cache['nonexist']);
23        }
24        if(isset($cache['mailinglist'])) {
25            unset($cache['mailinglist']);
26        }
27    }
28
29    /**
30     * no nonexist.changes meta file available
31     */
32    function test_changemetadatanotexists() {
33        $rev = 1362525899;
34        $dir = 1;
35        $id = 'nonexist';
36        $revsexpected = false;
37
38        $pagelog = new PageChangeLog($id, $chunk_size = 8192);
39        $revs = $pagelog->getRelativeRevision($rev, $dir);
40        $this->assertEquals($revsexpected, $revs);
41    }
42
43    /**
44     * no nonexist.changes meta file available
45     */
46    function test_nodirection() {
47        $rev = 1362525899;
48        $dir = 0;
49        $revsexpected = false;
50
51        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
52        $revs = $pagelog->getRelativeRevision($rev, $dir);
53        $this->assertEquals($revsexpected, $revs);
54    }
55
56    /**
57     * start at exact current revision of mailinglist page
58     *
59     */
60    function test_startatexactcurrentrev() {
61        $rev = 1385051947;
62        $dir = 1;
63        $revsexpectedpos = false;
64        $revsexpectedneg = 1374261194;
65
66        //set a known timestamp
67        touch(wikiFN($this->pageid), $rev);
68
69        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
70        $revs = $pagelog->getRelativeRevision($rev, $dir);
71        $this->assertEquals($revsexpectedpos, $revs);
72
73        $revs = $pagelog->getRelativeRevision($rev, -$dir);
74        $this->assertEquals($revsexpectedneg, $revs);
75    }
76
77    /**
78     * start at exact last revision of mailinglist page
79     *
80     */
81    function test_startatexactlastrev() {
82        $rev = 1360110636;
83        $dir = 1;
84        $revsexpectedpos = 1361901536;
85        $revsexpectedneg = false;
86
87        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
88        $revs = $pagelog->getRelativeRevision($rev, $dir);
89        $this->assertEquals($revsexpectedpos, $revs);
90
91        $revs = $pagelog->getRelativeRevision($rev, -$dir);
92        $this->assertEquals($revsexpectedneg, $revs);
93    }
94
95    /**
96     * start at exact one before last revision of mailinglist page
97     *
98     */
99    function test_requestlastrevisions() {
100        $rev = 1361901536;
101        $dir = -1;
102        $revsexpectedlast = 1360110636;
103        $revsexpectedbeforelast = false;
104
105        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
106        $revs = $pagelog->getRelativeRevision($rev, $dir);
107        $this->assertEquals($revsexpectedlast, $revs);
108
109        $revs = $pagelog->getRelativeRevision($rev, 2 * $dir);
110        $this->assertEquals($revsexpectedbeforelast, $revs);
111    }
112
113    /**
114     * request existing rev and check cache
115     */
116    function test_requestrev_checkcache() {
117        $rev = 1362525359;
118        $dir = 1;
119        $revexpected = 1362525899;
120        $infoexpected = parseChangelogLine($this->logline);
121
122        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
123        $revfound = $pagelog->getRelativeRevision($rev, $dir);
124        $this->assertEquals($revexpected, $revfound);
125
126        //checked info returned from cache
127        $info = $pagelog->getRevisionInfo($revfound);
128        $this->assertEquals($infoexpected, $info);
129    }
130
131    /**
132     * request existing rev
133     */
134    function test_requestnextrev() {
135        $rev = 1362525899;
136
137        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
138
139        $dir = 1;
140        $revexpected = 1362525926;
141        $revfound = $pagelog->getRelativeRevision($rev, $dir);
142        $this->assertEquals($revexpected, $revfound);
143
144        $dir = 2;
145        $revexpected = 1362526039;
146        $revfound = $pagelog->getRelativeRevision($rev, $dir);
147        $this->assertEquals($revexpected, $revfound);
148
149        $dir = -1;
150        $revexpected = 1362525359;
151        $revfound = $pagelog->getRelativeRevision($rev, $dir);
152        $this->assertEquals($revexpected, $revfound);
153
154        $dir = -2;
155        $revexpected = 1362525145;
156        $revfound = $pagelog->getRelativeRevision($rev, $dir);
157        $this->assertEquals($revexpected, $revfound);
158    }
159
160    /**
161     * request existing rev with chucked reading
162     */
163    function test_requestnextrev_chuncked() {
164        $rev = 1362525899;
165
166        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
167
168        $dir = 1;
169        $revexpected = 1362525926;
170        $revfound = $pagelog->getRelativeRevision($rev, $dir);
171        $this->assertEquals($revexpected, $revfound);
172
173        $dir = 2;
174        $revexpected = 1362526039;
175        $revfound = $pagelog->getRelativeRevision($rev, $dir);
176        $this->assertEquals($revexpected, $revfound);
177
178        $dir = -1;
179        $revexpected = 1362525359;
180        $revfound = $pagelog->getRelativeRevision($rev, $dir);
181        $this->assertEquals($revexpected, $revfound);
182
183        $dir = -2;
184        $revexpected = 1362525145;
185        $revfound = $pagelog->getRelativeRevision($rev, $dir);
186        $this->assertEquals($revexpected, $revfound);
187    }
188
189
190    /**
191     * request existing rev with chucked reading, chunk size smaller than line length
192     */
193    function test_requestnextrev_chunkshorterthanlines() {
194        $rev = 1362525899;
195
196        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 20);
197
198        $dir = 1;
199        $revexpected = 1362525926;
200        $revfound = $pagelog->getRelativeRevision($rev, $dir);
201        $this->assertEquals($revexpected, $revfound);
202
203        $dir = 2;
204        $revexpected = 1362526039;
205        $revfound = $pagelog->getRelativeRevision($rev, $dir);
206        $this->assertEquals($revexpected, $revfound);
207
208        $dir = -1;
209        $revexpected = 1362525359;
210        $revfound = $pagelog->getRelativeRevision($rev, $dir);
211        $this->assertEquals($revexpected, $revfound);
212
213        $dir = -2;
214        $revexpected = 1362525145;
215        $revfound = $pagelog->getRelativeRevision($rev, $dir);
216        $this->assertEquals($revexpected, $revfound);
217    }
218
219    /**
220     * request existing rev
221     */
222    function test_requestnextfifthrev() {
223        $rev = 1362525899;
224        $dir = 5;
225        $revexpected = 1362526767;
226
227        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
228        $revfound = $pagelog->getRelativeRevision($rev, $dir);
229        $this->assertEquals($revexpected, $revfound);
230    }
231
232    /**
233     * request existing rev with chucked reading
234     */
235    function test_requestnextfifthrev_chuncked() {
236        $rev = 1362525899;
237        $dir = 5;
238        $revexpected = 1362526767;
239
240        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
241        $revfound = $pagelog->getRelativeRevision($rev, $dir);
242        $this->assertEquals($revexpected, $revfound);
243    }
244
245    /**
246     * request existing rev
247     */
248    function test_requestprevrev() {
249        $rev = 1362525899;
250        $dir1 = -1;
251        $dir5 = -5;
252        $revexpected1 = 1362525359;
253        $revexpected5 = 1360110636;
254
255        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
256        $revfound1 = $pagelog->getRelativeRevision($rev, $dir1);
257        $this->assertEquals($revexpected1, $revfound1);
258
259        $revfound5 = $pagelog->getRelativeRevision($rev, $dir5);
260        $this->assertEquals($revexpected5, $revfound5);
261    }
262
263    /**
264     * request existing rev with chucked reading
265     */
266    function test_requestprevrev_chuncked() {
267        $rev = 1362525899;
268        $dir1 = -1;
269        $dir5 = -5;
270        $revexpected1 = 1362525359;
271        $revexpected5 = 1360110636;
272
273        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
274        $revfound1 = $pagelog->getRelativeRevision($rev, $dir1);
275        $this->assertEquals($revexpected1, $revfound1);
276
277        $revfound5 = $pagelog->getRelativeRevision($rev, $dir5);
278        $this->assertEquals($revexpected5, $revfound5);
279    }
280
281    /**
282     * request after recentest version in changelog
283     */
284    function test_requestrecentestlogline_next() {
285        $rev = 1374261194;
286        $dir = 1;
287        $revexpected = false;
288
289        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
290        $revfound = $pagelog->getRelativeRevision($rev, $dir);
291        $this->assertEquals($revexpected, $revfound);
292    }
293
294    /**
295     * request after recentest version in changelog, with chuncked reading
296     */
297    function test_requestrecentestlogline_next_chuncked() {
298        $rev = 1374261194;
299        $dir = 1;
300        $revexpected = false;
301
302        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
303        $revfound = $pagelog->getRelativeRevision($rev, $dir);
304        $this->assertEquals($revexpected, $revfound);
305    }
306
307    /**
308     * request before current version
309     */
310    function test_requestrecentestlogline_prev() {
311        $rev = 1374261194;
312        $dir = -1;
313        $revexpected = 1371579614;
314
315        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
316        $revfound = $pagelog->getRelativeRevision($rev, $dir);
317        $this->assertEquals($revexpected, $revfound);
318    }
319
320    /**
321     * request before current version, with chuncked reading
322     */
323    function test_requestrecentestlogline_prev_chuncked() {
324        $rev = 1374261194;
325        $dir = -1;
326        $revexpected = 1371579614;
327
328        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
329        $revfound = $pagelog->getRelativeRevision($rev, $dir);
330        $this->assertEquals($revexpected, $revfound);
331    }
332
333    /**
334     * Request negative revision
335     * looks in positive direction, so it catches the oldest revision
336     */
337    function test_negativerev_posdir() {
338        $rev = -10;
339        $dir = 1;
340        $revexpected = 1360110636;
341
342        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
343        $revfound = $pagelog->getRelativeRevision($rev, $dir);
344        $this->assertEquals($revexpected, $revfound);
345    }
346
347    /**
348     * Request negative revision
349     * looks in negative direction, but there is nothing
350     */
351    function test_negativerev_negdir() {
352        $rev = -10;
353        $dir = -1;
354        $revexpected = false;
355
356        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
357        $revfound = $pagelog->getRelativeRevision($rev, $dir);
358        $this->assertEquals($revexpected, $revfound);
359    }
360
361    /**
362     * Start at non existing revision somewhere between existing revisions
363     */
364    function test_startatnotexistingrev_next() {
365        $rev = 1362525890;
366        $dir = 1;
367        $revexpected = 1362525899;
368
369        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
370        $revfound = $pagelog->getRelativeRevision($rev, $dir);
371        $this->assertEquals($revexpected, $revfound);
372    }
373
374    /**
375     * Start at non existing revision somewhere between existing revisions
376     */
377    function test_startatnotexistingrev_prev() {
378        $rev = 1362525890;
379        $dir = -1;
380        $revexpected = 1362525359;
381
382        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
383        $revfound = $pagelog->getRelativeRevision($rev, $dir);
384        $this->assertEquals($revexpected, $revfound);
385    }
386
387    function test_iscurrentpagerevision() {
388        $rev = 1385051947;
389        $currentexpected = true;
390
391        //set a known timestamp
392        touch(wikiFN($this->pageid), $rev);
393
394        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
395        $current = $pagelog->isCurrentRevision($rev);
396        $this->assertEquals($currentexpected, $current);
397    }
398
399    function test_isnotcurrentpagerevision() {
400        $rev = 1385051947;
401        $not_current_rev = $rev - 1;
402        $currentexpected = false;
403
404        //set a known timestamp
405        touch(wikiFN($this->pageid), $rev);
406
407        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
408        $current = $pagelog->isCurrentRevision($not_current_rev);
409        $this->assertEquals($currentexpected, $current);
410    }
411
412    function test_notexistingcurrentpage() {
413        $rev = 1385051947;
414        $currentexpected = false;
415
416        $pagelog = new PageChangeLog('nonexistingpage', $chunk_size = 8192);
417        $current = $pagelog->isCurrentRevision($rev);
418        $this->assertEquals($currentexpected, $current);
419    }
420}
421