xref: /dokuwiki/_test/tests/inc/changelog_getrevisions.test.php (revision 4c3263af6652b0a479e2c742914eb67a7929b9b9)
1<?php
2/**
3 * Tests for requesting revisions of a page with getRevisions()
4 *
5 * This class uses the files:
6 * - data/pages/mailinglist.txt
7 * - data/meta/mailinglist.changes
8 */
9class changelog_getrevisions_test extends DokuWikiTest {
10
11    /**
12     * $first counts inclusive zero, after the current page
13     */
14    private $revsexpected = array(
15        1374261194, //current page
16        1371579614, 1368622240, // revisions, corresponds to respectively $first = 0 and 1
17        1368622195, 1368622152,
18        1368612599, 1368612506,
19        1368609772, 1368575634,
20        1363436892, 1362527164,
21        1362527046, 1362526861, //10 and 11
22        1362526767, 1362526167,
23        1362526119, 1362526039,
24        1362525926, 1362525899,
25        1362525359, 1362525145,
26        1362524799, 1361901536, //20 and 21
27        1360110636
28    );
29    private $pageid = 'mailinglist';
30
31    function setup() {
32        parent::setup();
33        global $cache_revinfo;
34        $cache =& $cache_revinfo;
35        if(isset($cache['nonexist'])) {
36            unset($cache['nonexist']);
37        }
38        if(isset($cache['mailinglist'])) {
39            unset($cache['mailinglist']);
40        }
41    }
42
43    /**
44     * no nonexist.changes meta file available
45     */
46    function test_changemetadatanotexists() {
47        $first = 0;
48        $num = 1;
49        $id = 'nonexist';
50
51        $pagelog = new PageChangeLog($id, $chunk_size = 8192);
52        $revs = $pagelog->getRevisions($first, $num);
53        $revsexpected = array();
54        $this->assertEquals($revsexpected, $revs);
55    }
56
57    /**
58     * request first recentest revision
59     * (so skips first line which belongs to the current existing page)
60     */
61    function test_requestlastrev() {
62        $first = 0;
63        $num = 1;
64        $revsexpected = array($this->revsexpected[1]);
65
66        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
67        $revs = $pagelog->getRevisions($first, $num);
68        $this->assertEquals($revsexpected, $revs);
69
70        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
71        $revs = $pagelog->getRevisions($first, $num);
72        $this->assertEquals($revsexpected, $revs);
73    }
74
75    /**
76     * request first recentest revision
77     * (so skips first line which belongs to the current existing page)
78     */
79    function test_requestonebutlastrev() {
80        $first = 1;
81        $num = 1;
82        $revsexpected = array($this->revsexpected[2]);
83
84        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
85        $revs = $pagelog->getRevisions($first, $num);
86        $this->assertEquals($revsexpected, $revs);
87
88        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
89        $revs = $pagelog->getRevisions($first, $num);
90        $this->assertEquals($revsexpected, $revs);
91    }
92
93    /**
94     * request first recentest revision
95     * (so skips first line of current existing page)
96     */
97    function test_requestrevswithoffset() {
98        $first = 10;
99        $num = 5;
100        $revsexpected = array_slice($this->revsexpected, $first + 1, $num);
101
102        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
103        $revs = $pagelog->getRevisions($first, $num);
104        $this->assertEquals($revsexpected, $revs);
105
106        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
107        $revs = $pagelog->getRevisions($first, $num);
108        $this->assertEquals($revsexpected, $revs);
109    }
110
111    /**
112     * first = -1 requests recentest logline, without skipping
113     */
114    function test_requestrecentestlogline() {
115        $first = -1;
116        $num = 1;
117        $revsexpected = array($this->revsexpected[0]);
118
119        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
120        $revs = $pagelog->getRevisions($first, $num);
121        $this->assertEquals($revsexpected, $revs);
122
123        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
124        $revs = $pagelog->getRevisions($first, $num);
125        $this->assertEquals($revsexpected, $revs);
126    }
127
128    /**
129     * chunck size = 0 skips chuncked loading
130     */
131    function test_wholefile() {
132        $first = 0;
133        $num = 1000;
134        $revsexpected = array_slice($this->revsexpected, 1);
135
136        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 0);
137        $revs = $pagelog->getRevisions($first, $num);
138        $this->assertEquals($revsexpected, $revs);
139    }
140
141    /**
142     * Negative range returns no result
143     */
144    function test_negativenum() {
145        $first = 0;
146        $num = -10;
147        $revsexpected = array();
148
149        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
150        $revs = $pagelog->getRevisions($first, $num);
151        $this->assertEquals($revsexpected, $revs);
152
153        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
154        $revs = $pagelog->getRevisions($first, $num);
155        $this->assertEquals($revsexpected, $revs);
156    }
157
158    /**
159     * Negative range returns no result
160     */
161    function test_negativennumoffset() {
162        $first = 2;
163        $num = -10;
164        $revsexpected = array();
165
166        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
167        $revs = $pagelog->getRevisions($first, $num);
168        $this->assertEquals($revsexpected, $revs);
169
170        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
171        $revs = $pagelog->getRevisions($first, $num);
172        $this->assertEquals($revsexpected, $revs);
173    }
174
175    /**
176     * zero range returns no result
177     */
178    function test_zeronum() {
179        $first = 5;
180        $num = 0;
181        $revsexpected = array();
182
183        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
184        $revs = $pagelog->getRevisions($first, $num);
185        $this->assertEquals($revsexpected, $revs);
186
187        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
188        $revs = $pagelog->getRevisions($first, $num);
189        $this->assertEquals($revsexpected, $revs);
190    }
191
192    /**
193     * get oldest revisions
194     */
195    function test_requestlargeoffset() {
196        $first = 22;
197        $num = 50;
198        $revsexpected = array_slice($this->revsexpected, $first + 1);
199
200        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
201        $revs = $pagelog->getRevisions($first, $num);
202        $this->assertEquals($revsexpected, $revs);
203    }
204
205    /**
206     * request with too large offset and range
207     */
208    function test_requesttoolargenumberrevs() {
209        $first = 50;
210        $num = 50;
211        $revsexpected = array();
212
213        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
214        $revs = $pagelog->getRevisions($first, $num);
215        $this->assertEquals($revsexpected, $revs);
216    }
217
218}