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