xref: /dokuwiki/_test/tests/inc/common_saveWikiText.test.php (revision 8fb3ff96577de597f80427aa9e8e6748f7ced775)
1023953f0SAndreas Gohr<?php
2023953f0SAndreas Gohr
30c3a5702SAndreas Gohruse dokuwiki\ChangeLog\PageChangeLog;
40c3a5702SAndreas Gohr
53d3f6056SSatoshi Sahara/**
63d3f6056SSatoshi Sahara * saveWikiText() stores files in pages/, attic/ and adds entries to changelog
73d3f6056SSatoshi Sahara */
8023953f0SAndreas Gohrclass common_saveWikiText_test extends DokuWikiTest {
93d3f6056SSatoshi Sahara
10ea466a98SMichael Hamann    /** Delay writes of old revisions by a second. */
11ea466a98SMichael Hamann    public function handle_write(Doku_Event $event, $param) {
12ea466a98SMichael Hamann        if ($event->data[3] !== false) {
13ea466a98SMichael Hamann            $this->waitForTick();
14ea466a98SMichael Hamann        }
15ea466a98SMichael Hamann    }
16023953f0SAndreas Gohr
17023953f0SAndreas Gohr    /**
183c425c43SSatoshi Sahara     * assertions against changelog entries and attic after saveWikiText()
193c425c43SSatoshi Sahara     */
203c425c43SSatoshi Sahara    private function checkChangeLogAfterNormalSave(
213c425c43SSatoshi Sahara        PageChangeLog $pagelog,
2292fda7f4SSatoshi Sahara        $expectedRevs,          // @param int
2392fda7f4SSatoshi Sahara        &$expectedLastEntry     // @param array, pass by reference
243c425c43SSatoshi Sahara    ) {
253c425c43SSatoshi Sahara        $revisions = $pagelog->getRevisions(-1, 200);
263c425c43SSatoshi Sahara        $this->assertCount($expectedRevs, $revisions);
273c425c43SSatoshi Sahara        $this->assertCount($expectedRevs, array_unique($revisions), 'date duplicated in changelog');
283c425c43SSatoshi Sahara        // last revision
293c425c43SSatoshi Sahara        $lastRevInfo = $pagelog->getRevisionInfo($revisions[0]);
303c425c43SSatoshi Sahara        $expectedLastEntry += $lastRevInfo;
313c425c43SSatoshi Sahara        $this->assertEquals($expectedLastEntry, $lastRevInfo);
323c425c43SSatoshi Sahara        // current revision
333c425c43SSatoshi Sahara        $currentRevInfo = $pagelog->getCurrentRevisionInfo();
343c425c43SSatoshi Sahara        $this->assertEquals($currentRevInfo, $lastRevInfo, 'current & last revs should be identical');
353c425c43SSatoshi Sahara        // attic
363c425c43SSatoshi Sahara        $attic = wikiFN($lastRevInfo['id'], $lastRevInfo['date']);
373c425c43SSatoshi Sahara        $this->assertFileExists($attic, 'file missing in attic');
383c425c43SSatoshi Sahara        $files = count(glob(dirname($attic).'/'.noNS($lastRevInfo['id']).'.*'));
393c425c43SSatoshi Sahara        $this->assertLessThanOrEqual($expectedRevs, $files, 'detectExternalEdit() should not add too often old revs');
403c425c43SSatoshi Sahara    }
413c425c43SSatoshi Sahara
423c425c43SSatoshi Sahara    /**
433c425c43SSatoshi Sahara     * assertions against changelog entries and attic after external edit, create or deletion of page
443c425c43SSatoshi Sahara     */
453c425c43SSatoshi Sahara    private function checkChangeLogAfterExternalEdit(
463c425c43SSatoshi Sahara        PageChangeLog $pagelog,
4792fda7f4SSatoshi Sahara        $expectedRevs,          // @param int
4892fda7f4SSatoshi Sahara        $expectedLastEntry,     // @param array
4992fda7f4SSatoshi Sahara        &$expectedCurrentEntry  // @param array, pass by reference
503c425c43SSatoshi Sahara    ) {
513c425c43SSatoshi Sahara        $revisions = $pagelog->getRevisions(-1, 200);
523c425c43SSatoshi Sahara        $this->assertCount($expectedRevs, $revisions);
533c425c43SSatoshi Sahara        $this->assertCount($expectedRevs, array_unique($revisions), 'date duplicated in changelog');
543c425c43SSatoshi Sahara        // last revision
553c425c43SSatoshi Sahara        if ($expectedRevs > 0) {
563c425c43SSatoshi Sahara            $lastRevInfo = $pagelog->getRevisionInfo($revisions[0]);
573c425c43SSatoshi Sahara            $expectedLastEntry += $lastRevInfo;
583c425c43SSatoshi Sahara            $this->assertEquals($expectedLastEntry, $lastRevInfo);
593c425c43SSatoshi Sahara        } else {
603c425c43SSatoshi Sahara            $this->assertFalse($pagelog->lastRevision(), 'changelog file does not yet exist');
613c425c43SSatoshi Sahara        }
623c425c43SSatoshi Sahara        // current revision
633c425c43SSatoshi Sahara        $currentRevInfo = $pagelog->getCurrentRevisionInfo();
643c425c43SSatoshi Sahara        $this->assertArrayHasKey('timestamp', $currentRevInfo, 'should be external revision');
653c425c43SSatoshi Sahara        $expectedCurrentEntry += $currentRevInfo;
663c425c43SSatoshi Sahara        if ($expectedRevs > 0) {
673c425c43SSatoshi Sahara            $this->assertEquals($expectedCurrentEntry, $currentRevInfo);
683c425c43SSatoshi Sahara
693c425c43SSatoshi Sahara        }
703c425c43SSatoshi Sahara        // attic
713c425c43SSatoshi Sahara        $attic = wikiFN($currentRevInfo['id'], $currentRevInfo['date']);
723c425c43SSatoshi Sahara        $this->assertFileNotExists($attic, 'page does not yet exist in attic');
733c425c43SSatoshi Sahara    }
743c425c43SSatoshi Sahara
753c425c43SSatoshi Sahara
763c425c43SSatoshi Sahara    /**
77023953f0SAndreas Gohr     * Execute a whole bunch of saves on the same page and check the results
783d3f6056SSatoshi Sahara     * TEST 1
793d3f6056SSatoshi Sahara     *  1.1 create a page
803d3f6056SSatoshi Sahara     *  1.2 save with same content should be ignored
813d3f6056SSatoshi Sahara     *  1.3 update the page with new text
823c425c43SSatoshi Sahara     *  1.4 add a minor edit (unauthenticated, minor not allowable)
833d3f6056SSatoshi Sahara     *  1.5 add a minor edit (authenticated)
843d3f6056SSatoshi Sahara     *  1.6 delete
853d3f6056SSatoshi Sahara     *  1.7 restore
863d3f6056SSatoshi Sahara     *  1.8 external edit
873c425c43SSatoshi Sahara     *  1.9 edit and save on top of external edit
88023953f0SAndreas Gohr     */
893d3f6056SSatoshi Sahara    function test_savesequence1() {
90023953f0SAndreas Gohr        global $REV;
91023953f0SAndreas Gohr
92023953f0SAndreas Gohr        $page = 'page';
93023953f0SAndreas Gohr        $file = wikiFN($page);
943c425c43SSatoshi Sahara        $this->assertFileNotExists($file);
95023953f0SAndreas Gohr
963d3f6056SSatoshi Sahara        // 1.1 create a page
973d3f6056SSatoshi Sahara        saveWikiText($page, 'teststring', '1st save', false);
9892fda7f4SSatoshi Sahara        clearstatcache(false, $file);
99023953f0SAndreas Gohr        $this->assertFileExists($file);
100023953f0SAndreas Gohr        $lastmod = filemtime($file);
1013c425c43SSatoshi Sahara        $expectedRevs = 1;
1023d3f6056SSatoshi Sahara        $expect = array(
1033d3f6056SSatoshi Sahara            'date' => $lastmod,
1043d3f6056SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_CREATE,
1053d3f6056SSatoshi Sahara            'sum'  => '1st save',
1063d3f6056SSatoshi Sahara            'sizechange' => 10, // = strlen('teststring')
1073d3f6056SSatoshi Sahara        );
108023953f0SAndreas Gohr
109023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
1103c425c43SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
111023953f0SAndreas Gohr
112aaf4f55eSAndreas Gohr        $this->waitForTick(true); // wait for new revision ID
113023953f0SAndreas Gohr
1143d3f6056SSatoshi Sahara        // 1.2 save with same content should be ignored
1153d3f6056SSatoshi Sahara        saveWikiText($page, 'teststring', '2nd save', false);
116023953f0SAndreas Gohr        clearstatcache(false, $file);
117023953f0SAndreas Gohr        $this->assertEquals($lastmod, filemtime($file));
118023953f0SAndreas Gohr
119023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
120023953f0SAndreas Gohr        $revisions = $pagelog->getRevisions(-1, 200);
1217866d571SSatoshi Sahara        $this->assertCount(1, $revisions);
122023953f0SAndreas Gohr
1233d3f6056SSatoshi Sahara        // 1.3 update the page with new text
1243d3f6056SSatoshi Sahara        saveWikiText($page, 'teststring2long', '3rd save', false);
125023953f0SAndreas Gohr        clearstatcache(false, $file);
126023953f0SAndreas Gohr        $newmod = filemtime($file);
127023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
128023953f0SAndreas Gohr        $lastmod = $newmod;
1293c425c43SSatoshi Sahara        $expectedRevs = 2;
1303d3f6056SSatoshi Sahara        $expect = array(
1313d3f6056SSatoshi Sahara            'date' => $lastmod,
1323d3f6056SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_EDIT,
1333d3f6056SSatoshi Sahara            'sum'  => '3rd save',
1343d3f6056SSatoshi Sahara            'sizechange' => 5,
1353d3f6056SSatoshi Sahara        );
136023953f0SAndreas Gohr
137023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
1383c425c43SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
139023953f0SAndreas Gohr
140aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
141023953f0SAndreas Gohr
1423c425c43SSatoshi Sahara        // 1.4 add a minor edit (unauthenticated, minor not allowable)
1433d3f6056SSatoshi Sahara        saveWikiText($page, 'teststring3long', '4th save', true);
144023953f0SAndreas Gohr        clearstatcache(false, $file);
145023953f0SAndreas Gohr        $newmod = filemtime($file);
146023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
147023953f0SAndreas Gohr        $lastmod = $newmod;
1483c425c43SSatoshi Sahara        $expectedRevs = 3;
1493d3f6056SSatoshi Sahara        $expect = array(
1503d3f6056SSatoshi Sahara            'date' => $lastmod,
1513d3f6056SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_EDIT,
1523d3f6056SSatoshi Sahara            'sum'  => '4th save',
1533d3f6056SSatoshi Sahara            'sizechange' => 0,
1543d3f6056SSatoshi Sahara        );
155023953f0SAndreas Gohr
156023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
1573c425c43SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
158023953f0SAndreas Gohr
159aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
160023953f0SAndreas Gohr
1613d3f6056SSatoshi Sahara        // 1.5 add a minor edit (authenticated)
162023953f0SAndreas Gohr        $_SERVER['REMOTE_USER'] = 'user';
1633d3f6056SSatoshi Sahara        saveWikiText($page, 'teststring4', '5th save', true);
164023953f0SAndreas Gohr        clearstatcache(false, $file);
165023953f0SAndreas Gohr        $newmod = filemtime($file);
166023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
167023953f0SAndreas Gohr        $lastmod = $newmod;
1683c425c43SSatoshi Sahara        $expectedRevs = 4;
1693d3f6056SSatoshi Sahara        $expect = array(
1703d3f6056SSatoshi Sahara            'date' => $lastmod,
1713d3f6056SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_MINOR_EDIT,
1723d3f6056SSatoshi Sahara            'sum'  => '5th save',
1733d3f6056SSatoshi Sahara            'sizechange' => -4,
1743d3f6056SSatoshi Sahara        );
175023953f0SAndreas Gohr
176023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
1773c425c43SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
178023953f0SAndreas Gohr
179aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
180023953f0SAndreas Gohr
1813d3f6056SSatoshi Sahara        // 1.6 delete
1823d3f6056SSatoshi Sahara        saveWikiText($page, '', '6th save', false);
183023953f0SAndreas Gohr        clearstatcache(false, $file);
184023953f0SAndreas Gohr        $this->assertFileNotExists($file);
1853c425c43SSatoshi Sahara        $expectedRevs = 5;
1863d3f6056SSatoshi Sahara        $expect = array(
1873d3f6056SSatoshi Sahara          //'date' => $lastmod, // ignore from lastRev assertion, but confirm attic file existence
1883d3f6056SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_DELETE,
1893d3f6056SSatoshi Sahara            'sum'  => '6th save',
1903d3f6056SSatoshi Sahara            'sizechange' => -11,
1913d3f6056SSatoshi Sahara        );
192023953f0SAndreas Gohr
193023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
1943c425c43SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
195023953f0SAndreas Gohr
196aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
197023953f0SAndreas Gohr
1983d3f6056SSatoshi Sahara        // 1.7 restore
199023953f0SAndreas Gohr        $REV = $lastmod;
2003d3f6056SSatoshi Sahara        saveWikiText($page, 'teststring4', '7th save', true);
201023953f0SAndreas Gohr        clearstatcache(false, $file);
202023953f0SAndreas Gohr        $this->assertFileExists($file);
203023953f0SAndreas Gohr        $newmod = filemtime($file);
204023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
205023953f0SAndreas Gohr        $lastmod = $newmod;
2063c425c43SSatoshi Sahara        $expectedRevs = 6;
2073d3f6056SSatoshi Sahara        $expect = array(
2083d3f6056SSatoshi Sahara            'date' => $lastmod,
2093d3f6056SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_REVERT,
2103d3f6056SSatoshi Sahara            'sum'  => '7th save',
2113d3f6056SSatoshi Sahara            'sizechange' => 11,
2123d3f6056SSatoshi Sahara        );
213023953f0SAndreas Gohr
214023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
2153c425c43SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
216023953f0SAndreas Gohr        $REV = '';
217023953f0SAndreas Gohr
218aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
219023953f0SAndreas Gohr
2203d3f6056SSatoshi Sahara        // 1.8 external edit
2213d3f6056SSatoshi Sahara        file_put_contents($file, 'teststring5 external edit');
222023953f0SAndreas Gohr        clearstatcache(false, $file);
223023953f0SAndreas Gohr        $newmod = filemtime($file);
224023953f0SAndreas Gohr        $this->assertNotEquals($lastmod, $newmod);
225023953f0SAndreas Gohr        $lastmod = $newmod;
2263c425c43SSatoshi Sahara        $expectedRevs = 6; // external edit is not yet in changelog
2273d3f6056SSatoshi Sahara        $expectExternal = array(
2283d3f6056SSatoshi Sahara            'date' => $lastmod,
2293d3f6056SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_EDIT,
2303d3f6056SSatoshi Sahara            'sum'  => 'external edit',
2313d3f6056SSatoshi Sahara            'sizechange' => 14,
2323d3f6056SSatoshi Sahara        );
2333d3f6056SSatoshi Sahara
2343d3f6056SSatoshi Sahara        $pagelog = new PageChangeLog($page);
2353c425c43SSatoshi Sahara        $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal);
2363d3f6056SSatoshi Sahara
2373d3f6056SSatoshi Sahara        $this->waitForTick(); // wait for new revision ID
2383d3f6056SSatoshi Sahara
2393d3f6056SSatoshi Sahara        // 1.9 save on top of external edit
2403d3f6056SSatoshi Sahara        saveWikiText($page, 'teststring6', '8th save', false);
2413d3f6056SSatoshi Sahara        clearstatcache(false, $file);
2423d3f6056SSatoshi Sahara        $newmod = filemtime($file);
2433d3f6056SSatoshi Sahara        $this->assertNotEquals($lastmod, $newmod);
2443d3f6056SSatoshi Sahara        $lastmod = $newmod;
2453c425c43SSatoshi Sahara        $expectedRevs = 8;
2463d3f6056SSatoshi Sahara        $expect = array(
2473d3f6056SSatoshi Sahara            'date' => $lastmod,
2483d3f6056SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_EDIT,
2493d3f6056SSatoshi Sahara            'sum'  => '8th save',
2503d3f6056SSatoshi Sahara            'sizechange' => -14,
2513d3f6056SSatoshi Sahara        );
252023953f0SAndreas Gohr
253023953f0SAndreas Gohr        $pagelog = new PageChangeLog($page);
2543c425c43SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
255023953f0SAndreas Gohr    }
2566072486dSGerrit Uitslag
2576072486dSGerrit Uitslag    /**
2586072486dSGerrit Uitslag     * Execute a whole bunch of saves on the same page and check the results
2593d3f6056SSatoshi Sahara     * using $this->handle_write() in event IO_WIKIPAGE_WRITE
2603c425c43SSatoshi Sahara     * TEST 2 - create a page externally in 2.3, while external edit in Test 1.8
2613d3f6056SSatoshi Sahara     *  2.1 create a page
2623d3f6056SSatoshi Sahara     *  2.2 delete
2633d3f6056SSatoshi Sahara     *  2.3 externally create the page
2643c425c43SSatoshi Sahara     *  2.4 edit and save on top of external edit
2653c425c43SSatoshi Sahara     *  2.5 external edit
2663c425c43SSatoshi Sahara     *  2.6 edit and save on top of external edit, again
2676072486dSGerrit Uitslag     */
2683d3f6056SSatoshi Sahara    function test_savesequence2() {
269ea466a98SMichael Hamann        // add an additional delay when saving files to make sure
270ea466a98SMichael Hamann        // nobody relies on the saving happening in the same second
271e1d9dcc8SAndreas Gohr        /** @var $EVENT_HANDLER \dokuwiki\Extension\EventHandler */
272ea466a98SMichael Hamann        global $EVENT_HANDLER;
273ea466a98SMichael Hamann        $EVENT_HANDLER->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, 'handle_write');
274ea466a98SMichael Hamann
2756072486dSGerrit Uitslag        $page = 'page2';
2766072486dSGerrit Uitslag        $file = wikiFN($page);
2773c425c43SSatoshi Sahara        $this->assertFileNotExists($file);
2786072486dSGerrit Uitslag
2793d3f6056SSatoshi Sahara        // 2.1 create a page
2803d3f6056SSatoshi Sahara        saveWikiText($page, 'teststring', 'Test 2, 1st save', false);
28192fda7f4SSatoshi Sahara        clearstatcache(false, $file);
2826072486dSGerrit Uitslag        $this->assertFileExists($file);
2836072486dSGerrit Uitslag        $lastmod = filemtime($file);
2843c425c43SSatoshi Sahara        $expectedRevs = 1;
2853d3f6056SSatoshi Sahara        $expect = array(
2863d3f6056SSatoshi Sahara            'date' => $lastmod,
2873d3f6056SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_CREATE,
2883d3f6056SSatoshi Sahara            'sum'  => 'Test 2, 1st save',
2893d3f6056SSatoshi Sahara            'sizechange' => 10, // = strlen('teststring')
2903d3f6056SSatoshi Sahara        );
2916072486dSGerrit Uitslag
2926072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
2933c425c43SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
2946072486dSGerrit Uitslag
295aaf4f55eSAndreas Gohr        $this->waitForTick(true); // wait for new revision ID
2966072486dSGerrit Uitslag
2973d3f6056SSatoshi Sahara        // 2.2 delete
2983d3f6056SSatoshi Sahara        saveWikiText($page, '', 'Test 2, 2nd save', false);
2996072486dSGerrit Uitslag        clearstatcache(false, $file);
3006072486dSGerrit Uitslag        $this->assertFileNotExists($file);
3013c425c43SSatoshi Sahara        $expectedRevs = 2;
3023d3f6056SSatoshi Sahara        $expect = array(
3033d3f6056SSatoshi Sahara          //'date' => $lastmod, // ignore from lastRev assertion, but confirm attic file existence
3043d3f6056SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_DELETE,
3053d3f6056SSatoshi Sahara            'sum'  => 'Test 2, 2nd save',
3063d3f6056SSatoshi Sahara            'sizechange' => -10,
3073d3f6056SSatoshi Sahara        );
3086072486dSGerrit Uitslag
3096072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
3103c425c43SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
3116072486dSGerrit Uitslag
312aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
3136072486dSGerrit Uitslag
3143d3f6056SSatoshi Sahara        // 2.3 externally create the page
3156072486dSGerrit Uitslag        file_put_contents($file, 'teststring5');
3163d3f6056SSatoshi Sahara        clearstatcache(false, $file);
3173d3f6056SSatoshi Sahara        $lastmod = filemtime($file);
3183c425c43SSatoshi Sahara        $expectedRevs = 2; // external edit is not yet in changelog
3193d3f6056SSatoshi Sahara        $expectExternal = array(
3203d3f6056SSatoshi Sahara            'date' => $lastmod,
3213d3f6056SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_CREATE,
3223d3f6056SSatoshi Sahara            'sum'  => 'created - external edit',
3233d3f6056SSatoshi Sahara            'sizechange' => 11,
3243d3f6056SSatoshi Sahara        );
3253d3f6056SSatoshi Sahara
3263d3f6056SSatoshi Sahara        $pagelog = new PageChangeLog($page);
3273c425c43SSatoshi Sahara        $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal);
3286072486dSGerrit Uitslag
329aaf4f55eSAndreas Gohr        $this->waitForTick(); // wait for new revision ID
3306072486dSGerrit Uitslag
3313d3f6056SSatoshi Sahara        // 2.4 save on top of external edit
3323d3f6056SSatoshi Sahara        saveWikiText($page, 'teststring6', 'Test 2, 3rd save', false);
3336072486dSGerrit Uitslag        clearstatcache(false, $file);
3343d3f6056SSatoshi Sahara        $newmod = filemtime($file);
3353d3f6056SSatoshi Sahara        $this->assertNotEquals($lastmod, $newmod);
3363d3f6056SSatoshi Sahara        $lastmod = $newmod;
3373c425c43SSatoshi Sahara        $expectedRevs = 4; // two more revisions now!
3383d3f6056SSatoshi Sahara        $expect = array(
3393d3f6056SSatoshi Sahara            'date' => $lastmod,
3403d3f6056SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_EDIT,
3413d3f6056SSatoshi Sahara            'sum'  => 'Test 2, 3rd save',
3423d3f6056SSatoshi Sahara            'sizechange' => 0,
3433d3f6056SSatoshi Sahara        );
3446072486dSGerrit Uitslag
3456072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
3463c425c43SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
3476072486dSGerrit Uitslag
3483c425c43SSatoshi Sahara        $this->waitForTick(); // wait for new revision ID
3493c425c43SSatoshi Sahara
3503c425c43SSatoshi Sahara         // 2.5 external edit
3513c425c43SSatoshi Sahara        file_put_contents($file, 'teststring7 external edit2');
3523c425c43SSatoshi Sahara        clearstatcache(false, $file);
3533c425c43SSatoshi Sahara        $newmod = filemtime($file);
3543c425c43SSatoshi Sahara        $this->assertNotEquals($lastmod, $newmod);
3553c425c43SSatoshi Sahara        $lastmod = $newmod;
3563c425c43SSatoshi Sahara        $expectedRevs = 4; // external edit is not yet in changelog
3573c425c43SSatoshi Sahara        $expectExternal = array(
3583c425c43SSatoshi Sahara            'date' => $lastmod,
3593c425c43SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_EDIT,
3603c425c43SSatoshi Sahara            'sum'  => 'external edit',
3613c425c43SSatoshi Sahara            'sizechange' => 15,
3623c425c43SSatoshi Sahara        );
3633c425c43SSatoshi Sahara
3643c425c43SSatoshi Sahara        $pagelog = new PageChangeLog($page);
3653c425c43SSatoshi Sahara        $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal);
3663c425c43SSatoshi Sahara
3673c425c43SSatoshi Sahara        $this->waitForTick(); // wait for new revision ID
3683c425c43SSatoshi Sahara
3693c425c43SSatoshi Sahara        // 2.6 save on top of external edit, again
3703c425c43SSatoshi Sahara        saveWikiText($page, 'teststring8', 'Test 2, 4th save', false);
3713c425c43SSatoshi Sahara        clearstatcache(false, $file);
3723c425c43SSatoshi Sahara        $newmod = filemtime($file);
3733c425c43SSatoshi Sahara        $this->assertNotEquals($lastmod, $newmod);
3743c425c43SSatoshi Sahara        $lastmod = $newmod;
3753c425c43SSatoshi Sahara        $expectedRevs = 6; // two more revisions now!
3763c425c43SSatoshi Sahara        $expect = array(
3773c425c43SSatoshi Sahara            'date' => $lastmod,
3783c425c43SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_EDIT,
3793c425c43SSatoshi Sahara            'sum'  => 'Test 2, 4th save',
3803c425c43SSatoshi Sahara            'sizechange' => -15,
3813c425c43SSatoshi Sahara        );
3823c425c43SSatoshi Sahara
3833c425c43SSatoshi Sahara        $pagelog = new PageChangeLog($page);
3843c425c43SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
3856072486dSGerrit Uitslag    }
3866072486dSGerrit Uitslag
3876072486dSGerrit Uitslag    /**
3886072486dSGerrit Uitslag     * Execute a whole bunch of saves on the same page and check the results
3893c425c43SSatoshi Sahara     * TEST 3 - typical page life of bundled page such as wiki:syntax
3903d3f6056SSatoshi Sahara     *  3.1 externally create a page
3913d3f6056SSatoshi Sahara     *  3.2 external edit
3923c425c43SSatoshi Sahara     *  3.3 edit and save on top of external edit
3933d3f6056SSatoshi Sahara     *  3.4 externally delete the page
3946072486dSGerrit Uitslag     */
3953d3f6056SSatoshi Sahara    function test_savesequence3() {
3966072486dSGerrit Uitslag        $page = 'page3';
3976072486dSGerrit Uitslag        $file = wikiFN($page);
3986072486dSGerrit Uitslag
3993d3f6056SSatoshi Sahara        // 3.1 externally create a page
4006072486dSGerrit Uitslag        $this->assertFileNotExists($file);
4016072486dSGerrit Uitslag        file_put_contents($file, 'teststring');
4023d3f6056SSatoshi Sahara        clearstatcache(false, $file);
4033d3f6056SSatoshi Sahara        $lastmod = filemtime($file);
4043c425c43SSatoshi Sahara        $expectedRevs = 0; // external edit is not yet in changelog
4053c425c43SSatoshi Sahara        $expect = false;
4063d3f6056SSatoshi Sahara        $expectExternal = array(
4073d3f6056SSatoshi Sahara            'date' => $lastmod,
4083d3f6056SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_CREATE,
4093d3f6056SSatoshi Sahara            'sum'  => 'created - external edit',
4103d3f6056SSatoshi Sahara            'sizechange' => 10,
4113d3f6056SSatoshi Sahara        );
4123d3f6056SSatoshi Sahara
4133d3f6056SSatoshi Sahara        $pagelog = new PageChangeLog($page);
4143c425c43SSatoshi Sahara        $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal);
4156072486dSGerrit Uitslag
416aaf4f55eSAndreas Gohr        $this->waitForTick(true); // wait for new revision ID
4176072486dSGerrit Uitslag
4183c425c43SSatoshi Sahara        // 3.2 external edit (repeated, still no changelog exists)
4193d3f6056SSatoshi Sahara        file_put_contents($file, 'teststring external edit');
4206072486dSGerrit Uitslag        clearstatcache(false, $file);
4213d3f6056SSatoshi Sahara        $newmod = filemtime($file);
4223d3f6056SSatoshi Sahara        $this->assertNotEquals($lastmod, $newmod);
4233d3f6056SSatoshi Sahara        $lastmod = $newmod;
4243c425c43SSatoshi Sahara        $expectedRevs = 0; // external edit is not yet in changelog
4253d3f6056SSatoshi Sahara        $expectExternal = array(
4263d3f6056SSatoshi Sahara            'date' => $lastmod,
4273c425c43SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_CREATE,  // not DOKU_CHANGE_TYPE_EDIT
4283d3f6056SSatoshi Sahara            'sum'  => 'created - external edit',
4293d3f6056SSatoshi Sahara            'sizechange' => 24,
4303d3f6056SSatoshi Sahara        );
4313d3f6056SSatoshi Sahara
4323d3f6056SSatoshi Sahara        $pagelog = new PageChangeLog($page);
4333c425c43SSatoshi Sahara        $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal);
4343d3f6056SSatoshi Sahara
4353d3f6056SSatoshi Sahara        $this->waitForTick(true); // wait for new revision ID
4363d3f6056SSatoshi Sahara
4373d3f6056SSatoshi Sahara        // 3.3 save on top of external edit
4383d3f6056SSatoshi Sahara        saveWikiText($page, 'teststring1', 'Test 3, first save', false);
4393d3f6056SSatoshi Sahara        clearstatcache(false, $file);
4403d3f6056SSatoshi Sahara        $newmod = filemtime($file);
4413d3f6056SSatoshi Sahara        $this->assertNotEquals($lastmod, $newmod);
4423d3f6056SSatoshi Sahara        $lastmod = $newmod;
4433c425c43SSatoshi Sahara        $expectedRevs = 2; // two more revisions now!
4443d3f6056SSatoshi Sahara        $expect = array(
4453d3f6056SSatoshi Sahara            'date' => $lastmod,
4463d3f6056SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_EDIT,
4473d3f6056SSatoshi Sahara            'sum'  => 'Test 3, first save',
4483d3f6056SSatoshi Sahara            'sizechange' => -13,
4493d3f6056SSatoshi Sahara        );
4506072486dSGerrit Uitslag
4516072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
4523c425c43SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
4533c425c43SSatoshi Sahara
454e21f9472SSatoshi Sahara        // second to last revision record that corresponds to step 3.2 external edit
455e21f9472SSatoshi Sahara        $revs = $pagelog->getRevisions(-1, $expectedRevs);
456e21f9472SSatoshi Sahara        $prevRevInfo = $pagelog->getRevisionInfo($revs[$expectedRevs -1]);
457e21f9472SSatoshi Sahara        unset($expectExternal['timestamp']); // drop timestamp key
458e21f9472SSatoshi Sahara        $this->assertEquals($expectExternal, $prevRevInfo);
4596072486dSGerrit Uitslag
460aaf4f55eSAndreas Gohr        $this->waitForTick(true); // wait for new revision ID
4616072486dSGerrit Uitslag
4623d3f6056SSatoshi Sahara        // 3.4 externally delete the page
4636072486dSGerrit Uitslag        unlink($file);
4643c425c43SSatoshi Sahara        $expectedRevs = 2;
4653d3f6056SSatoshi Sahara        $expectExternal = array(
4663d3f6056SSatoshi Sahara          //'date' => $lastmod,
4673d3f6056SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_DELETE,
4683d3f6056SSatoshi Sahara            'sum'  => 'removed - external edit (Unknown date)',
4693d3f6056SSatoshi Sahara            'sizechange' => -11,
4703d3f6056SSatoshi Sahara        );
4716072486dSGerrit Uitslag
4726072486dSGerrit Uitslag        $pagelog = new PageChangeLog($page);
4733c425c43SSatoshi Sahara        $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal);
4746072486dSGerrit Uitslag    }
4756072486dSGerrit Uitslag
47692fda7f4SSatoshi Sahara    /**
47792fda7f4SSatoshi Sahara     * Execute a whole bunch of saves on the same page and check the results
47892fda7f4SSatoshi Sahara     * TEST 4 - typical page life of bundled page such as wiki:syntax
47992fda7f4SSatoshi Sahara     *  4.1 externally create a page
48092fda7f4SSatoshi Sahara     *  4.2 edit and save
48192fda7f4SSatoshi Sahara     *  4.3 externally edit as a result of a file which has older timestamp than last revision
48292fda7f4SSatoshi Sahara     */
48392fda7f4SSatoshi Sahara    function test_savesequence4() {
48492fda7f4SSatoshi Sahara        $page = 'page4';
48592fda7f4SSatoshi Sahara        $file = wikiFN($page);
48692fda7f4SSatoshi Sahara
48792fda7f4SSatoshi Sahara        // 4.1 externally create a page
48892fda7f4SSatoshi Sahara        $this->assertFileNotExists($file);
48992fda7f4SSatoshi Sahara        file_put_contents($file, 'teststring');
49092fda7f4SSatoshi Sahara        clearstatcache(false, $file);
49192fda7f4SSatoshi Sahara        $lastmod = filemtime($file);
49292fda7f4SSatoshi Sahara        $expectedRevs = 0; // external edit is not yet in changelog
49392fda7f4SSatoshi Sahara        $expect = false;
49492fda7f4SSatoshi Sahara        $expectExternal = array(
49592fda7f4SSatoshi Sahara            'date' => $lastmod,
49692fda7f4SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_CREATE,
49792fda7f4SSatoshi Sahara            'sum'  => 'created - external edit',
49892fda7f4SSatoshi Sahara            'sizechange' => 10,
49992fda7f4SSatoshi Sahara        );
50092fda7f4SSatoshi Sahara
50192fda7f4SSatoshi Sahara        $pagelog = new PageChangeLog($page);
50292fda7f4SSatoshi Sahara        $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal);
50392fda7f4SSatoshi Sahara
50492fda7f4SSatoshi Sahara        $this->waitForTick(true); // wait for new revision ID
50592fda7f4SSatoshi Sahara
50692fda7f4SSatoshi Sahara        // 4.2 edit and save
50792fda7f4SSatoshi Sahara        saveWikiText($page, 'teststring1', 'Test 4, first save', false);
50892fda7f4SSatoshi Sahara        clearstatcache(false, $file);
50992fda7f4SSatoshi Sahara        $newmod = filemtime($file);
51092fda7f4SSatoshi Sahara        $this->assertNotEquals($lastmod, $newmod);
51192fda7f4SSatoshi Sahara        $lastmod = $newmod;
51292fda7f4SSatoshi Sahara        $expectedRevs = 2; // two more revisions now!
51392fda7f4SSatoshi Sahara        $expect = array(
51492fda7f4SSatoshi Sahara            'date' => $lastmod,
51592fda7f4SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_EDIT,
51692fda7f4SSatoshi Sahara            'sum'  => 'Test 4, first save',
51792fda7f4SSatoshi Sahara            'sizechange' => 1,
51892fda7f4SSatoshi Sahara        );
51992fda7f4SSatoshi Sahara
52092fda7f4SSatoshi Sahara        $pagelog = new PageChangeLog($page);
52192fda7f4SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
52292fda7f4SSatoshi Sahara
52392fda7f4SSatoshi Sahara        $this->waitForTick(true); // wait for new revision ID
52492fda7f4SSatoshi Sahara
52592fda7f4SSatoshi Sahara        // 4.3 externally edit as a result of a file which has older timestamp than last revision
52692fda7f4SSatoshi Sahara        unlink($file);
52792fda7f4SSatoshi Sahara        file_put_contents($file, 'teststring fake 1 hout past');
52892fda7f4SSatoshi Sahara        touch($file, filemtime($file) -3600); // change file modification time to 1 hour past
52992fda7f4SSatoshi Sahara        clearstatcache();
53092fda7f4SSatoshi Sahara        $newmod = filemtime($file);
53192fda7f4SSatoshi Sahara        $this->assertLessThan($lastmod, $newmod); // file must be older than previous for this test
53292fda7f4SSatoshi Sahara        $expectedRevs = 2; // external edit is not yet in changelog
53392fda7f4SSatoshi Sahara        $expectExternal = array(
53492fda7f4SSatoshi Sahara            'date' => $lastmod + 1,
53592fda7f4SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_EDIT,
53692fda7f4SSatoshi Sahara            'sum'  => 'external edit (Unknown date)',
53792fda7f4SSatoshi Sahara            'sizechange' => 16,
53892fda7f4SSatoshi Sahara        );
53992fda7f4SSatoshi Sahara
54092fda7f4SSatoshi Sahara        $pagelog = new PageChangeLog($page);
54192fda7f4SSatoshi Sahara        $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal);
54292fda7f4SSatoshi Sahara    }
54392fda7f4SSatoshi Sahara
544*8fb3ff96SSatoshi Sahara    /**
545*8fb3ff96SSatoshi Sahara     * Execute a whole bunch of saves on the same page and check the results
546*8fb3ff96SSatoshi Sahara     * TEST 5 - page creation and deletion
547*8fb3ff96SSatoshi Sahara     *  5.1 create a page
548*8fb3ff96SSatoshi Sahara     *  5.2 external edit
549*8fb3ff96SSatoshi Sahara     *  5.3 edit and save on top of external edit
550*8fb3ff96SSatoshi Sahara     *  5.4 delete
551*8fb3ff96SSatoshi Sahara     *  5.5 create a page, second time
552*8fb3ff96SSatoshi Sahara     *  5.6 externally delete
553*8fb3ff96SSatoshi Sahara     *  5.7 create a page, third time
554*8fb3ff96SSatoshi Sahara     */
555*8fb3ff96SSatoshi Sahara    function test_savesequence5() {
556*8fb3ff96SSatoshi Sahara        $page = 'page5';
557*8fb3ff96SSatoshi Sahara        $file = wikiFN($page);
558*8fb3ff96SSatoshi Sahara        $this->assertFileNotExists($file);
559*8fb3ff96SSatoshi Sahara
560*8fb3ff96SSatoshi Sahara        // 5.1 create a page
561*8fb3ff96SSatoshi Sahara        saveWikiText($page, 'teststring', 'Test 5, 1st save', false);
562*8fb3ff96SSatoshi Sahara        $this->assertFileExists($file);
563*8fb3ff96SSatoshi Sahara        $lastmod = filemtime($file);
564*8fb3ff96SSatoshi Sahara        $expectedRevs = 1;
565*8fb3ff96SSatoshi Sahara        $expect = array(
566*8fb3ff96SSatoshi Sahara            'date' => $lastmod,
567*8fb3ff96SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_CREATE,
568*8fb3ff96SSatoshi Sahara            'sum'  => 'Test 5, 1st save',
569*8fb3ff96SSatoshi Sahara            'sizechange' => 10, // = strlen('teststring')
570*8fb3ff96SSatoshi Sahara        );
571*8fb3ff96SSatoshi Sahara
572*8fb3ff96SSatoshi Sahara        $pagelog = new PageChangeLog($page);
573*8fb3ff96SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
574*8fb3ff96SSatoshi Sahara
575*8fb3ff96SSatoshi Sahara        $this->waitForTick(true); // wait for new revision ID
576*8fb3ff96SSatoshi Sahara
577*8fb3ff96SSatoshi Sahara        // 5.2 external edit
578*8fb3ff96SSatoshi Sahara        file_put_contents($file, 'teststring external edit');
579*8fb3ff96SSatoshi Sahara        clearstatcache(false, $file);
580*8fb3ff96SSatoshi Sahara        $newmod = filemtime($file);
581*8fb3ff96SSatoshi Sahara        $this->assertNotEquals($lastmod, $newmod);
582*8fb3ff96SSatoshi Sahara        $lastmod = $newmod;
583*8fb3ff96SSatoshi Sahara        $expectedRevs = 1; // external edit is not yet in changelog
584*8fb3ff96SSatoshi Sahara        $expectExternal = array(
585*8fb3ff96SSatoshi Sahara            'date' => $lastmod,
586*8fb3ff96SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_EDIT,
587*8fb3ff96SSatoshi Sahara            'sum'  => 'external edit',
588*8fb3ff96SSatoshi Sahara            'sizechange' => 14,
589*8fb3ff96SSatoshi Sahara        );
590*8fb3ff96SSatoshi Sahara
591*8fb3ff96SSatoshi Sahara        $pagelog = new PageChangeLog($page);
592*8fb3ff96SSatoshi Sahara        $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal);
593*8fb3ff96SSatoshi Sahara
594*8fb3ff96SSatoshi Sahara        $this->waitForTick(); // wait for new revision ID
595*8fb3ff96SSatoshi Sahara
596*8fb3ff96SSatoshi Sahara        // 5.3 edit and save on top of external edit
597*8fb3ff96SSatoshi Sahara        saveWikiText($page, 'teststring normal edit', 'Test 5, 2nd save', false);
598*8fb3ff96SSatoshi Sahara        clearstatcache(false, $file);
599*8fb3ff96SSatoshi Sahara        $newmod = filemtime($file);
600*8fb3ff96SSatoshi Sahara        $this->assertNotEquals($lastmod, $newmod);
601*8fb3ff96SSatoshi Sahara        $lastmod = $newmod;
602*8fb3ff96SSatoshi Sahara        $expectedRevs = 3; // two more revisions now!
603*8fb3ff96SSatoshi Sahara        $expect = array(
604*8fb3ff96SSatoshi Sahara            'date' => $lastmod,
605*8fb3ff96SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_EDIT,
606*8fb3ff96SSatoshi Sahara            'sum'  => 'Test 5, 2nd save',
607*8fb3ff96SSatoshi Sahara            'sizechange' => -2,
608*8fb3ff96SSatoshi Sahara        );
609*8fb3ff96SSatoshi Sahara
610*8fb3ff96SSatoshi Sahara        $pagelog = new PageChangeLog($page);
611*8fb3ff96SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
612*8fb3ff96SSatoshi Sahara
613*8fb3ff96SSatoshi Sahara        $this->waitForTick(); // wait for new revision ID
614*8fb3ff96SSatoshi Sahara
615*8fb3ff96SSatoshi Sahara        // 5.4 delete
616*8fb3ff96SSatoshi Sahara        saveWikiText($page, '', 'Test 5 3rd save', false);
617*8fb3ff96SSatoshi Sahara        clearstatcache(false, $file);
618*8fb3ff96SSatoshi Sahara        $this->assertFileNotExists($file);
619*8fb3ff96SSatoshi Sahara        $expectedRevs = 4;
620*8fb3ff96SSatoshi Sahara        $expect = array(
621*8fb3ff96SSatoshi Sahara          //'date' => $lastmod, // ignore from lastRev assertion, but confirm attic file existence
622*8fb3ff96SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_DELETE,
623*8fb3ff96SSatoshi Sahara            'sum'  => 'Test 5 3rd save',
624*8fb3ff96SSatoshi Sahara            'sizechange' => -22,
625*8fb3ff96SSatoshi Sahara        );
626*8fb3ff96SSatoshi Sahara
627*8fb3ff96SSatoshi Sahara        $pagelog = new PageChangeLog($page);
628*8fb3ff96SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
629*8fb3ff96SSatoshi Sahara
630*8fb3ff96SSatoshi Sahara        $this->waitForTick(); // wait for new revision ID
631*8fb3ff96SSatoshi Sahara
632*8fb3ff96SSatoshi Sahara        // 5.5 create a page, second time
633*8fb3ff96SSatoshi Sahara        $this->assertFileNotExists($file);
634*8fb3ff96SSatoshi Sahara        saveWikiText($page, 'teststring revived', 'Test 5, 4th save', false);
635*8fb3ff96SSatoshi Sahara        $this->assertFileExists($file);
636*8fb3ff96SSatoshi Sahara        $lastmod = filemtime($file);
637*8fb3ff96SSatoshi Sahara        $expectedRevs = 5;
638*8fb3ff96SSatoshi Sahara        $expect = array(
639*8fb3ff96SSatoshi Sahara            'date' => $lastmod,
640*8fb3ff96SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_CREATE,
641*8fb3ff96SSatoshi Sahara            'sum'  => 'Test 5, 4th save',
642*8fb3ff96SSatoshi Sahara            'sizechange' => 18, // = strlen('teststring revived')
643*8fb3ff96SSatoshi Sahara        );
644*8fb3ff96SSatoshi Sahara
645*8fb3ff96SSatoshi Sahara        $pagelog = new PageChangeLog($page);
646*8fb3ff96SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
647*8fb3ff96SSatoshi Sahara
648*8fb3ff96SSatoshi Sahara        $this->waitForTick(true); // wait for new revision ID
649*8fb3ff96SSatoshi Sahara
650*8fb3ff96SSatoshi Sahara        // 5.6 externally delete
651*8fb3ff96SSatoshi Sahara        unlink($file);
652*8fb3ff96SSatoshi Sahara        $this->assertFileNotExists($file);
653*8fb3ff96SSatoshi Sahara        $expectedRevs = 5;
654*8fb3ff96SSatoshi Sahara        $expectExternal = array(
655*8fb3ff96SSatoshi Sahara          //'date' => $lastmod,
656*8fb3ff96SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_DELETE,
657*8fb3ff96SSatoshi Sahara            'sum'  => 'removed - external edit (Unknown date)',
658*8fb3ff96SSatoshi Sahara            'sizechange' => -18,
659*8fb3ff96SSatoshi Sahara        );
660*8fb3ff96SSatoshi Sahara
661*8fb3ff96SSatoshi Sahara        $pagelog = new PageChangeLog($page);
662*8fb3ff96SSatoshi Sahara        $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal);
663*8fb3ff96SSatoshi Sahara
664*8fb3ff96SSatoshi Sahara        $this->waitForTick(true); // wait for new revision ID
665*8fb3ff96SSatoshi Sahara
666*8fb3ff96SSatoshi Sahara        // 5.7 create a page, third time
667*8fb3ff96SSatoshi Sahara        $this->assertFileNotExists($file);
668*8fb3ff96SSatoshi Sahara        saveWikiText($page, 'teststring revived 2', 'Test 5, 5th save', false);
669*8fb3ff96SSatoshi Sahara        clearstatcache(false, $file);
670*8fb3ff96SSatoshi Sahara        $this->assertFileExists($file);
671*8fb3ff96SSatoshi Sahara        $lastmod = filemtime($file);
672*8fb3ff96SSatoshi Sahara        $expectedRevs = 7;
673*8fb3ff96SSatoshi Sahara        $expect = array(
674*8fb3ff96SSatoshi Sahara            'date' => $lastmod,
675*8fb3ff96SSatoshi Sahara            'type' => DOKU_CHANGE_TYPE_CREATE,
676*8fb3ff96SSatoshi Sahara            'sum'  => 'Test 5, 5th save',
677*8fb3ff96SSatoshi Sahara            'sizechange' => 20, // = strlen('teststring revived 2')
678*8fb3ff96SSatoshi Sahara        );
679*8fb3ff96SSatoshi Sahara
680*8fb3ff96SSatoshi Sahara        $pagelog = new PageChangeLog($page);
681*8fb3ff96SSatoshi Sahara        $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect);
682*8fb3ff96SSatoshi Sahara    }
683*8fb3ff96SSatoshi Sahara
684023953f0SAndreas Gohr}
685