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