xref: /dokuwiki/_test/tests/inc/common_saveWikiText.test.php (revision ea466a98bcd9ffcfa5dd4f61b8155f4626d16586)
1023953f0SAndreas Gohr<?php
2023953f0SAndreas Gohr
3023953f0SAndreas Gohrclass common_saveWikiText_test extends DokuWikiTest {
4*ea466a98SMichael Hamann    /** Delay writes of old revisions by a second. */
5*ea466a98SMichael Hamann    public function handle_write(Doku_Event $event, $param) {
6*ea466a98SMichael Hamann        if ($event->data[3] !== false) {
7*ea466a98SMichael Hamann            $this->waitForTick();
8*ea466a98SMichael Hamann        }
9*ea466a98SMichael Hamann    }
10023953f0SAndreas Gohr
11023953f0SAndreas Gohr    /**
12023953f0SAndreas Gohr     * Execute a whole bunch of saves on the same page and check the results
13023953f0SAndreas Gohr     */
14023953f0SAndreas Gohr    function test_savesequence() {
15023953f0SAndreas Gohr        global $REV;
16023953f0SAndreas Gohr
17023953f0SAndreas Gohr        $page = 'page';
18023953f0SAndreas Gohr        $file = wikiFN($page);
19023953f0SAndreas Gohr
20023953f0SAndreas Gohr        // create the page
21023953f0SAndreas Gohr        $this->assertFileNotExists($file);
22023953f0SAndreas Gohr        saveWikiText($page, 'teststring', 'first save', false);
23023953f0SAndreas Gohr        $this->assertFileExists($file);
24023953f0SAndreas Gohr        $lastmod = filemtime($file);
25023953f0SAndreas Gohr
26023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
27023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
28023953f0SAndreas Gohr        $this->assertEquals(1, count($revisions));
29023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
30023953f0SAndreas Gohr        $this->assertEquals('first save', $revinfo['sum']);
31023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
324b5aebc1SGerrit Uitslag        $this->assertEquals(10, $revinfo['sizechange']);
33*ea466a98SMichael Hamann        $this->assertFileExists(wikiFN($page, $revinfo['date']));
34023953f0SAndreas Gohr
35aaf4f55eSAndreas Gohr        $this->waitForTick(true); // wait for new revision ID
36023953f0SAndreas Gohr
37023953f0SAndreas Gohr        // save with same content should be ignored
38023953f0SAndreas Gohr        saveWikiText($page, 'teststring', 'second save', false);
39023953f0SAndreas Gohr        clearstatcache(false, $file);
40023953f0SAndreas Gohr        $this->assertEquals($lastmod, filemtime($file));
41023953f0SAndreas Gohr
42023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
43023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
44023953f0SAndreas Gohr        $this->assertEquals(1, count($revisions));
45023953f0SAndreas Gohr
46023953f0SAndreas Gohr        // update the page with new text
474b5aebc1SGerrit Uitslag        saveWikiText($page, 'teststring2long', 'third save', false);
48023953f0SAndreas Gohr        clearstatcache(false, $file);
49023953f0SAndreas Gohr        $newmod = filemtime($file);
50023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
51023953f0SAndreas Gohr        $lastmod = $newmod;
52023953f0SAndreas Gohr
53023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
54023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
55023953f0SAndreas Gohr        $this->assertEquals(2, count($revisions));
56023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
57023953f0SAndreas Gohr        $this->assertEquals('third save', $revinfo['sum']);
58023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
594b5aebc1SGerrit Uitslag        $this->assertEquals(5, $revinfo['sizechange']);
60023953f0SAndreas Gohr
61aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
62023953f0SAndreas Gohr
63023953f0SAndreas Gohr        // add a minor edit (unauthenticated)
644b5aebc1SGerrit Uitslag        saveWikiText($page, 'teststring3long', 'fourth save', true);
65023953f0SAndreas Gohr        clearstatcache(false, $file);
66023953f0SAndreas Gohr        $newmod = filemtime($file);
67023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
68023953f0SAndreas Gohr        $lastmod = $newmod;
69023953f0SAndreas Gohr
70023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
71023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
72023953f0SAndreas Gohr        $this->assertEquals(3, count($revisions));
73023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
74023953f0SAndreas Gohr        $this->assertEquals('fourth save', $revinfo['sum']);
75023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
764b5aebc1SGerrit Uitslag        $this->assertEquals(0, $revinfo['sizechange']);
77023953f0SAndreas Gohr
78aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
79023953f0SAndreas Gohr
80023953f0SAndreas Gohr        // add a minor edit (authenticated)
81023953f0SAndreas Gohr        $_SERVER['REMOTE_USER'] = 'user';
82023953f0SAndreas Gohr        saveWikiText($page, 'teststring4', 'fifth save', true);
83023953f0SAndreas Gohr        clearstatcache(false, $file);
84023953f0SAndreas Gohr        $newmod = filemtime($file);
85023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
86023953f0SAndreas Gohr        $lastmod = $newmod;
87023953f0SAndreas Gohr
88023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
89023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
90023953f0SAndreas Gohr        $this->assertEquals(4, count($revisions));
91023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
92023953f0SAndreas Gohr        $this->assertEquals('fifth save', $revinfo['sum']);
93023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_MINOR_EDIT, $revinfo['type']);
944b5aebc1SGerrit Uitslag        $this->assertEquals(-4, $revinfo['sizechange']);
95023953f0SAndreas Gohr
96aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
97023953f0SAndreas Gohr
98023953f0SAndreas Gohr        // delete
99023953f0SAndreas Gohr        saveWikiText($page, '', 'sixth save', false);
100023953f0SAndreas Gohr        clearstatcache(false, $file);
101023953f0SAndreas Gohr        $this->assertFileNotExists($file);
102023953f0SAndreas Gohr
103023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
104023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
105023953f0SAndreas Gohr        $this->assertEquals(5, count($revisions));
106023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
107023953f0SAndreas Gohr        $this->assertEquals('sixth save', $revinfo['sum']);
108023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_DELETE, $revinfo['type']);
1094b5aebc1SGerrit Uitslag        $this->assertEquals(-11, $revinfo['sizechange']);
110*ea466a98SMichael Hamann        $this->assertFileExists(wikiFN($page, $revinfo['date']));
111023953f0SAndreas Gohr
112aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
113023953f0SAndreas Gohr
114023953f0SAndreas Gohr        // restore
115023953f0SAndreas Gohr        $REV = $lastmod;
116023953f0SAndreas Gohr        saveWikiText($page, 'teststring4', 'seventh save', true);
117023953f0SAndreas Gohr        clearstatcache(false, $file);
118023953f0SAndreas Gohr        $this->assertFileExists($file);
119023953f0SAndreas Gohr        $newmod = filemtime($file);
120023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
121023953f0SAndreas Gohr        $lastmod = $newmod;
122023953f0SAndreas Gohr
123023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
124023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
125023953f0SAndreas Gohr        $this->assertEquals(6, count($revisions));
126023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
127023953f0SAndreas Gohr        $this->assertEquals('seventh save', $revinfo['sum']);
128023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_REVERT, $revinfo['type']);
129023953f0SAndreas Gohr        $this->assertEquals($REV, $revinfo['extra']);
1304b5aebc1SGerrit Uitslag        $this->assertEquals(11, $revinfo['sizechange']);
131*ea466a98SMichael Hamann        $this->assertFileExists(wikiFN($page, $revinfo['date']));
132023953f0SAndreas Gohr        $REV = '';
133023953f0SAndreas Gohr
134aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
135023953f0SAndreas Gohr
136023953f0SAndreas Gohr        // create external edit
137023953f0SAndreas Gohr        file_put_contents($file, 'teststring5');
138023953f0SAndreas Gohr
139aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
140023953f0SAndreas Gohr
141023953f0SAndreas Gohr        // save on top of external edit
142023953f0SAndreas Gohr        saveWikiText($page, 'teststring6', 'eigth save', false);
143023953f0SAndreas Gohr        clearstatcache(false, $file);
144023953f0SAndreas Gohr        $newmod = filemtime($file);
145023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
146023953f0SAndreas Gohr        $lastmod = $newmod;
147023953f0SAndreas Gohr
148023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
149023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
150023953f0SAndreas Gohr        $this->assertEquals(8, count($revisions)); // two more revisions now!
151023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
152023953f0SAndreas Gohr        $this->assertEquals('eigth save', $revinfo['sum']);
153023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
1544b5aebc1SGerrit Uitslag        $this->assertEquals(0, $revinfo['sizechange']);
155023953f0SAndreas Gohr
156023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[1]);
157023953f0SAndreas Gohr        $this->assertEquals('external edit', $revinfo['sum']);
158023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
1594b5aebc1SGerrit Uitslag        $this->assertEquals(0, $revinfo['sizechange']);
160023953f0SAndreas Gohr
161023953f0SAndreas Gohr    }
1626072486dSGerrit Uitslag
1636072486dSGerrit Uitslag    /**
1646072486dSGerrit Uitslag     * Execute a whole bunch of saves on the same page and check the results
1656072486dSGerrit Uitslag     */
1666072486dSGerrit Uitslag    function test_savesequencedeleteexternalrevision() {
167*ea466a98SMichael Hamann        // add an additional delay when saving files to make sure
168*ea466a98SMichael Hamann        // nobody relies on the saving happening in the same second
169*ea466a98SMichael Hamann        /** @var $EVENT_HANDLER Doku_Event_Handler */
170*ea466a98SMichael Hamann        global $EVENT_HANDLER;
171*ea466a98SMichael Hamann        $EVENT_HANDLER->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, 'handle_write');
172*ea466a98SMichael Hamann
1736072486dSGerrit Uitslag        $page = 'page2';
1746072486dSGerrit Uitslag        $file = wikiFN($page);
1756072486dSGerrit Uitslag
1766072486dSGerrit Uitslag        // create the page
1776072486dSGerrit Uitslag        $this->assertFileNotExists($file);
1786072486dSGerrit Uitslag        saveWikiText($page, 'teststring', 'first save', false);
1796072486dSGerrit Uitslag        $this->assertFileExists($file);
1806072486dSGerrit Uitslag        $lastmod = filemtime($file);
1816072486dSGerrit Uitslag
1826072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
1836072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
1846072486dSGerrit Uitslag        $this->assertEquals(1, count($revisions));
1856072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
1866072486dSGerrit Uitslag        $this->assertEquals('first save', $revinfo['sum']);
1876072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
1886072486dSGerrit Uitslag        $this->assertEquals(10, $revinfo['sizechange']);
189*ea466a98SMichael Hamann        $this->assertFileExists(wikiFN($page, $revinfo['date']));
1906072486dSGerrit Uitslag
191aaf4f55eSAndreas Gohr        $this->waitForTick(true); // wait for new revision ID
1926072486dSGerrit Uitslag
1936072486dSGerrit Uitslag        // delete
1946072486dSGerrit Uitslag        saveWikiText($page, '', 'second save', false);
1956072486dSGerrit Uitslag        clearstatcache(false, $file);
1966072486dSGerrit Uitslag        $this->assertFileNotExists($file);
1976072486dSGerrit Uitslag
1986072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
1996072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
2006072486dSGerrit Uitslag        $this->assertEquals(2, count($revisions));
2016072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
2026072486dSGerrit Uitslag        $this->assertEquals('second save', $revinfo['sum']);
2036072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_DELETE, $revinfo['type']);
2046072486dSGerrit Uitslag        $this->assertEquals(-10, $revinfo['sizechange']);
205*ea466a98SMichael Hamann        $this->assertFileExists(wikiFN($page, $revinfo['date']));
2066072486dSGerrit Uitslag
207aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
2086072486dSGerrit Uitslag
2096072486dSGerrit Uitslag        // create external edit
2106072486dSGerrit Uitslag        file_put_contents($file, 'teststring5');
2116072486dSGerrit Uitslag
212aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
2136072486dSGerrit Uitslag
2146072486dSGerrit Uitslag        // save on top of external edit
2156072486dSGerrit Uitslag        saveWikiText($page, 'teststring6', 'third save', false);
2166072486dSGerrit Uitslag        clearstatcache(false, $file);
2176072486dSGerrit Uitslag
2186072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
2196072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
2206072486dSGerrit Uitslag        $this->assertEquals(4, count($revisions)); // two more revisions now!
2216072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
2226072486dSGerrit Uitslag        $this->assertEquals('third save', $revinfo['sum']);
2236072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
2246072486dSGerrit Uitslag        $this->assertEquals(0, $revinfo['sizechange']);
225*ea466a98SMichael Hamann        $this->assertFileExists(wikiFN($page, $revinfo['date']));
2266072486dSGerrit Uitslag
2276072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[1]);
2286072486dSGerrit Uitslag        $this->assertEquals('external edit', $revinfo['sum']);
2296072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
2306072486dSGerrit Uitslag        $this->assertEquals(11, $revinfo['sizechange']);
231*ea466a98SMichael Hamann        $this->assertFileExists(wikiFN($page, $revinfo['date']));
2326072486dSGerrit Uitslag
2336072486dSGerrit Uitslag    }
2346072486dSGerrit Uitslag
2356072486dSGerrit Uitslag    /**
2366072486dSGerrit Uitslag     * Execute a whole bunch of saves on the same page and check the results
2376072486dSGerrit Uitslag     */
2386072486dSGerrit Uitslag    function test_saveexternalasfirst() {
2396072486dSGerrit Uitslag        $page = 'page3';
2406072486dSGerrit Uitslag        $file = wikiFN($page);
2416072486dSGerrit Uitslag
2426072486dSGerrit Uitslag        // create the page
2436072486dSGerrit Uitslag        $this->assertFileNotExists($file);
2446072486dSGerrit Uitslag
2456072486dSGerrit Uitslag        // create external edit
2466072486dSGerrit Uitslag        file_put_contents($file, 'teststring');
2476072486dSGerrit Uitslag
248aaf4f55eSAndreas Gohr        $this->waitForTick(true); // wait for new revision ID
2496072486dSGerrit Uitslag
2506072486dSGerrit Uitslag        // save on top of external edit
2516072486dSGerrit Uitslag        saveWikiText($page, 'teststring6', 'first save', false);
2526072486dSGerrit Uitslag        clearstatcache(false, $file);
2536072486dSGerrit Uitslag
2546072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
2556072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
2566072486dSGerrit Uitslag        $this->assertEquals(2, count($revisions)); // two more revisions now!
2576072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
2586072486dSGerrit Uitslag        $this->assertEquals('first save', $revinfo['sum']);
2596072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
2606072486dSGerrit Uitslag        $this->assertEquals(1, $revinfo['sizechange']);
2616072486dSGerrit Uitslag
2626072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[1]);
2636072486dSGerrit Uitslag        $this->assertEquals('external edit', $revinfo['sum']);
2646072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
2656072486dSGerrit Uitslag        $this->assertEquals(10, $revinfo['sizechange']);
2666072486dSGerrit Uitslag
2676072486dSGerrit Uitslag    }
2686072486dSGerrit Uitslag
2696072486dSGerrit Uitslag    /**
2706072486dSGerrit Uitslag     * Execute a whole bunch of saves on the same page and check the results
2716072486dSGerrit Uitslag     */
2726072486dSGerrit Uitslag    function test_savesequenceexternaldeleteedit() {
2736072486dSGerrit Uitslag        $page = 'page4';
2746072486dSGerrit Uitslag        $file = wikiFN($page);
2756072486dSGerrit Uitslag
2766072486dSGerrit Uitslag        // create the page
2776072486dSGerrit Uitslag        $this->assertFileNotExists($file);
2786072486dSGerrit Uitslag        saveWikiText($page, 'teststring', 'first save', false);
2796072486dSGerrit Uitslag        $this->assertFileExists($file);
2806072486dSGerrit Uitslag        $lastmod = filemtime($file);
2816072486dSGerrit Uitslag
2826072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
2836072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
2846072486dSGerrit Uitslag        $this->assertEquals(1, count($revisions));
2856072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
2866072486dSGerrit Uitslag        $this->assertEquals('first save', $revinfo['sum']);
2876072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
2886072486dSGerrit Uitslag        $this->assertEquals(10, $revinfo['sizechange']);
2896072486dSGerrit Uitslag
290aaf4f55eSAndreas Gohr        $this->waitForTick(true); // wait for new revision ID
2916072486dSGerrit Uitslag
2926072486dSGerrit Uitslag
2936072486dSGerrit Uitslag        // create external delete
2946072486dSGerrit Uitslag        unlink($file);
2956072486dSGerrit Uitslag        clearstatcache(false, $file);
2966072486dSGerrit Uitslag
297aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
2986072486dSGerrit Uitslag
2996072486dSGerrit Uitslag        // save on top of external delete. save is seen as creation
3006072486dSGerrit Uitslag        saveWikiText($page, 'teststring6', 'second save', false);
3016072486dSGerrit Uitslag        clearstatcache(false, $file);
3026072486dSGerrit Uitslag
3036072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
3046072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
3056072486dSGerrit Uitslag        $this->assertEquals(2, count($revisions)); // one more revisions now!
3066072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
3076072486dSGerrit Uitslag        $this->assertEquals('second save', $revinfo['sum']);
3086072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
3096072486dSGerrit Uitslag        $this->assertEquals(11, $revinfo['sizechange']);
3106072486dSGerrit Uitslag
3116072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[1]);
3126072486dSGerrit Uitslag        $this->assertEquals('first save', $revinfo['sum']);
3136072486dSGerrit Uitslag
3146072486dSGerrit Uitslag    }
3156072486dSGerrit Uitslag
3166072486dSGerrit Uitslag    /**
3176072486dSGerrit Uitslag     * Execute a whole bunch of saves on the same page and check the results
3186072486dSGerrit Uitslag     */
3196072486dSGerrit Uitslag    function test_savesequencerevert() {
3206072486dSGerrit Uitslag        global $REV;
3216072486dSGerrit Uitslag
3226072486dSGerrit Uitslag        $page = 'page5';
3236072486dSGerrit Uitslag        $file = wikiFN($page);
3246072486dSGerrit Uitslag
3256072486dSGerrit Uitslag        // create the page
3266072486dSGerrit Uitslag        $this->assertFileNotExists($file);
3276072486dSGerrit Uitslag        saveWikiText($page, 'teststring', 'first save', false);
3286072486dSGerrit Uitslag        $this->assertFileExists($file);
3296072486dSGerrit Uitslag        $lastmod = filemtime($file);
3306072486dSGerrit Uitslag
3316072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
3326072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
3336072486dSGerrit Uitslag        $this->assertEquals(1, count($revisions));
3346072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
3356072486dSGerrit Uitslag        $this->assertEquals('first save', $revinfo['sum']);
3366072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
3376072486dSGerrit Uitslag        $this->assertEquals(10, $revinfo['sizechange']);
3386072486dSGerrit Uitslag
339aaf4f55eSAndreas Gohr        $this->waitForTick(true); // wait for new revision ID
3406072486dSGerrit Uitslag
3416072486dSGerrit Uitslag        // save with same content should be ignored
3426072486dSGerrit Uitslag        saveWikiText($page, 'teststring', 'second save', false);
3436072486dSGerrit Uitslag        clearstatcache(false, $file);
3446072486dSGerrit Uitslag        $this->assertEquals($lastmod, filemtime($file));
3456072486dSGerrit Uitslag
3466072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
3476072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
3486072486dSGerrit Uitslag        $this->assertEquals(1, count($revisions));
3496072486dSGerrit Uitslag
3506072486dSGerrit Uitslag        // update the page with new text
3516072486dSGerrit Uitslag        saveWikiText($page, 'teststring2long', 'third save', false);
3526072486dSGerrit Uitslag        clearstatcache(false, $file);
3536072486dSGerrit Uitslag        $newmod = filemtime($file);
3546072486dSGerrit Uitslag        $this->assertNotEquals($lastmod, $newmod);
3556072486dSGerrit Uitslag        $lastmod = $newmod;
3566072486dSGerrit Uitslag        $revertrev = $newmod;
3576072486dSGerrit Uitslag
3586072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
3596072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
3606072486dSGerrit Uitslag        $this->assertEquals(2, count($revisions));
3616072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
3626072486dSGerrit Uitslag        $this->assertEquals('third save', $revinfo['sum']);
3636072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
3646072486dSGerrit Uitslag        $this->assertEquals(5, $revinfo['sizechange']);
3656072486dSGerrit Uitslag
366aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
3676072486dSGerrit Uitslag
3686072486dSGerrit Uitslag        // add a minor edit (unauthenticated)
3696072486dSGerrit Uitslag        saveWikiText($page, 'teststring3long', 'fourth save', true);
3706072486dSGerrit Uitslag        clearstatcache(false, $file);
3716072486dSGerrit Uitslag        $newmod = filemtime($file);
3726072486dSGerrit Uitslag        $this->assertNotEquals($lastmod, $newmod);
3736072486dSGerrit Uitslag        $lastmod = $newmod;
3746072486dSGerrit Uitslag
3756072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
3766072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
3776072486dSGerrit Uitslag        $this->assertEquals(3, count($revisions));
3786072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
3796072486dSGerrit Uitslag        $this->assertEquals('fourth save', $revinfo['sum']);
3806072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
3816072486dSGerrit Uitslag        $this->assertEquals(0, $revinfo['sizechange']);
3826072486dSGerrit Uitslag
383aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
3846072486dSGerrit Uitslag
3856072486dSGerrit Uitslag        // add a minor edit (authenticated)
3866072486dSGerrit Uitslag        $_SERVER['REMOTE_USER'] = 'user';
3876072486dSGerrit Uitslag        saveWikiText($page, 'teststring4', 'fifth save', true);
3886072486dSGerrit Uitslag        clearstatcache(false, $file);
3896072486dSGerrit Uitslag        $newmod = filemtime($file);
3906072486dSGerrit Uitslag        $this->assertNotEquals($lastmod, $newmod);
3916072486dSGerrit Uitslag        $lastmod = $newmod;
3926072486dSGerrit Uitslag
3936072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
3946072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
3956072486dSGerrit Uitslag        $this->assertEquals(4, count($revisions));
3966072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
3976072486dSGerrit Uitslag        $this->assertEquals('fifth save', $revinfo['sum']);
3986072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_MINOR_EDIT, $revinfo['type']);
3996072486dSGerrit Uitslag        $this->assertEquals(-4, $revinfo['sizechange']);
4006072486dSGerrit Uitslag
401aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
4026072486dSGerrit Uitslag
4036072486dSGerrit Uitslag        // restore
4046072486dSGerrit Uitslag        $REV = $revertrev;
4056072486dSGerrit Uitslag        saveWikiText($page, 'teststring2long', 'sixth save', true);
4066072486dSGerrit Uitslag        clearstatcache(false, $file);
4076072486dSGerrit Uitslag        $this->assertFileExists($file);
4086072486dSGerrit Uitslag        $newmod = filemtime($file);
4096072486dSGerrit Uitslag        $this->assertNotEquals($lastmod, $newmod);
4106072486dSGerrit Uitslag
4116072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
4126072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
4136072486dSGerrit Uitslag        $this->assertEquals(5, count($revisions));
4146072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
4156072486dSGerrit Uitslag        $this->assertEquals('sixth save', $revinfo['sum']);
4166072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_REVERT, $revinfo['type']);
4176072486dSGerrit Uitslag        $this->assertEquals($REV, $revinfo['extra']);
4186072486dSGerrit Uitslag        $this->assertEquals(4, $revinfo['sizechange']);
4196072486dSGerrit Uitslag        $REV = '';
4206072486dSGerrit Uitslag    }
4216072486dSGerrit Uitslag
422023953f0SAndreas Gohr}
423