xref: /dokuwiki/_test/tests/inc/changelog_getRevisionsAround.test.php (revision ddd7c157dce95be9083a32a5c95c29b0690dff1b)
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_getrevisionsaround_test extends DokuWikiTest {
10
11    /**
12     * list of revisions in mailinglist.changes
13     */
14    private $revsexpected = array(
15        1374261194, //current page
16        1371579614, 1368622240,
17        1368622195, 1368622152,
18        1368612599, 1368612506,
19        1368609772, 1368575634,
20        1363436892, 1362527164,
21        1362527046, 1362526861,
22        1362526767, 1362526167,
23        1362526119, 1362526039,
24        1362525926, 1362525899,
25        1362525359, 1362525145,
26        1362524799, 1361901536,
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        $rev1 = 1362526767;
48        $rev2 = 1362527164;
49        $max = 50;
50        $id = 'nonexist';
51        $revsexpected = array(array(), array());
52
53        $pagelog = new PageChangeLog($id, $chunk_size = 8192);
54        $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max);
55        $this->assertEquals($revsexpected, $revs);
56    }
57
58    /**
59     * Surrounding revisions of rev1 and rev2 overlaps
60     */
61    function test_request_overlapping() {
62        $rev1 = 1362526767;
63        $rev2 = 1362527164;
64        $max = 10;
65        $revsexpected = array(
66            array_slice($this->revsexpected, 8, 11),
67            array_slice($this->revsexpected, 5, 11)
68        );
69
70        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
71        $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max);
72        $this->assertEquals($revsexpected, $revs);
73
74        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
75        $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max);
76        $this->assertEquals($revsexpected, $revs);
77
78        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 20);
79        $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max);
80        $this->assertEquals($revsexpected, $revs);
81    }
82
83    /**
84     * Surrounding revisions of rev1 and rev2 don't overlap.
85     */
86    function test_request_non_overlapping() {
87        $rev1 = 1362525899;
88        $rev2 = 1368612599;
89        $max = 10;
90        $revsexpected = array(
91            array_slice($this->revsexpected, 13, 11),
92            array_slice($this->revsexpected, 0, 11)
93        );
94
95        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
96        $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max);
97        $this->assertEquals($revsexpected, $revs);
98
99        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
100        $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max);
101        $this->assertEquals($revsexpected, $revs);
102
103        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 20);
104        $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max);
105        $this->assertEquals($revsexpected, $revs);
106    }
107
108    /**
109     * rev1 and rev2 are at start and end of the changelog.
110     * Should return still a number of revisions equal to max
111     */
112    function test_request_first_last() {
113        $rev1 = 1360110636;
114        $rev2 = 1374261194;
115        $max = 10;
116        $revsexpected = array(
117            array_slice($this->revsexpected, 13, 11),
118            array_slice($this->revsexpected, 0, 11)
119        );
120
121        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
122        $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max);
123        $this->assertEquals($revsexpected, $revs);
124
125        //todo: number of revisions on the left side is not (yet) completed until max number
126        $revsexpected = array(
127            array_slice($this->revsexpected, 18, 6),
128            array_slice($this->revsexpected, 0, 11)
129        );
130        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
131        $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max);
132        $this->assertEquals($revsexpected, $revs);
133
134        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 20);
135        $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max);
136        $this->assertEquals($revsexpected, $revs);
137    }
138
139
140    /**
141     * Number of requested revisions is larger than available revisions,
142     * so returns whole log
143     */
144    function test_request_wholelog() {
145        $rev1 = 1362525899;
146        $rev2 = 1368612599;
147        $max = 50;
148        $revsexpected = array($this->revsexpected, $this->revsexpected);
149
150        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
151        $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max);
152        $this->assertEquals($revsexpected, $revs);
153
154        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
155        $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max);
156        $this->assertEquals($revsexpected, $revs);
157
158        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 20);
159        $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max);
160        $this->assertEquals($revsexpected, $revs);
161    }
162
163    /**
164     * When rev1 > rev2, their order is changed
165     */
166    function test_request_wrong_order_revs() {
167        $rev1 = 1362527164;
168        $rev2 = 1362526767;
169        $max = 10;
170        $revsexpected = array(
171            array_slice($this->revsexpected, 8, 11),
172            array_slice($this->revsexpected, 5, 11)
173        );
174
175        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
176        $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max);
177        $this->assertEquals($revsexpected, $revs);
178
179        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512);
180        $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max);
181        $this->assertEquals($revsexpected, $revs);
182
183        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 20);
184        $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max);
185        $this->assertEquals($revsexpected, $revs);
186    }
187
188}