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