xref: /dokuwiki/_test/tests/inc/common_saveWikiText.test.php (revision 7866d571c1663ca5af2bcfe66b48f09d4f4e7e63)
1023953f0SAndreas Gohr<?php
2023953f0SAndreas Gohr
30c3a5702SAndreas Gohruse dokuwiki\ChangeLog\PageChangeLog;
40c3a5702SAndreas Gohr
5023953f0SAndreas Gohrclass common_saveWikiText_test extends DokuWikiTest {
6ea466a98SMichael Hamann    /** Delay writes of old revisions by a second. */
7ea466a98SMichael Hamann    public function handle_write(Doku_Event $event, $param) {
8ea466a98SMichael Hamann        if ($event->data[3] !== false) {
9ea466a98SMichael Hamann            $this->waitForTick();
10ea466a98SMichael Hamann        }
11ea466a98SMichael Hamann    }
12023953f0SAndreas Gohr
13023953f0SAndreas Gohr    /**
14023953f0SAndreas Gohr     * Execute a whole bunch of saves on the same page and check the results
15023953f0SAndreas Gohr     */
16023953f0SAndreas Gohr    function test_savesequence() {
17023953f0SAndreas Gohr        global $REV;
18023953f0SAndreas Gohr
19023953f0SAndreas Gohr        $page = 'page';
20023953f0SAndreas Gohr        $file = wikiFN($page);
21023953f0SAndreas Gohr
22023953f0SAndreas Gohr        // create the page
23023953f0SAndreas Gohr        $this->assertFileNotExists($file);
24023953f0SAndreas Gohr        saveWikiText($page, 'teststring', 'first save', false);
25023953f0SAndreas Gohr        $this->assertFileExists($file);
26023953f0SAndreas Gohr        $lastmod = filemtime($file);
27023953f0SAndreas Gohr
28023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
29023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
30*7866d571SSatoshi Sahara        $this->assertCount(1, $revisions);
31023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
32023953f0SAndreas Gohr        $this->assertEquals('first save', $revinfo['sum']);
33023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
344b5aebc1SGerrit Uitslag        $this->assertEquals(10, $revinfo['sizechange']);
35ea466a98SMichael Hamann        $this->assertFileExists(wikiFN($page, $revinfo['date']));
36023953f0SAndreas Gohr
37aaf4f55eSAndreas Gohr        $this->waitForTick(true); // wait for new revision ID
38023953f0SAndreas Gohr
39023953f0SAndreas Gohr        // save with same content should be ignored
40023953f0SAndreas Gohr        saveWikiText($page, 'teststring', 'second save', false);
41023953f0SAndreas Gohr        clearstatcache(false, $file);
42023953f0SAndreas Gohr        $this->assertEquals($lastmod, filemtime($file));
43023953f0SAndreas Gohr
44023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
45023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
46*7866d571SSatoshi Sahara        $this->assertCount(1, $revisions);
47023953f0SAndreas Gohr
48023953f0SAndreas Gohr        // update the page with new text
494b5aebc1SGerrit Uitslag        saveWikiText($page, 'teststring2long', 'third save', false);
50023953f0SAndreas Gohr        clearstatcache(false, $file);
51023953f0SAndreas Gohr        $newmod = filemtime($file);
52023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
53023953f0SAndreas Gohr        $lastmod = $newmod;
54023953f0SAndreas Gohr
55023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
56023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
57*7866d571SSatoshi Sahara        $this->assertCount(2, $revisions);
58023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
59023953f0SAndreas Gohr        $this->assertEquals('third save', $revinfo['sum']);
60023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
614b5aebc1SGerrit Uitslag        $this->assertEquals(5, $revinfo['sizechange']);
62023953f0SAndreas Gohr
63aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
64023953f0SAndreas Gohr
65023953f0SAndreas Gohr        // add a minor edit (unauthenticated)
664b5aebc1SGerrit Uitslag        saveWikiText($page, 'teststring3long', 'fourth save', true);
67023953f0SAndreas Gohr        clearstatcache(false, $file);
68023953f0SAndreas Gohr        $newmod = filemtime($file);
69023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
70023953f0SAndreas Gohr        $lastmod = $newmod;
71023953f0SAndreas Gohr
72023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
73023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
74*7866d571SSatoshi Sahara        $this->assertCount(3, $revisions);
75023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
76023953f0SAndreas Gohr        $this->assertEquals('fourth save', $revinfo['sum']);
77023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
784b5aebc1SGerrit Uitslag        $this->assertEquals(0, $revinfo['sizechange']);
79023953f0SAndreas Gohr
80aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
81023953f0SAndreas Gohr
82023953f0SAndreas Gohr        // add a minor edit (authenticated)
83023953f0SAndreas Gohr        $_SERVER['REMOTE_USER'] = 'user';
84023953f0SAndreas Gohr        saveWikiText($page, 'teststring4', 'fifth save', true);
85023953f0SAndreas Gohr        clearstatcache(false, $file);
86023953f0SAndreas Gohr        $newmod = filemtime($file);
87023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
88023953f0SAndreas Gohr        $lastmod = $newmod;
89023953f0SAndreas Gohr
90023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
91023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
92*7866d571SSatoshi Sahara        $this->assertCount(4, $revisions);
93023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
94023953f0SAndreas Gohr        $this->assertEquals('fifth save', $revinfo['sum']);
95023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_MINOR_EDIT, $revinfo['type']);
964b5aebc1SGerrit Uitslag        $this->assertEquals(-4, $revinfo['sizechange']);
97023953f0SAndreas Gohr
98aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
99023953f0SAndreas Gohr
100023953f0SAndreas Gohr        // delete
101023953f0SAndreas Gohr        saveWikiText($page, '', 'sixth save', false);
102023953f0SAndreas Gohr        clearstatcache(false, $file);
103023953f0SAndreas Gohr        $this->assertFileNotExists($file);
104023953f0SAndreas Gohr
105023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
106023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
107*7866d571SSatoshi Sahara        $this->assertCount(5, $revisions);
108023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
109023953f0SAndreas Gohr        $this->assertEquals('sixth save', $revinfo['sum']);
110023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_DELETE, $revinfo['type']);
1114b5aebc1SGerrit Uitslag        $this->assertEquals(-11, $revinfo['sizechange']);
112ea466a98SMichael Hamann        $this->assertFileExists(wikiFN($page, $revinfo['date']));
113023953f0SAndreas Gohr
114aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
115023953f0SAndreas Gohr
116023953f0SAndreas Gohr        // restore
117023953f0SAndreas Gohr        $REV = $lastmod;
118023953f0SAndreas Gohr        saveWikiText($page, 'teststring4', 'seventh save', true);
119023953f0SAndreas Gohr        clearstatcache(false, $file);
120023953f0SAndreas Gohr        $this->assertFileExists($file);
121023953f0SAndreas Gohr        $newmod = filemtime($file);
122023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
123023953f0SAndreas Gohr        $lastmod = $newmod;
124023953f0SAndreas Gohr
125023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
126023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
127*7866d571SSatoshi Sahara        $this->assertCount(6, $revisions);
128023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
129023953f0SAndreas Gohr        $this->assertEquals('seventh save', $revinfo['sum']);
130023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_REVERT, $revinfo['type']);
131023953f0SAndreas Gohr        $this->assertEquals($REV, $revinfo['extra']);
1324b5aebc1SGerrit Uitslag        $this->assertEquals(11, $revinfo['sizechange']);
133ea466a98SMichael Hamann        $this->assertFileExists(wikiFN($page, $revinfo['date']));
134023953f0SAndreas Gohr        $REV = '';
135023953f0SAndreas Gohr
136aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
137023953f0SAndreas Gohr
138023953f0SAndreas Gohr        // create external edit
139023953f0SAndreas Gohr        file_put_contents($file, 'teststring5');
140023953f0SAndreas Gohr
141aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
142023953f0SAndreas Gohr
143023953f0SAndreas Gohr        // save on top of external edit
144023953f0SAndreas Gohr        saveWikiText($page, 'teststring6', 'eigth save', false);
145023953f0SAndreas Gohr        clearstatcache(false, $file);
146023953f0SAndreas Gohr        $newmod = filemtime($file);
147023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
148023953f0SAndreas Gohr        $lastmod = $newmod;
149023953f0SAndreas Gohr
150023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
151023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
152*7866d571SSatoshi Sahara        $this->assertCount(8, $revisions); // two more revisions now!
153023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
154023953f0SAndreas Gohr        $this->assertEquals('eigth save', $revinfo['sum']);
155023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
1564b5aebc1SGerrit Uitslag        $this->assertEquals(0, $revinfo['sizechange']);
157023953f0SAndreas Gohr
158023953f0SAndreas Gohr        $revinfo = $pagelog->getRevisionInfo($revisions[1]);
159023953f0SAndreas Gohr        $this->assertEquals('external edit', $revinfo['sum']);
160023953f0SAndreas Gohr        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
1614b5aebc1SGerrit Uitslag        $this->assertEquals(0, $revinfo['sizechange']);
162023953f0SAndreas Gohr
163023953f0SAndreas Gohr    }
1646072486dSGerrit Uitslag
1656072486dSGerrit Uitslag    /**
1666072486dSGerrit Uitslag     * Execute a whole bunch of saves on the same page and check the results
1676072486dSGerrit Uitslag     */
1686072486dSGerrit Uitslag    function test_savesequencedeleteexternalrevision() {
169ea466a98SMichael Hamann        // add an additional delay when saving files to make sure
170ea466a98SMichael Hamann        // nobody relies on the saving happening in the same second
171e1d9dcc8SAndreas Gohr        /** @var $EVENT_HANDLER \dokuwiki\Extension\EventHandler */
172ea466a98SMichael Hamann        global $EVENT_HANDLER;
173ea466a98SMichael Hamann        $EVENT_HANDLER->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, 'handle_write');
174ea466a98SMichael Hamann
1756072486dSGerrit Uitslag        $page = 'page2';
1766072486dSGerrit Uitslag        $file = wikiFN($page);
1776072486dSGerrit Uitslag
1786072486dSGerrit Uitslag        // create the page
1796072486dSGerrit Uitslag        $this->assertFileNotExists($file);
1806072486dSGerrit Uitslag        saveWikiText($page, 'teststring', 'first save', false);
1816072486dSGerrit Uitslag        $this->assertFileExists($file);
1826072486dSGerrit Uitslag        $lastmod = filemtime($file);
1836072486dSGerrit Uitslag
1846072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
1856072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
186*7866d571SSatoshi Sahara        $this->assertCount(1, $revisions);
1876072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
1886072486dSGerrit Uitslag        $this->assertEquals('first save', $revinfo['sum']);
1896072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
1906072486dSGerrit Uitslag        $this->assertEquals(10, $revinfo['sizechange']);
191ea466a98SMichael Hamann        $this->assertFileExists(wikiFN($page, $revinfo['date']));
1926072486dSGerrit Uitslag
193aaf4f55eSAndreas Gohr        $this->waitForTick(true); // wait for new revision ID
1946072486dSGerrit Uitslag
1956072486dSGerrit Uitslag        // delete
1966072486dSGerrit Uitslag        saveWikiText($page, '', 'second save', false);
1976072486dSGerrit Uitslag        clearstatcache(false, $file);
1986072486dSGerrit Uitslag        $this->assertFileNotExists($file);
1996072486dSGerrit Uitslag
2006072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
2016072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
202*7866d571SSatoshi Sahara        $this->assertCount(2, $revisions);
2036072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
2046072486dSGerrit Uitslag        $this->assertEquals('second save', $revinfo['sum']);
2056072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_DELETE, $revinfo['type']);
2066072486dSGerrit Uitslag        $this->assertEquals(-10, $revinfo['sizechange']);
207ea466a98SMichael Hamann        $this->assertFileExists(wikiFN($page, $revinfo['date']));
2086072486dSGerrit Uitslag
209aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
2106072486dSGerrit Uitslag
2116072486dSGerrit Uitslag        // create external edit
2126072486dSGerrit Uitslag        file_put_contents($file, 'teststring5');
2136072486dSGerrit Uitslag
214aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
2156072486dSGerrit Uitslag
2166072486dSGerrit Uitslag        // save on top of external edit
2176072486dSGerrit Uitslag        saveWikiText($page, 'teststring6', 'third save', false);
2186072486dSGerrit Uitslag        clearstatcache(false, $file);
2196072486dSGerrit Uitslag
2206072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
2216072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
222*7866d571SSatoshi Sahara        $this->assertCount(4, $revisions); // two more revisions now!
2236072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
2246072486dSGerrit Uitslag        $this->assertEquals('third save', $revinfo['sum']);
2256072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
2266072486dSGerrit Uitslag        $this->assertEquals(0, $revinfo['sizechange']);
227ea466a98SMichael Hamann        $this->assertFileExists(wikiFN($page, $revinfo['date']));
2286072486dSGerrit Uitslag
2296072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[1]);
230*7866d571SSatoshi Sahara        $this->assertEquals('created - external edit', $revinfo['sum']);
231*7866d571SSatoshi Sahara        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
2326072486dSGerrit Uitslag        $this->assertEquals(11, $revinfo['sizechange']);
233ea466a98SMichael Hamann        $this->assertFileExists(wikiFN($page, $revinfo['date']));
2346072486dSGerrit Uitslag
2356072486dSGerrit Uitslag    }
2366072486dSGerrit Uitslag
2376072486dSGerrit Uitslag    /**
2386072486dSGerrit Uitslag     * Execute a whole bunch of saves on the same page and check the results
2396072486dSGerrit Uitslag     */
2406072486dSGerrit Uitslag    function test_saveexternalasfirst() {
2416072486dSGerrit Uitslag        $page = 'page3';
2426072486dSGerrit Uitslag        $file = wikiFN($page);
2436072486dSGerrit Uitslag
2446072486dSGerrit Uitslag        // create the page
2456072486dSGerrit Uitslag        $this->assertFileNotExists($file);
2466072486dSGerrit Uitslag
2476072486dSGerrit Uitslag        // create external edit
2486072486dSGerrit Uitslag        file_put_contents($file, 'teststring');
2496072486dSGerrit Uitslag
250aaf4f55eSAndreas Gohr        $this->waitForTick(true); // wait for new revision ID
2516072486dSGerrit Uitslag
2526072486dSGerrit Uitslag        // save on top of external edit
2536072486dSGerrit Uitslag        saveWikiText($page, 'teststring6', 'first save', false);
2546072486dSGerrit Uitslag        clearstatcache(false, $file);
2556072486dSGerrit Uitslag
2566072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
2576072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
258*7866d571SSatoshi Sahara        $this->assertCount(2, $revisions); // two more revisions now!
2596072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
2606072486dSGerrit Uitslag        $this->assertEquals('first save', $revinfo['sum']);
2616072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
2626072486dSGerrit Uitslag        $this->assertEquals(1, $revinfo['sizechange']);
2636072486dSGerrit Uitslag
2646072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[1]);
265*7866d571SSatoshi Sahara        $this->assertEquals('created - external edit', $revinfo['sum']);
266*7866d571SSatoshi Sahara        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
2676072486dSGerrit Uitslag        $this->assertEquals(10, $revinfo['sizechange']);
2686072486dSGerrit Uitslag
2696072486dSGerrit Uitslag    }
2706072486dSGerrit Uitslag
2716072486dSGerrit Uitslag    /**
2726072486dSGerrit Uitslag     * Execute a whole bunch of saves on the same page and check the results
2736072486dSGerrit Uitslag     */
2746072486dSGerrit Uitslag    function test_savesequenceexternaldeleteedit() {
2756072486dSGerrit Uitslag        $page = 'page4';
2766072486dSGerrit Uitslag        $file = wikiFN($page);
2776072486dSGerrit Uitslag
2786072486dSGerrit Uitslag        // create the page
2796072486dSGerrit Uitslag        $this->assertFileNotExists($file);
2806072486dSGerrit Uitslag        saveWikiText($page, 'teststring', 'first save', false);
2816072486dSGerrit Uitslag        $this->assertFileExists($file);
2826072486dSGerrit Uitslag        $lastmod = filemtime($file);
2836072486dSGerrit Uitslag
2846072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
2856072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
286*7866d571SSatoshi Sahara        $this->assertCount(1, $revisions);
2876072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
2886072486dSGerrit Uitslag        $this->assertEquals('first save', $revinfo['sum']);
2896072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
2906072486dSGerrit Uitslag        $this->assertEquals(10, $revinfo['sizechange']);
2916072486dSGerrit Uitslag
292aaf4f55eSAndreas Gohr        $this->waitForTick(true); // wait for new revision ID
2936072486dSGerrit Uitslag
2946072486dSGerrit Uitslag
2956072486dSGerrit Uitslag        // create external delete
2966072486dSGerrit Uitslag        unlink($file);
2976072486dSGerrit Uitslag        clearstatcache(false, $file);
2986072486dSGerrit Uitslag
299aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
3006072486dSGerrit Uitslag
3016072486dSGerrit Uitslag        // save on top of external delete. save is seen as creation
3026072486dSGerrit Uitslag        saveWikiText($page, 'teststring6', 'second save', false);
3036072486dSGerrit Uitslag        clearstatcache(false, $file);
3046072486dSGerrit Uitslag
3056072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
3066072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
307*7866d571SSatoshi Sahara        $this->assertCount(2, $revisions); // one more revisions now!
3086072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
3096072486dSGerrit Uitslag        $this->assertEquals('second save', $revinfo['sum']);
3106072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
3116072486dSGerrit Uitslag        $this->assertEquals(11, $revinfo['sizechange']);
3126072486dSGerrit Uitslag
3136072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[1]);
3146072486dSGerrit Uitslag        $this->assertEquals('first save', $revinfo['sum']);
3156072486dSGerrit Uitslag
3166072486dSGerrit Uitslag    }
3176072486dSGerrit Uitslag
3186072486dSGerrit Uitslag    /**
3196072486dSGerrit Uitslag     * Execute a whole bunch of saves on the same page and check the results
3206072486dSGerrit Uitslag     */
3216072486dSGerrit Uitslag    function test_savesequencerevert() {
3226072486dSGerrit Uitslag        global $REV;
3236072486dSGerrit Uitslag
3246072486dSGerrit Uitslag        $page = 'page5';
3256072486dSGerrit Uitslag        $file = wikiFN($page);
3266072486dSGerrit Uitslag
3276072486dSGerrit Uitslag        // create the page
3286072486dSGerrit Uitslag        $this->assertFileNotExists($file);
3296072486dSGerrit Uitslag        saveWikiText($page, 'teststring', 'first save', false);
3306072486dSGerrit Uitslag        $this->assertFileExists($file);
3316072486dSGerrit Uitslag        $lastmod = filemtime($file);
3326072486dSGerrit Uitslag
3336072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
3346072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
335*7866d571SSatoshi Sahara        $this->assertCount(1, $revisions);
3366072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
3376072486dSGerrit Uitslag        $this->assertEquals('first save', $revinfo['sum']);
3386072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']);
3396072486dSGerrit Uitslag        $this->assertEquals(10, $revinfo['sizechange']);
3406072486dSGerrit Uitslag
341aaf4f55eSAndreas Gohr        $this->waitForTick(true); // wait for new revision ID
3426072486dSGerrit Uitslag
3436072486dSGerrit Uitslag        // save with same content should be ignored
3446072486dSGerrit Uitslag        saveWikiText($page, 'teststring', 'second save', false);
3456072486dSGerrit Uitslag        clearstatcache(false, $file);
3466072486dSGerrit Uitslag        $this->assertEquals($lastmod, filemtime($file));
3476072486dSGerrit Uitslag
3486072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
3496072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
3506072486dSGerrit Uitslag        $this->assertEquals(1, count($revisions));
3516072486dSGerrit Uitslag
3526072486dSGerrit Uitslag        // update the page with new text
3536072486dSGerrit Uitslag        saveWikiText($page, 'teststring2long', 'third save', false);
3546072486dSGerrit Uitslag        clearstatcache(false, $file);
3556072486dSGerrit Uitslag        $newmod = filemtime($file);
3566072486dSGerrit Uitslag        $this->assertNotEquals($lastmod, $newmod);
3576072486dSGerrit Uitslag        $lastmod = $newmod;
3586072486dSGerrit Uitslag        $revertrev = $newmod;
3596072486dSGerrit Uitslag
3606072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
3616072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
362*7866d571SSatoshi Sahara        $this->assertCount(2, $revisions);
3636072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
3646072486dSGerrit Uitslag        $this->assertEquals('third save', $revinfo['sum']);
3656072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
3666072486dSGerrit Uitslag        $this->assertEquals(5, $revinfo['sizechange']);
3676072486dSGerrit Uitslag
368aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
3696072486dSGerrit Uitslag
3706072486dSGerrit Uitslag        // add a minor edit (unauthenticated)
3716072486dSGerrit Uitslag        saveWikiText($page, 'teststring3long', 'fourth save', true);
3726072486dSGerrit Uitslag        clearstatcache(false, $file);
3736072486dSGerrit Uitslag        $newmod = filemtime($file);
3746072486dSGerrit Uitslag        $this->assertNotEquals($lastmod, $newmod);
3756072486dSGerrit Uitslag        $lastmod = $newmod;
3766072486dSGerrit Uitslag
3776072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
3786072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
379*7866d571SSatoshi Sahara        $this->assertCount(3, $revisions);
3806072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
3816072486dSGerrit Uitslag        $this->assertEquals('fourth save', $revinfo['sum']);
3826072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']);
3836072486dSGerrit Uitslag        $this->assertEquals(0, $revinfo['sizechange']);
3846072486dSGerrit Uitslag
385aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
3866072486dSGerrit Uitslag
3876072486dSGerrit Uitslag        // add a minor edit (authenticated)
3886072486dSGerrit Uitslag        $_SERVER['REMOTE_USER'] = 'user';
3896072486dSGerrit Uitslag        saveWikiText($page, 'teststring4', 'fifth save', true);
3906072486dSGerrit Uitslag        clearstatcache(false, $file);
3916072486dSGerrit Uitslag        $newmod = filemtime($file);
3926072486dSGerrit Uitslag        $this->assertNotEquals($lastmod, $newmod);
3936072486dSGerrit Uitslag        $lastmod = $newmod;
3946072486dSGerrit Uitslag
3956072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
3966072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
397*7866d571SSatoshi Sahara        $this->assertCount(4, $revisions);
3986072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
3996072486dSGerrit Uitslag        $this->assertEquals('fifth save', $revinfo['sum']);
4006072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_MINOR_EDIT, $revinfo['type']);
4016072486dSGerrit Uitslag        $this->assertEquals(-4, $revinfo['sizechange']);
4026072486dSGerrit Uitslag
403aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
4046072486dSGerrit Uitslag
4056072486dSGerrit Uitslag        // restore
4066072486dSGerrit Uitslag        $REV = $revertrev;
4076072486dSGerrit Uitslag        saveWikiText($page, 'teststring2long', 'sixth save', true);
4086072486dSGerrit Uitslag        clearstatcache(false, $file);
4096072486dSGerrit Uitslag        $this->assertFileExists($file);
4106072486dSGerrit Uitslag        $newmod = filemtime($file);
4116072486dSGerrit Uitslag        $this->assertNotEquals($lastmod, $newmod);
4126072486dSGerrit Uitslag
4136072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
4146072486dSGerrit Uitslag        $revisions = $pagelog->getRevisions(-1, 200);
415*7866d571SSatoshi Sahara        $this->assertCount(5, $revisions);
4166072486dSGerrit Uitslag        $revinfo = $pagelog->getRevisionInfo($revisions[0]);
4176072486dSGerrit Uitslag        $this->assertEquals('sixth save', $revinfo['sum']);
4186072486dSGerrit Uitslag        $this->assertEquals(DOKU_CHANGE_TYPE_REVERT, $revinfo['type']);
4196072486dSGerrit Uitslag        $this->assertEquals($REV, $revinfo['extra']);
4206072486dSGerrit Uitslag        $this->assertEquals(4, $revinfo['sizechange']);
4216072486dSGerrit Uitslag        $REV = '';
4226072486dSGerrit Uitslag    }
4236072486dSGerrit Uitslag
424023953f0SAndreas Gohr}
425