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