xref: /dokuwiki/_test/tests/inc/changelog_getrelativerevision.test.php (revision 4c3263af6652b0a479e2c742914eb67a7929b9b9)
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
113     */
114    function test_requestrev() {
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        //checked info returned from cache
124        $info = $pagelog->getRevisionInfo($revfound);
125        $this->assertEquals($infoexpected, $info);
126    }
127
128    /**
129     * request existing rev with chucked reading
130     */
131    function test_requestnextrev_chuncked() {
132        $rev = 1362525899;
133        $dir = 1;
134        $revexpected = 1362525926;
135
136        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
137        $revfound = $pagelog->getRelativeRevision($rev, $dir);
138        $this->assertEquals($revexpected, $revfound);
139    }
140
141    /**
142     * request existing rev
143     */
144    function test_requestnextfifthrev() {
145        $rev = 1362525899;
146        $dir = 5;
147        $revexpected = 1362526767;
148
149        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
150        $revfound = $pagelog->getRelativeRevision($rev, $dir);
151        $this->assertEquals($revexpected, $revfound);
152    }
153
154    /**
155     * request existing rev with chucked reading
156     */
157    function test_requestnextfifthrev_chuncked() {
158        $rev = 1362525899;
159        $dir = 5;
160        $revexpected = 1362526767;
161
162        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
163        $revfound = $pagelog->getRelativeRevision($rev, $dir);
164        $this->assertEquals($revexpected, $revfound);
165    }
166
167    /**
168     * request existing rev
169     */
170    function test_requestprevrev() {
171        $rev = 1362525899;
172        $dir1 = -1;
173        $dir5 = -5;
174        $revexpected1 = 1362525359;
175        $revexpected5 = 1360110636;
176
177        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
178        $revfound1 = $pagelog->getRelativeRevision($rev, $dir1);
179        $this->assertEquals($revexpected1, $revfound1);
180
181        $revfound5 = $pagelog->getRelativeRevision($rev, $dir5);
182        $this->assertEquals($revexpected5, $revfound5);
183    }
184
185    /**
186     * request existing rev with chucked reading
187     */
188    function test_requestprevrev_chuncked() {
189        $rev = 1362525899;
190        $dir1 = -1;
191        $dir5 = -5;
192        $revexpected1 = 1362525359;
193        $revexpected5 = 1360110636;
194
195        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
196        $revfound1 = $pagelog->getRelativeRevision($rev, $dir1);
197        $this->assertEquals($revexpected1, $revfound1);
198
199        $revfound5 = $pagelog->getRelativeRevision($rev, $dir5);
200        $this->assertEquals($revexpected5, $revfound5);
201    }
202
203    /**
204     * request after recentest version in changelog
205     */
206    function test_requestrecentestlogline_next() {
207        $rev = 1374261194;
208        $dir = 1;
209        $revexpected = false;
210
211        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
212        $revfound = $pagelog->getRelativeRevision($rev, $dir);
213        $this->assertEquals($revexpected, $revfound);
214    }
215
216    /**
217     * request after recentest version in changelog, with chuncked reading
218     */
219    function test_requestrecentestlogline_next_chuncked() {
220        $rev = 1374261194;
221        $dir = 1;
222        $revexpected = false;
223
224        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
225        $revfound = $pagelog->getRelativeRevision($rev, $dir);
226        $this->assertEquals($revexpected, $revfound);
227    }
228
229    /**
230     * request before current version
231     */
232    function test_requestrecentestlogline_prev() {
233        $rev = 1374261194;
234        $dir = -1;
235        $revexpected = 1371579614;
236
237        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
238        $revfound = $pagelog->getRelativeRevision($rev, $dir);
239        $this->assertEquals($revexpected, $revfound);
240    }
241
242    /**
243     * request before current version, with chuncked reading
244     */
245    function test_requestrecentestlogline_prev_chuncked() {
246        $rev = 1374261194;
247        $dir = -1;
248        $revexpected = 1371579614;
249
250        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
251        $revfound = $pagelog->getRelativeRevision($rev, $dir);
252        $this->assertEquals($revexpected, $revfound);
253    }
254
255    /**
256     * Request negative revision
257     * looks in positive direction, so it catches the oldest revision
258     */
259    function test_negativerev_posdir() {
260        $rev = -10;
261        $dir = 1;
262        $revexpected = 1360110636;
263
264        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
265        $revfound = $pagelog->getRelativeRevision($rev, $dir);
266        $this->assertEquals($revexpected, $revfound);
267    }
268
269    /**
270     * Request negative revision
271     * looks in negative direction, but there is nothing
272     */
273    function test_negativerev_negdir() {
274        $rev = -10;
275        $dir = -1;
276        $revexpected = false;
277
278        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
279        $revfound = $pagelog->getRelativeRevision($rev, $dir);
280        $this->assertEquals($revexpected, $revfound);
281    }
282
283    /**
284     * Start at non existing revision somewhere between existing revisions
285     */
286    function test_startatnotexistingrev_next() {
287        $rev = 1362525890;
288        $dir = 1;
289        $revexpected = 1362525899;
290
291        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
292        $revfound = $pagelog->getRelativeRevision($rev, $dir);
293        $this->assertEquals($revexpected, $revfound);
294    }
295
296    /**
297     * Start at non existing revision somewhere between existing revisions
298     */
299    function test_startatnotexistingrev_prev() {
300        $rev = 1362525890;
301        $dir = -1;
302        $revexpected = 1362525359;
303
304        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
305        $revfound = $pagelog->getRelativeRevision($rev, $dir);
306        $this->assertEquals($revexpected, $revfound);
307    }
308
309    function test_iscurrentpagerevision() {
310        $rev = 1385051947;
311        $currentexpected = true;
312
313        //set a known timestamp
314        touch(wikiFN($this->pageid), $rev);
315
316        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
317        $current = $pagelog->isCurrentRevision($rev);
318        $this->assertEquals($currentexpected, $current);
319    }
320
321    function test_isnotcurrentpagerevision() {
322        $rev = 1385051947;
323        $not_current_rev = $rev - 1;
324        $currentexpected = false;
325
326        //set a known timestamp
327        touch(wikiFN($this->pageid), $rev);
328
329        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
330        $current = $pagelog->isCurrentRevision($not_current_rev);
331        $this->assertEquals($currentexpected, $current);
332    }
333
334    function test_notexistingcurrentpage() {
335        $rev = 1385051947;
336        $currentexpected = false;
337
338        $pagelog = new PageChangeLog('nonexistingpage', $chunk_size = 8192);
339        $current = $pagelog->isCurrentRevision($rev);
340        $this->assertEquals($currentexpected, $current);
341    }
342}