xref: /dokuwiki/_test/tests/inc/common_saveWikiText.test.php (revision 6072486de81281681338816816f1c3568ee987ce)
1023953f0SAndreas Gohr<?php
2023953f0SAndreas Gohr
3023953f0SAndreas Gohrclass common_saveWikiText_test extends DokuWikiTest {
4023953f0SAndreas Gohr
5023953f0SAndreas Gohr    /**
6023953f0SAndreas Gohr     * Execute a whole bunch of saves on the same page and check the results
7023953f0SAndreas Gohr     */
8023953f0SAndreas Gohr    function test_savesequence() {
9023953f0SAndreas Gohr        global $REV;
10023953f0SAndreas Gohr
11023953f0SAndreas Gohr        $page = 'page';
12023953f0SAndreas Gohr        $file = wikiFN($page);
13023953f0SAndreas Gohr
14023953f0SAndreas Gohr        // create the page
15023953f0SAndreas Gohr        $this->assertFileNotExists($file);
16023953f0SAndreas Gohr        saveWikiText($page, 'teststring', 'first save', false);
17023953f0SAndreas Gohr        $this->assertFileExists($file);
18023953f0SAndreas Gohr        $lastmod = filemtime($file);
19023953f0SAndreas Gohr
20023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
21023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
22023953f0SAndreas Gohr        $this->assertEquals(1, count($revisions));
23023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
24023953f0SAndreas Gohr        $this->assertEquals('first save', $revinfo['sum']);
25023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
264b5aebc1SGerrit Uitslag        $this->assertEquals(10, $revinfo['sizechange']);
27023953f0SAndreas Gohr
28023953f0SAndreas Gohr        sleep(1); // wait for new revision ID
29023953f0SAndreas Gohr
30023953f0SAndreas Gohr        // save with same content should be ignored
31023953f0SAndreas Gohr        saveWikiText($page, 'teststring', 'second save', false);
32023953f0SAndreas Gohr        clearstatcache(false, $file);
33023953f0SAndreas Gohr        $this->assertEquals($lastmod, filemtime($file));
34023953f0SAndreas Gohr
35023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
36023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
37023953f0SAndreas Gohr        $this->assertEquals(1, count($revisions));
38023953f0SAndreas Gohr
39023953f0SAndreas Gohr        // update the page with new text
404b5aebc1SGerrit Uitslag        saveWikiText($page, 'teststring2long', 'third save', false);
41023953f0SAndreas Gohr        clearstatcache(false, $file);
42023953f0SAndreas Gohr        $newmod = filemtime($file);
43023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
44023953f0SAndreas Gohr        $lastmod = $newmod;
45023953f0SAndreas Gohr
46023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
47023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
48023953f0SAndreas Gohr        $this->assertEquals(2, count($revisions));
49023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
50023953f0SAndreas Gohr        $this->assertEquals('third save', $revinfo['sum']);
51023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
524b5aebc1SGerrit Uitslag        $this->assertEquals(5, $revinfo['sizechange']);
53023953f0SAndreas Gohr
54023953f0SAndreas Gohr        sleep(1); // wait for new revision ID
55023953f0SAndreas Gohr
56023953f0SAndreas Gohr        // add a minor edit (unauthenticated)
574b5aebc1SGerrit Uitslag        saveWikiText($page, 'teststring3long', 'fourth save', true);
58023953f0SAndreas Gohr        clearstatcache(false, $file);
59023953f0SAndreas Gohr        $newmod = filemtime($file);
60023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
61023953f0SAndreas Gohr        $lastmod = $newmod;
62023953f0SAndreas Gohr
63023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
64023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
65023953f0SAndreas Gohr        $this->assertEquals(3, count($revisions));
66023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
67023953f0SAndreas Gohr        $this->assertEquals('fourth save', $revinfo['sum']);
68023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
694b5aebc1SGerrit Uitslag        $this->assertEquals(0, $revinfo['sizechange']);
70023953f0SAndreas Gohr
71023953f0SAndreas Gohr        sleep(1); // wait for new revision ID
72023953f0SAndreas Gohr
73023953f0SAndreas Gohr        // add a minor edit (authenticated)
74023953f0SAndreas Gohr        $_SERVER['REMOTE_USER'] = 'user';
75023953f0SAndreas Gohr        saveWikiText($page, 'teststring4', 'fifth save', true);
76023953f0SAndreas Gohr        clearstatcache(false, $file);
77023953f0SAndreas Gohr        $newmod = filemtime($file);
78023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
79023953f0SAndreas Gohr        $lastmod = $newmod;
80023953f0SAndreas Gohr
81023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
82023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
83023953f0SAndreas Gohr        $this->assertEquals(4, count($revisions));
84023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
85023953f0SAndreas Gohr        $this->assertEquals('fifth save', $revinfo['sum']);
86023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_MINOR_EDIT, $revinfo['type']);
874b5aebc1SGerrit Uitslag        $this->assertEquals(-4, $revinfo['sizechange']);
88023953f0SAndreas Gohr
89023953f0SAndreas Gohr        sleep(1); // wait for new revision ID
90023953f0SAndreas Gohr
91023953f0SAndreas Gohr        // delete
92023953f0SAndreas Gohr        saveWikiText($page, '', 'sixth save', false);
93023953f0SAndreas Gohr        clearstatcache(false, $file);
94023953f0SAndreas Gohr        $this->assertFileNotExists($file);
95023953f0SAndreas Gohr
96023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
97023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
98023953f0SAndreas Gohr        $this->assertEquals(5, count($revisions));
99023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
100023953f0SAndreas Gohr        $this->assertEquals('sixth save', $revinfo['sum']);
101023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_DELETE, $revinfo['type']);
1024b5aebc1SGerrit Uitslag        $this->assertEquals(-11, $revinfo['sizechange']);
103023953f0SAndreas Gohr
104023953f0SAndreas Gohr        sleep(1); // wait for new revision ID
105023953f0SAndreas Gohr
106023953f0SAndreas Gohr        // restore
107023953f0SAndreas Gohr        $REV = $lastmod;
108023953f0SAndreas Gohr        saveWikiText($page, 'teststring4', 'seventh save', true);
109023953f0SAndreas Gohr        clearstatcache(false, $file);
110023953f0SAndreas Gohr        $this->assertFileExists($file);
111023953f0SAndreas Gohr        $newmod = filemtime($file);
112023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
113023953f0SAndreas Gohr        $lastmod = $newmod;
114023953f0SAndreas Gohr
115023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
116023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
117023953f0SAndreas Gohr        $this->assertEquals(6, count($revisions));
118023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
119023953f0SAndreas Gohr        $this->assertEquals('seventh save', $revinfo['sum']);
120023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_REVERT, $revinfo['type']);
121023953f0SAndreas Gohr        $this->assertEquals($REV, $revinfo['extra']);
1224b5aebc1SGerrit Uitslag        $this->assertEquals(11, $revinfo['sizechange']);
123023953f0SAndreas Gohr        $REV = '';
124023953f0SAndreas Gohr
125023953f0SAndreas Gohr        sleep(1); // wait for new revision ID
126023953f0SAndreas Gohr
127023953f0SAndreas Gohr        // create external edit
128023953f0SAndreas Gohr        file_put_contents($file, 'teststring5');
129023953f0SAndreas Gohr
130023953f0SAndreas Gohr        sleep(1); // wait for new revision ID
131023953f0SAndreas Gohr
132023953f0SAndreas Gohr        // save on top of external edit
133023953f0SAndreas Gohr        saveWikiText($page, 'teststring6', 'eigth save', false);
134023953f0SAndreas Gohr        clearstatcache(false, $file);
135023953f0SAndreas Gohr        $newmod = filemtime($file);
136023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
137023953f0SAndreas Gohr        $lastmod = $newmod;
138023953f0SAndreas Gohr
139023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
140023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
141023953f0SAndreas Gohr        $this->assertEquals(8, count($revisions)); // two more revisions now!
142023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
143023953f0SAndreas Gohr        $this->assertEquals('eigth save', $revinfo['sum']);
144023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
1454b5aebc1SGerrit Uitslag        $this->assertEquals(0, $revinfo['sizechange']);
146023953f0SAndreas Gohr
147023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[1]);
148023953f0SAndreas Gohr        $this->assertEquals('external edit', $revinfo['sum']);
149023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
1504b5aebc1SGerrit Uitslag        $this->assertEquals(0, $revinfo['sizechange']);
151023953f0SAndreas Gohr
152023953f0SAndreas Gohr    }
153*6072486dSGerrit Uitslag
154*6072486dSGerrit Uitslag    /**
155*6072486dSGerrit Uitslag     * Execute a whole bunch of saves on the same page and check the results
156*6072486dSGerrit Uitslag     */
157*6072486dSGerrit Uitslag    function test_savesequencedeleteexternalrevision() {
158*6072486dSGerrit Uitslag        $page = 'page2';
159*6072486dSGerrit Uitslag        $file = wikiFN($page);
160*6072486dSGerrit Uitslag
161*6072486dSGerrit Uitslag        // create the page
162*6072486dSGerrit Uitslag        $this->assertFileNotExists($file);
163*6072486dSGerrit Uitslag        saveWikiText($page, 'teststring', 'first save', false);
164*6072486dSGerrit Uitslag        $this->assertFileExists($file);
165*6072486dSGerrit Uitslag        $lastmod = filemtime($file);
166*6072486dSGerrit Uitslag
167*6072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
168*6072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
169*6072486dSGerrit Uitslag        $this->assertEquals(1, count($revisions));
170*6072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
171*6072486dSGerrit Uitslag        $this->assertEquals('first save', $revinfo['sum']);
172*6072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
173*6072486dSGerrit Uitslag        $this->assertEquals(10, $revinfo['sizechange']);
174*6072486dSGerrit Uitslag
175*6072486dSGerrit Uitslag        sleep(1); // wait for new revision ID
176*6072486dSGerrit Uitslag
177*6072486dSGerrit Uitslag        // delete
178*6072486dSGerrit Uitslag        saveWikiText($page, '', 'second save', false);
179*6072486dSGerrit Uitslag        clearstatcache(false, $file);
180*6072486dSGerrit Uitslag        $this->assertFileNotExists($file);
181*6072486dSGerrit Uitslag
182*6072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
183*6072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
184*6072486dSGerrit Uitslag        $this->assertEquals(2, count($revisions));
185*6072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
186*6072486dSGerrit Uitslag        $this->assertEquals('second save', $revinfo['sum']);
187*6072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_DELETE, $revinfo['type']);
188*6072486dSGerrit Uitslag        $this->assertEquals(-10, $revinfo['sizechange']);
189*6072486dSGerrit Uitslag
190*6072486dSGerrit Uitslag        sleep(1); // wait for new revision ID
191*6072486dSGerrit Uitslag
192*6072486dSGerrit Uitslag        // create external edit
193*6072486dSGerrit Uitslag        file_put_contents($file, 'teststring5');
194*6072486dSGerrit Uitslag
195*6072486dSGerrit Uitslag        sleep(1); // wait for new revision ID
196*6072486dSGerrit Uitslag
197*6072486dSGerrit Uitslag        // save on top of external edit
198*6072486dSGerrit Uitslag        saveWikiText($page, 'teststring6', 'third save', false);
199*6072486dSGerrit Uitslag        clearstatcache(false, $file);
200*6072486dSGerrit Uitslag
201*6072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
202*6072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
203*6072486dSGerrit Uitslag        $this->assertEquals(4, count($revisions)); // two more revisions now!
204*6072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
205*6072486dSGerrit Uitslag        $this->assertEquals('third save', $revinfo['sum']);
206*6072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
207*6072486dSGerrit Uitslag        $this->assertEquals(0, $revinfo['sizechange']);
208*6072486dSGerrit Uitslag
209*6072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[1]);
210*6072486dSGerrit Uitslag        $this->assertEquals('external edit', $revinfo['sum']);
211*6072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
212*6072486dSGerrit Uitslag        $this->assertEquals(11, $revinfo['sizechange']);
213*6072486dSGerrit Uitslag
214*6072486dSGerrit Uitslag    }
215*6072486dSGerrit Uitslag
216*6072486dSGerrit Uitslag    /**
217*6072486dSGerrit Uitslag     * Execute a whole bunch of saves on the same page and check the results
218*6072486dSGerrit Uitslag     */
219*6072486dSGerrit Uitslag    function test_saveexternalasfirst() {
220*6072486dSGerrit Uitslag        $page = 'page3';
221*6072486dSGerrit Uitslag        $file = wikiFN($page);
222*6072486dSGerrit Uitslag
223*6072486dSGerrit Uitslag        // create the page
224*6072486dSGerrit Uitslag        $this->assertFileNotExists($file);
225*6072486dSGerrit Uitslag
226*6072486dSGerrit Uitslag        // create external edit
227*6072486dSGerrit Uitslag        file_put_contents($file, 'teststring');
228*6072486dSGerrit Uitslag
229*6072486dSGerrit Uitslag        sleep(1); // wait for new revision ID
230*6072486dSGerrit Uitslag
231*6072486dSGerrit Uitslag        // save on top of external edit
232*6072486dSGerrit Uitslag        saveWikiText($page, 'teststring6', 'first save', false);
233*6072486dSGerrit Uitslag        clearstatcache(false, $file);
234*6072486dSGerrit Uitslag
235*6072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
236*6072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
237*6072486dSGerrit Uitslag        $this->assertEquals(2, count($revisions)); // two more revisions now!
238*6072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
239*6072486dSGerrit Uitslag        $this->assertEquals('first save', $revinfo['sum']);
240*6072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
241*6072486dSGerrit Uitslag        $this->assertEquals(1, $revinfo['sizechange']);
242*6072486dSGerrit Uitslag
243*6072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[1]);
244*6072486dSGerrit Uitslag        $this->assertEquals('external edit', $revinfo['sum']);
245*6072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
246*6072486dSGerrit Uitslag        $this->assertEquals(10, $revinfo['sizechange']);
247*6072486dSGerrit Uitslag
248*6072486dSGerrit Uitslag    }
249*6072486dSGerrit Uitslag
250*6072486dSGerrit Uitslag    /**
251*6072486dSGerrit Uitslag     * Execute a whole bunch of saves on the same page and check the results
252*6072486dSGerrit Uitslag     */
253*6072486dSGerrit Uitslag    function test_savesequenceexternaldeleteedit() {
254*6072486dSGerrit Uitslag        $page = 'page4';
255*6072486dSGerrit Uitslag        $file = wikiFN($page);
256*6072486dSGerrit Uitslag
257*6072486dSGerrit Uitslag        // create the page
258*6072486dSGerrit Uitslag        $this->assertFileNotExists($file);
259*6072486dSGerrit Uitslag        saveWikiText($page, 'teststring', 'first save', false);
260*6072486dSGerrit Uitslag        $this->assertFileExists($file);
261*6072486dSGerrit Uitslag        $lastmod = filemtime($file);
262*6072486dSGerrit Uitslag
263*6072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
264*6072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
265*6072486dSGerrit Uitslag        $this->assertEquals(1, count($revisions));
266*6072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
267*6072486dSGerrit Uitslag        $this->assertEquals('first save', $revinfo['sum']);
268*6072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
269*6072486dSGerrit Uitslag        $this->assertEquals(10, $revinfo['sizechange']);
270*6072486dSGerrit Uitslag
271*6072486dSGerrit Uitslag        sleep(1); // wait for new revision ID
272*6072486dSGerrit Uitslag
273*6072486dSGerrit Uitslag
274*6072486dSGerrit Uitslag        // create external delete
275*6072486dSGerrit Uitslag        unlink($file);
276*6072486dSGerrit Uitslag        clearstatcache(false, $file);
277*6072486dSGerrit Uitslag
278*6072486dSGerrit Uitslag        sleep(1); // wait for new revision ID
279*6072486dSGerrit Uitslag
280*6072486dSGerrit Uitslag        // save on top of external delete. save is seen as creation
281*6072486dSGerrit Uitslag        saveWikiText($page, 'teststring6', 'second save', false);
282*6072486dSGerrit Uitslag        clearstatcache(false, $file);
283*6072486dSGerrit Uitslag
284*6072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
285*6072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
286*6072486dSGerrit Uitslag        $this->assertEquals(2, count($revisions)); // one more revisions now!
287*6072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
288*6072486dSGerrit Uitslag        $this->assertEquals('second save', $revinfo['sum']);
289*6072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
290*6072486dSGerrit Uitslag        $this->assertEquals(11, $revinfo['sizechange']);
291*6072486dSGerrit Uitslag
292*6072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[1]);
293*6072486dSGerrit Uitslag        $this->assertEquals('first save', $revinfo['sum']);
294*6072486dSGerrit Uitslag
295*6072486dSGerrit Uitslag    }
296*6072486dSGerrit Uitslag
297*6072486dSGerrit Uitslag    /**
298*6072486dSGerrit Uitslag     * Execute a whole bunch of saves on the same page and check the results
299*6072486dSGerrit Uitslag     */
300*6072486dSGerrit Uitslag    function test_savesequencerevert() {
301*6072486dSGerrit Uitslag        global $REV;
302*6072486dSGerrit Uitslag
303*6072486dSGerrit Uitslag        $page = 'page5';
304*6072486dSGerrit Uitslag        $file = wikiFN($page);
305*6072486dSGerrit Uitslag
306*6072486dSGerrit Uitslag        // create the page
307*6072486dSGerrit Uitslag        $this->assertFileNotExists($file);
308*6072486dSGerrit Uitslag        saveWikiText($page, 'teststring', 'first save', false);
309*6072486dSGerrit Uitslag        $this->assertFileExists($file);
310*6072486dSGerrit Uitslag        $lastmod = filemtime($file);
311*6072486dSGerrit Uitslag
312*6072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
313*6072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
314*6072486dSGerrit Uitslag        $this->assertEquals(1, count($revisions));
315*6072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
316*6072486dSGerrit Uitslag        $this->assertEquals('first save', $revinfo['sum']);
317*6072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
318*6072486dSGerrit Uitslag        $this->assertEquals(10, $revinfo['sizechange']);
319*6072486dSGerrit Uitslag
320*6072486dSGerrit Uitslag        sleep(1); // wait for new revision ID
321*6072486dSGerrit Uitslag
322*6072486dSGerrit Uitslag        // save with same content should be ignored
323*6072486dSGerrit Uitslag        saveWikiText($page, 'teststring', 'second save', false);
324*6072486dSGerrit Uitslag        clearstatcache(false, $file);
325*6072486dSGerrit Uitslag        $this->assertEquals($lastmod, filemtime($file));
326*6072486dSGerrit Uitslag
327*6072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
328*6072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
329*6072486dSGerrit Uitslag        $this->assertEquals(1, count($revisions));
330*6072486dSGerrit Uitslag
331*6072486dSGerrit Uitslag        // update the page with new text
332*6072486dSGerrit Uitslag        saveWikiText($page, 'teststring2long', 'third save', false);
333*6072486dSGerrit Uitslag        clearstatcache(false, $file);
334*6072486dSGerrit Uitslag        $newmod = filemtime($file);
335*6072486dSGerrit Uitslag        $this->assertNotEquals($lastmod, $newmod);
336*6072486dSGerrit Uitslag        $lastmod = $newmod;
337*6072486dSGerrit Uitslag        $revertrev = $newmod;
338*6072486dSGerrit Uitslag
339*6072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
340*6072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
341*6072486dSGerrit Uitslag        $this->assertEquals(2, count($revisions));
342*6072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
343*6072486dSGerrit Uitslag        $this->assertEquals('third save', $revinfo['sum']);
344*6072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
345*6072486dSGerrit Uitslag        $this->assertEquals(5, $revinfo['sizechange']);
346*6072486dSGerrit Uitslag
347*6072486dSGerrit Uitslag        sleep(1); // wait for new revision ID
348*6072486dSGerrit Uitslag
349*6072486dSGerrit Uitslag        // add a minor edit (unauthenticated)
350*6072486dSGerrit Uitslag        saveWikiText($page, 'teststring3long', 'fourth save', true);
351*6072486dSGerrit Uitslag        clearstatcache(false, $file);
352*6072486dSGerrit Uitslag        $newmod = filemtime($file);
353*6072486dSGerrit Uitslag        $this->assertNotEquals($lastmod, $newmod);
354*6072486dSGerrit Uitslag        $lastmod = $newmod;
355*6072486dSGerrit Uitslag
356*6072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
357*6072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
358*6072486dSGerrit Uitslag        $this->assertEquals(3, count($revisions));
359*6072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
360*6072486dSGerrit Uitslag        $this->assertEquals('fourth save', $revinfo['sum']);
361*6072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
362*6072486dSGerrit Uitslag        $this->assertEquals(0, $revinfo['sizechange']);
363*6072486dSGerrit Uitslag
364*6072486dSGerrit Uitslag        sleep(1); // wait for new revision ID
365*6072486dSGerrit Uitslag
366*6072486dSGerrit Uitslag        // add a minor edit (authenticated)
367*6072486dSGerrit Uitslag        $_SERVER['REMOTE_USER'] = 'user';
368*6072486dSGerrit Uitslag        saveWikiText($page, 'teststring4', 'fifth save', true);
369*6072486dSGerrit Uitslag        clearstatcache(false, $file);
370*6072486dSGerrit Uitslag        $newmod = filemtime($file);
371*6072486dSGerrit Uitslag        $this->assertNotEquals($lastmod, $newmod);
372*6072486dSGerrit Uitslag        $lastmod = $newmod;
373*6072486dSGerrit Uitslag
374*6072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
375*6072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
376*6072486dSGerrit Uitslag        $this->assertEquals(4, count($revisions));
377*6072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
378*6072486dSGerrit Uitslag        $this->assertEquals('fifth save', $revinfo['sum']);
379*6072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_MINOR_EDIT, $revinfo['type']);
380*6072486dSGerrit Uitslag        $this->assertEquals(-4, $revinfo['sizechange']);
381*6072486dSGerrit Uitslag
382*6072486dSGerrit Uitslag        sleep(1); // wait for new revision ID
383*6072486dSGerrit Uitslag
384*6072486dSGerrit Uitslag        // restore
385*6072486dSGerrit Uitslag        $REV = $revertrev;
386*6072486dSGerrit Uitslag        saveWikiText($page, 'teststring2long', 'sixth save', true);
387*6072486dSGerrit Uitslag        clearstatcache(false, $file);
388*6072486dSGerrit Uitslag        $this->assertFileExists($file);
389*6072486dSGerrit Uitslag        $newmod = filemtime($file);
390*6072486dSGerrit Uitslag        $this->assertNotEquals($lastmod, $newmod);
391*6072486dSGerrit Uitslag
392*6072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
393*6072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
394*6072486dSGerrit Uitslag        $this->assertEquals(5, count($revisions));
395*6072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
396*6072486dSGerrit Uitslag        $this->assertEquals('sixth save', $revinfo['sum']);
397*6072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_REVERT, $revinfo['type']);
398*6072486dSGerrit Uitslag        $this->assertEquals($REV, $revinfo['extra']);
399*6072486dSGerrit Uitslag        $this->assertEquals(4, $revinfo['sizechange']);
400*6072486dSGerrit Uitslag        $REV = '';
401*6072486dSGerrit Uitslag    }
402*6072486dSGerrit Uitslag
403023953f0SAndreas Gohr}
404