xref: /dokuwiki/_test/tests/inc/changelog_getrevisions.test.php (revision 3dc402767b9058811762f67a7a3a21d50e81a65c)
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        $revsexpected = array();
51
52        $pagelog = new PageChangeLog($id, $chunk_size = 8192);
53        $revs = $pagelog->getRevisions($first, $num);
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        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 20);
75        $revs = $pagelog->getRevisions($first, $num);
76        $this->assertEquals($revsexpected, $revs);
77    }
78
79    /**
80     * request first recentest revision
81     * (so skips first line which belongs to the current existing page)
82     */
83    function test_requestonebutlastrev() {
84        $first = 1;
85        $num = 1;
86        $revsexpected = array($this->revsexpected[2]);
87
88        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
89        $revs = $pagelog->getRevisions($first, $num);
90        $this->assertEquals($revsexpected, $revs);
91
92        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
93        $revs = $pagelog->getRevisions($first, $num);
94        $this->assertEquals($revsexpected, $revs);
95
96        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 20);
97        $revs = $pagelog->getRevisions($first, $num);
98        $this->assertEquals($revsexpected, $revs);
99    }
100
101    /**
102     * request first recentest revision
103     * (so skips first line of current existing page)
104     */
105    function test_requestrevswithoffset() {
106        $first = 10;
107        $num = 5;
108        $revsexpected = array_slice($this->revsexpected, $first + 1, $num);
109
110        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
111        $revs = $pagelog->getRevisions($first, $num);
112        $this->assertEquals($revsexpected, $revs);
113
114        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
115        $revs = $pagelog->getRevisions($first, $num);
116        $this->assertEquals($revsexpected, $revs);
117
118        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 20);
119        $revs = $pagelog->getRevisions($first, $num);
120        $this->assertEquals($revsexpected, $revs);
121    }
122
123    /**
124     * first = -1 requests recentest logline, without skipping
125     */
126    function test_requestrecentestlogline() {
127        $first = -1;
128        $num = 1;
129        $revsexpected = array($this->revsexpected[0]);
130
131        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
132        $revs = $pagelog->getRevisions($first, $num);
133        $this->assertEquals($revsexpected, $revs);
134
135        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
136        $revs = $pagelog->getRevisions($first, $num);
137        $this->assertEquals($revsexpected, $revs);
138    }
139
140    /**
141     * chunck size = 0 skips chuncked loading
142     */
143    function test_wholefile() {
144        $first = 0;
145        $num = 1000;
146        $revsexpected = array_slice($this->revsexpected, 1);
147
148        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 0);
149        $revs = $pagelog->getRevisions($first, $num);
150        $this->assertEquals($revsexpected, $revs);
151    }
152
153    /**
154     * Negative range returns no result
155     */
156    function test_negativenum() {
157        $first = 0;
158        $num = -10;
159        $revsexpected = array();
160
161        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
162        $revs = $pagelog->getRevisions($first, $num);
163        $this->assertEquals($revsexpected, $revs);
164
165        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
166        $revs = $pagelog->getRevisions($first, $num);
167        $this->assertEquals($revsexpected, $revs);
168    }
169
170    /**
171     * Negative range returns no result
172     */
173    function test_negativennumoffset() {
174        $first = 2;
175        $num = -10;
176        $revsexpected = array();
177
178        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
179        $revs = $pagelog->getRevisions($first, $num);
180        $this->assertEquals($revsexpected, $revs);
181
182        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
183        $revs = $pagelog->getRevisions($first, $num);
184        $this->assertEquals($revsexpected, $revs);
185    }
186
187    /**
188     * zero range returns no result
189     */
190    function test_zeronum() {
191        $first = 5;
192        $num = 0;
193        $revsexpected = array();
194
195        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
196        $revs = $pagelog->getRevisions($first, $num);
197        $this->assertEquals($revsexpected, $revs);
198
199        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
200        $revs = $pagelog->getRevisions($first, $num);
201        $this->assertEquals($revsexpected, $revs);
202    }
203
204    /**
205     * get oldest revisions
206     */
207    function test_requestlargeoffset() {
208        $first = 22;
209        $num = 50;
210        $revsexpected = array_slice($this->revsexpected, $first + 1);
211
212        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
213        $revs = $pagelog->getRevisions($first, $num);
214        $this->assertEquals($revsexpected, $revs);
215    }
216
217    /**
218     * request with too large offset and range
219     */
220    function test_requesttoolargenumberrevs() {
221        $first = 50;
222        $num = 50;
223        $revsexpected = array();
224
225        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
226        $revs = $pagelog->getRevisions($first, $num);
227        $this->assertEquals($revsexpected, $revs);
228    }
229
230}