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