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 23*b7b9a99dSSatoshi Sahara &$expectedLastEntry, // @param array, pass by reference 24*b7b9a99dSSatoshi Sahara $expected2ndLastEntry = null // @param array 253c425c43SSatoshi Sahara ) { 263c425c43SSatoshi Sahara $revisions = $pagelog->getRevisions(-1, 200); 273c425c43SSatoshi Sahara $this->assertCount($expectedRevs, $revisions); 283c425c43SSatoshi Sahara $this->assertCount($expectedRevs, array_unique($revisions), 'date duplicated in changelog'); 293c425c43SSatoshi Sahara // last revision 303c425c43SSatoshi Sahara $lastRevInfo = $pagelog->getRevisionInfo($revisions[0]); 313c425c43SSatoshi Sahara $expectedLastEntry += $lastRevInfo; 323c425c43SSatoshi Sahara $this->assertEquals($expectedLastEntry, $lastRevInfo); 333c425c43SSatoshi Sahara // current revision 343c425c43SSatoshi Sahara $currentRevInfo = $pagelog->getCurrentRevisionInfo(); 353c425c43SSatoshi Sahara $this->assertEquals($currentRevInfo, $lastRevInfo, 'current & last revs should be identical'); 363c425c43SSatoshi Sahara // attic 373c425c43SSatoshi Sahara $attic = wikiFN($lastRevInfo['id'], $lastRevInfo['date']); 383c425c43SSatoshi Sahara $this->assertFileExists($attic, 'file missing in attic'); 393c425c43SSatoshi Sahara $files = count(glob(dirname($attic).'/'.noNS($lastRevInfo['id']).'.*')); 403c425c43SSatoshi Sahara $this->assertLessThanOrEqual($expectedRevs, $files, 'detectExternalEdit() should not add too often old revs'); 41*b7b9a99dSSatoshi Sahara 42*b7b9a99dSSatoshi Sahara // second to last revision (optional) 43*b7b9a99dSSatoshi Sahara if ($expected2ndLastEntry && array_key_exists('timestamp',$expected2ndLastEntry) && count($revisions) > 1) { 44*b7b9a99dSSatoshi Sahara $prevRevInfo = $pagelog->getRevisionInfo($revisions[1]); 45*b7b9a99dSSatoshi Sahara unset($expected2ndLastEntry['timestamp']); // drop timestamp key 46*b7b9a99dSSatoshi Sahara $this->assertEquals($expected2ndLastEntry, $prevRevInfo); 47*b7b9a99dSSatoshi Sahara } 483c425c43SSatoshi Sahara } 493c425c43SSatoshi Sahara 503c425c43SSatoshi Sahara /** 513c425c43SSatoshi Sahara * assertions against changelog entries and attic after external edit, create or deletion of page 523c425c43SSatoshi Sahara */ 533c425c43SSatoshi Sahara private function checkChangeLogAfterExternalEdit( 543c425c43SSatoshi Sahara PageChangeLog $pagelog, 5592fda7f4SSatoshi Sahara $expectedRevs, // @param int 5692fda7f4SSatoshi Sahara $expectedLastEntry, // @param array 5792fda7f4SSatoshi Sahara &$expectedCurrentEntry // @param array, pass by reference 583c425c43SSatoshi Sahara ) { 593c425c43SSatoshi Sahara $revisions = $pagelog->getRevisions(-1, 200); 603c425c43SSatoshi Sahara $this->assertCount($expectedRevs, $revisions); 613c425c43SSatoshi Sahara $this->assertCount($expectedRevs, array_unique($revisions), 'date duplicated in changelog'); 623c425c43SSatoshi Sahara // last revision 633c425c43SSatoshi Sahara if ($expectedRevs > 0) { 643c425c43SSatoshi Sahara $lastRevInfo = $pagelog->getRevisionInfo($revisions[0]); 653c425c43SSatoshi Sahara $expectedLastEntry += $lastRevInfo; 663c425c43SSatoshi Sahara $this->assertEquals($expectedLastEntry, $lastRevInfo); 673c425c43SSatoshi Sahara } else { 683c425c43SSatoshi Sahara $this->assertFalse($pagelog->lastRevision(), 'changelog file does not yet exist'); 693c425c43SSatoshi Sahara } 703c425c43SSatoshi Sahara // current revision 713c425c43SSatoshi Sahara $currentRevInfo = $pagelog->getCurrentRevisionInfo(); 723c425c43SSatoshi Sahara $this->assertArrayHasKey('timestamp', $currentRevInfo, 'should be external revision'); 733c425c43SSatoshi Sahara $expectedCurrentEntry += $currentRevInfo; 743c425c43SSatoshi Sahara if ($expectedRevs > 0) { 753c425c43SSatoshi Sahara $this->assertEquals($expectedCurrentEntry, $currentRevInfo); 763c425c43SSatoshi Sahara 773c425c43SSatoshi Sahara } 783c425c43SSatoshi Sahara // attic 793c425c43SSatoshi Sahara $attic = wikiFN($currentRevInfo['id'], $currentRevInfo['date']); 803c425c43SSatoshi Sahara $this->assertFileNotExists($attic, 'page does not yet exist in attic'); 813c425c43SSatoshi Sahara } 823c425c43SSatoshi Sahara 833c425c43SSatoshi Sahara 843c425c43SSatoshi Sahara /** 85023953f0SAndreas Gohr * Execute a whole bunch of saves on the same page and check the results 863d3f6056SSatoshi Sahara * TEST 1 873d3f6056SSatoshi Sahara * 1.1 create a page 883d3f6056SSatoshi Sahara * 1.2 save with same content should be ignored 893d3f6056SSatoshi Sahara * 1.3 update the page with new text 903c425c43SSatoshi Sahara * 1.4 add a minor edit (unauthenticated, minor not allowable) 913d3f6056SSatoshi Sahara * 1.5 add a minor edit (authenticated) 923d3f6056SSatoshi Sahara * 1.6 delete 933d3f6056SSatoshi Sahara * 1.7 restore 943d3f6056SSatoshi Sahara * 1.8 external edit 953c425c43SSatoshi Sahara * 1.9 edit and save on top of external edit 96023953f0SAndreas Gohr */ 973d3f6056SSatoshi Sahara function test_savesequence1() { 98023953f0SAndreas Gohr global $REV; 99023953f0SAndreas Gohr 100023953f0SAndreas Gohr $page = 'page'; 101023953f0SAndreas Gohr $file = wikiFN($page); 1023c425c43SSatoshi Sahara $this->assertFileNotExists($file); 103023953f0SAndreas Gohr 1043d3f6056SSatoshi Sahara // 1.1 create a page 1053d3f6056SSatoshi Sahara saveWikiText($page, 'teststring', '1st save', false); 10692fda7f4SSatoshi Sahara clearstatcache(false, $file); 107023953f0SAndreas Gohr $this->assertFileExists($file); 108023953f0SAndreas Gohr $lastmod = filemtime($file); 1093c425c43SSatoshi Sahara $expectedRevs = 1; 1103d3f6056SSatoshi Sahara $expect = array( 1113d3f6056SSatoshi Sahara 'date' => $lastmod, 1123d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 1133d3f6056SSatoshi Sahara 'sum' => '1st save', 1143d3f6056SSatoshi Sahara 'sizechange' => 10, // = strlen('teststring') 1153d3f6056SSatoshi Sahara ); 116023953f0SAndreas Gohr 117023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 1183c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 119023953f0SAndreas Gohr 120aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 121023953f0SAndreas Gohr 1223d3f6056SSatoshi Sahara // 1.2 save with same content should be ignored 1233d3f6056SSatoshi Sahara saveWikiText($page, 'teststring', '2nd save', false); 124023953f0SAndreas Gohr clearstatcache(false, $file); 125023953f0SAndreas Gohr $this->assertEquals($lastmod, filemtime($file)); 126023953f0SAndreas Gohr 127023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 128023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 1297866d571SSatoshi Sahara $this->assertCount(1, $revisions); 130023953f0SAndreas Gohr 1313d3f6056SSatoshi Sahara // 1.3 update the page with new text 1323d3f6056SSatoshi Sahara saveWikiText($page, 'teststring2long', '3rd save', false); 133023953f0SAndreas Gohr clearstatcache(false, $file); 134023953f0SAndreas Gohr $newmod = filemtime($file); 135023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 136023953f0SAndreas Gohr $lastmod = $newmod; 1373c425c43SSatoshi Sahara $expectedRevs = 2; 1383d3f6056SSatoshi Sahara $expect = array( 1393d3f6056SSatoshi Sahara 'date' => $lastmod, 1403d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 1413d3f6056SSatoshi Sahara 'sum' => '3rd save', 1423d3f6056SSatoshi Sahara 'sizechange' => 5, 1433d3f6056SSatoshi Sahara ); 144023953f0SAndreas Gohr 145023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 1463c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 147023953f0SAndreas Gohr 148aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 149023953f0SAndreas Gohr 1503c425c43SSatoshi Sahara // 1.4 add a minor edit (unauthenticated, minor not allowable) 1513d3f6056SSatoshi Sahara saveWikiText($page, 'teststring3long', '4th save', true); 152023953f0SAndreas Gohr clearstatcache(false, $file); 153023953f0SAndreas Gohr $newmod = filemtime($file); 154023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 155023953f0SAndreas Gohr $lastmod = $newmod; 1563c425c43SSatoshi Sahara $expectedRevs = 3; 1573d3f6056SSatoshi Sahara $expect = array( 1583d3f6056SSatoshi Sahara 'date' => $lastmod, 1593d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 1603d3f6056SSatoshi Sahara 'sum' => '4th save', 1613d3f6056SSatoshi Sahara 'sizechange' => 0, 1623d3f6056SSatoshi Sahara ); 163023953f0SAndreas Gohr 164023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 1653c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 166023953f0SAndreas Gohr 167aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 168023953f0SAndreas Gohr 1693d3f6056SSatoshi Sahara // 1.5 add a minor edit (authenticated) 170023953f0SAndreas Gohr $_SERVER['REMOTE_USER'] = 'user'; 1713d3f6056SSatoshi Sahara saveWikiText($page, 'teststring4', '5th save', true); 172023953f0SAndreas Gohr clearstatcache(false, $file); 173023953f0SAndreas Gohr $newmod = filemtime($file); 174023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 175023953f0SAndreas Gohr $lastmod = $newmod; 1763c425c43SSatoshi Sahara $expectedRevs = 4; 1773d3f6056SSatoshi Sahara $expect = array( 1783d3f6056SSatoshi Sahara 'date' => $lastmod, 1793d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_MINOR_EDIT, 1803d3f6056SSatoshi Sahara 'sum' => '5th save', 1813d3f6056SSatoshi Sahara 'sizechange' => -4, 1823d3f6056SSatoshi Sahara ); 183023953f0SAndreas Gohr 184023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 1853c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 186023953f0SAndreas Gohr 187aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 188023953f0SAndreas Gohr 1893d3f6056SSatoshi Sahara // 1.6 delete 1903d3f6056SSatoshi Sahara saveWikiText($page, '', '6th save', false); 191023953f0SAndreas Gohr clearstatcache(false, $file); 192023953f0SAndreas Gohr $this->assertFileNotExists($file); 1933c425c43SSatoshi Sahara $expectedRevs = 5; 1943d3f6056SSatoshi Sahara $expect = array( 1953d3f6056SSatoshi Sahara //'date' => $lastmod, // ignore from lastRev assertion, but confirm attic file existence 1963d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_DELETE, 1973d3f6056SSatoshi Sahara 'sum' => '6th save', 1983d3f6056SSatoshi Sahara 'sizechange' => -11, 1993d3f6056SSatoshi Sahara ); 200023953f0SAndreas Gohr 201023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 2023c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 203023953f0SAndreas Gohr 204aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 205023953f0SAndreas Gohr 2063d3f6056SSatoshi Sahara // 1.7 restore 207023953f0SAndreas Gohr $REV = $lastmod; 2083d3f6056SSatoshi Sahara saveWikiText($page, 'teststring4', '7th save', true); 209023953f0SAndreas Gohr clearstatcache(false, $file); 210023953f0SAndreas Gohr $this->assertFileExists($file); 211023953f0SAndreas Gohr $newmod = filemtime($file); 212023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 213023953f0SAndreas Gohr $lastmod = $newmod; 2143c425c43SSatoshi Sahara $expectedRevs = 6; 2153d3f6056SSatoshi Sahara $expect = array( 2163d3f6056SSatoshi Sahara 'date' => $lastmod, 2173d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_REVERT, 2183d3f6056SSatoshi Sahara 'sum' => '7th save', 2193d3f6056SSatoshi Sahara 'sizechange' => 11, 2203d3f6056SSatoshi Sahara ); 221023953f0SAndreas Gohr 222023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 2233c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 224023953f0SAndreas Gohr $REV = ''; 225023953f0SAndreas Gohr 226aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 227023953f0SAndreas Gohr 2283d3f6056SSatoshi Sahara // 1.8 external edit 2293d3f6056SSatoshi Sahara file_put_contents($file, 'teststring5 external edit'); 230023953f0SAndreas Gohr clearstatcache(false, $file); 231023953f0SAndreas Gohr $newmod = filemtime($file); 232023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 233023953f0SAndreas Gohr $lastmod = $newmod; 2343c425c43SSatoshi Sahara $expectedRevs = 6; // external edit is not yet in changelog 2353d3f6056SSatoshi Sahara $expectExternal = array( 2363d3f6056SSatoshi Sahara 'date' => $lastmod, 2373d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 2383d3f6056SSatoshi Sahara 'sum' => 'external edit', 2393d3f6056SSatoshi Sahara 'sizechange' => 14, 2403d3f6056SSatoshi Sahara ); 2413d3f6056SSatoshi Sahara 2423d3f6056SSatoshi Sahara $pagelog = new PageChangeLog($page); 2433c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 2443d3f6056SSatoshi Sahara 2453d3f6056SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 2463d3f6056SSatoshi Sahara 2473d3f6056SSatoshi Sahara // 1.9 save on top of external edit 2483d3f6056SSatoshi Sahara saveWikiText($page, 'teststring6', '8th save', false); 2493d3f6056SSatoshi Sahara clearstatcache(false, $file); 2503d3f6056SSatoshi Sahara $newmod = filemtime($file); 2513d3f6056SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 2523d3f6056SSatoshi Sahara $lastmod = $newmod; 2533c425c43SSatoshi Sahara $expectedRevs = 8; 2543d3f6056SSatoshi Sahara $expect = array( 2553d3f6056SSatoshi Sahara 'date' => $lastmod, 2563d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 2573d3f6056SSatoshi Sahara 'sum' => '8th save', 2583d3f6056SSatoshi Sahara 'sizechange' => -14, 2593d3f6056SSatoshi Sahara ); 260023953f0SAndreas Gohr 261023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 262*b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 263023953f0SAndreas Gohr } 2646072486dSGerrit Uitslag 2656072486dSGerrit Uitslag /** 2666072486dSGerrit Uitslag * Execute a whole bunch of saves on the same page and check the results 2673d3f6056SSatoshi Sahara * using $this->handle_write() in event IO_WIKIPAGE_WRITE 2683c425c43SSatoshi Sahara * TEST 2 - create a page externally in 2.3, while external edit in Test 1.8 2693d3f6056SSatoshi Sahara * 2.1 create a page 2703d3f6056SSatoshi Sahara * 2.2 delete 2713d3f6056SSatoshi Sahara * 2.3 externally create the page 2723c425c43SSatoshi Sahara * 2.4 edit and save on top of external edit 2733c425c43SSatoshi Sahara * 2.5 external edit 2743c425c43SSatoshi Sahara * 2.6 edit and save on top of external edit, again 2756072486dSGerrit Uitslag */ 2763d3f6056SSatoshi Sahara function test_savesequence2() { 277ea466a98SMichael Hamann // add an additional delay when saving files to make sure 278ea466a98SMichael Hamann // nobody relies on the saving happening in the same second 279e1d9dcc8SAndreas Gohr /** @var $EVENT_HANDLER \dokuwiki\Extension\EventHandler */ 280ea466a98SMichael Hamann global $EVENT_HANDLER; 281ea466a98SMichael Hamann $EVENT_HANDLER->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, 'handle_write'); 282ea466a98SMichael Hamann 2836072486dSGerrit Uitslag $page = 'page2'; 2846072486dSGerrit Uitslag $file = wikiFN($page); 2853c425c43SSatoshi Sahara $this->assertFileNotExists($file); 2866072486dSGerrit Uitslag 2873d3f6056SSatoshi Sahara // 2.1 create a page 2883d3f6056SSatoshi Sahara saveWikiText($page, 'teststring', 'Test 2, 1st save', false); 28992fda7f4SSatoshi Sahara clearstatcache(false, $file); 2906072486dSGerrit Uitslag $this->assertFileExists($file); 2916072486dSGerrit Uitslag $lastmod = filemtime($file); 2923c425c43SSatoshi Sahara $expectedRevs = 1; 2933d3f6056SSatoshi Sahara $expect = array( 2943d3f6056SSatoshi Sahara 'date' => $lastmod, 2953d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 2963d3f6056SSatoshi Sahara 'sum' => 'Test 2, 1st save', 2973d3f6056SSatoshi Sahara 'sizechange' => 10, // = strlen('teststring') 2983d3f6056SSatoshi Sahara ); 2996072486dSGerrit Uitslag 3006072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3013c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 3026072486dSGerrit Uitslag 303aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 3046072486dSGerrit Uitslag 3053d3f6056SSatoshi Sahara // 2.2 delete 3063d3f6056SSatoshi Sahara saveWikiText($page, '', 'Test 2, 2nd save', false); 3076072486dSGerrit Uitslag clearstatcache(false, $file); 3086072486dSGerrit Uitslag $this->assertFileNotExists($file); 3093c425c43SSatoshi Sahara $expectedRevs = 2; 3103d3f6056SSatoshi Sahara $expect = array( 3113d3f6056SSatoshi Sahara //'date' => $lastmod, // ignore from lastRev assertion, but confirm attic file existence 3123d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_DELETE, 3133d3f6056SSatoshi Sahara 'sum' => 'Test 2, 2nd save', 3143d3f6056SSatoshi Sahara 'sizechange' => -10, 3153d3f6056SSatoshi Sahara ); 3166072486dSGerrit Uitslag 3176072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3183c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 3196072486dSGerrit Uitslag 320aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 3216072486dSGerrit Uitslag 3223d3f6056SSatoshi Sahara // 2.3 externally create the page 3236072486dSGerrit Uitslag file_put_contents($file, 'teststring5'); 3243d3f6056SSatoshi Sahara clearstatcache(false, $file); 3253d3f6056SSatoshi Sahara $lastmod = filemtime($file); 3263c425c43SSatoshi Sahara $expectedRevs = 2; // external edit is not yet in changelog 3273d3f6056SSatoshi Sahara $expectExternal = array( 3283d3f6056SSatoshi Sahara 'date' => $lastmod, 3293d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 3303d3f6056SSatoshi Sahara 'sum' => 'created - external edit', 3313d3f6056SSatoshi Sahara 'sizechange' => 11, 3323d3f6056SSatoshi Sahara ); 3333d3f6056SSatoshi Sahara 3343d3f6056SSatoshi Sahara $pagelog = new PageChangeLog($page); 3353c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 3366072486dSGerrit Uitslag 337aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 3386072486dSGerrit Uitslag 3393d3f6056SSatoshi Sahara // 2.4 save on top of external edit 3403d3f6056SSatoshi Sahara saveWikiText($page, 'teststring6', 'Test 2, 3rd save', false); 3416072486dSGerrit Uitslag clearstatcache(false, $file); 3423d3f6056SSatoshi Sahara $newmod = filemtime($file); 3433d3f6056SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 3443d3f6056SSatoshi Sahara $lastmod = $newmod; 3453c425c43SSatoshi Sahara $expectedRevs = 4; // two more revisions now! 3463d3f6056SSatoshi Sahara $expect = array( 3473d3f6056SSatoshi Sahara 'date' => $lastmod, 3483d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 3493d3f6056SSatoshi Sahara 'sum' => 'Test 2, 3rd save', 3503d3f6056SSatoshi Sahara 'sizechange' => 0, 3513d3f6056SSatoshi Sahara ); 3526072486dSGerrit Uitslag 3536072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 354*b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 3556072486dSGerrit Uitslag 3563c425c43SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 3573c425c43SSatoshi Sahara 3583c425c43SSatoshi Sahara // 2.5 external edit 3593c425c43SSatoshi Sahara file_put_contents($file, 'teststring7 external edit2'); 3603c425c43SSatoshi Sahara clearstatcache(false, $file); 3613c425c43SSatoshi Sahara $newmod = filemtime($file); 3623c425c43SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 3633c425c43SSatoshi Sahara $lastmod = $newmod; 3643c425c43SSatoshi Sahara $expectedRevs = 4; // external edit is not yet in changelog 3653c425c43SSatoshi Sahara $expectExternal = array( 3663c425c43SSatoshi Sahara 'date' => $lastmod, 3673c425c43SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 3683c425c43SSatoshi Sahara 'sum' => 'external edit', 3693c425c43SSatoshi Sahara 'sizechange' => 15, 3703c425c43SSatoshi Sahara ); 3713c425c43SSatoshi Sahara 3723c425c43SSatoshi Sahara $pagelog = new PageChangeLog($page); 3733c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 3743c425c43SSatoshi Sahara 3753c425c43SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 3763c425c43SSatoshi Sahara 3773c425c43SSatoshi Sahara // 2.6 save on top of external edit, again 3783c425c43SSatoshi Sahara saveWikiText($page, 'teststring8', 'Test 2, 4th save', false); 3793c425c43SSatoshi Sahara clearstatcache(false, $file); 3803c425c43SSatoshi Sahara $newmod = filemtime($file); 3813c425c43SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 3823c425c43SSatoshi Sahara $lastmod = $newmod; 3833c425c43SSatoshi Sahara $expectedRevs = 6; // two more revisions now! 3843c425c43SSatoshi Sahara $expect = array( 3853c425c43SSatoshi Sahara 'date' => $lastmod, 3863c425c43SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 3873c425c43SSatoshi Sahara 'sum' => 'Test 2, 4th save', 3883c425c43SSatoshi Sahara 'sizechange' => -15, 3893c425c43SSatoshi Sahara ); 3903c425c43SSatoshi Sahara 3913c425c43SSatoshi Sahara $pagelog = new PageChangeLog($page); 392*b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 3936072486dSGerrit Uitslag } 3946072486dSGerrit Uitslag 3956072486dSGerrit Uitslag /** 3966072486dSGerrit Uitslag * Execute a whole bunch of saves on the same page and check the results 3973c425c43SSatoshi Sahara * TEST 3 - typical page life of bundled page such as wiki:syntax 3983d3f6056SSatoshi Sahara * 3.1 externally create a page 3993d3f6056SSatoshi Sahara * 3.2 external edit 4003c425c43SSatoshi Sahara * 3.3 edit and save on top of external edit 4013d3f6056SSatoshi Sahara * 3.4 externally delete the page 4026072486dSGerrit Uitslag */ 4033d3f6056SSatoshi Sahara function test_savesequence3() { 4046072486dSGerrit Uitslag $page = 'page3'; 4056072486dSGerrit Uitslag $file = wikiFN($page); 4066072486dSGerrit Uitslag 4073d3f6056SSatoshi Sahara // 3.1 externally create a page 4086072486dSGerrit Uitslag $this->assertFileNotExists($file); 4096072486dSGerrit Uitslag file_put_contents($file, 'teststring'); 4103d3f6056SSatoshi Sahara clearstatcache(false, $file); 4113d3f6056SSatoshi Sahara $lastmod = filemtime($file); 4123c425c43SSatoshi Sahara $expectedRevs = 0; // external edit is not yet in changelog 4133c425c43SSatoshi Sahara $expect = false; 4143d3f6056SSatoshi Sahara $expectExternal = array( 4153d3f6056SSatoshi Sahara 'date' => $lastmod, 4163d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 4173d3f6056SSatoshi Sahara 'sum' => 'created - external edit', 4183d3f6056SSatoshi Sahara 'sizechange' => 10, 4193d3f6056SSatoshi Sahara ); 4203d3f6056SSatoshi Sahara 4213d3f6056SSatoshi Sahara $pagelog = new PageChangeLog($page); 4223c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 4236072486dSGerrit Uitslag 424aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 4256072486dSGerrit Uitslag 4263c425c43SSatoshi Sahara // 3.2 external edit (repeated, still no changelog exists) 4273d3f6056SSatoshi Sahara file_put_contents($file, 'teststring external edit'); 4286072486dSGerrit Uitslag clearstatcache(false, $file); 4293d3f6056SSatoshi Sahara $newmod = filemtime($file); 4303d3f6056SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 4313d3f6056SSatoshi Sahara $lastmod = $newmod; 4323c425c43SSatoshi Sahara $expectedRevs = 0; // external edit is not yet in changelog 4333d3f6056SSatoshi Sahara $expectExternal = array( 4343d3f6056SSatoshi Sahara 'date' => $lastmod, 4353c425c43SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, // not DOKU_CHANGE_TYPE_EDIT 4363d3f6056SSatoshi Sahara 'sum' => 'created - external edit', 4373d3f6056SSatoshi Sahara 'sizechange' => 24, 4383d3f6056SSatoshi Sahara ); 4393d3f6056SSatoshi Sahara 4403d3f6056SSatoshi Sahara $pagelog = new PageChangeLog($page); 4413c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 4423d3f6056SSatoshi Sahara 4433d3f6056SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 4443d3f6056SSatoshi Sahara 4453d3f6056SSatoshi Sahara // 3.3 save on top of external edit 4463d3f6056SSatoshi Sahara saveWikiText($page, 'teststring1', 'Test 3, first save', false); 4473d3f6056SSatoshi Sahara clearstatcache(false, $file); 4483d3f6056SSatoshi Sahara $newmod = filemtime($file); 4493d3f6056SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 4503d3f6056SSatoshi Sahara $lastmod = $newmod; 4513c425c43SSatoshi Sahara $expectedRevs = 2; // two more revisions now! 4523d3f6056SSatoshi Sahara $expect = array( 4533d3f6056SSatoshi Sahara 'date' => $lastmod, 4543d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 4553d3f6056SSatoshi Sahara 'sum' => 'Test 3, first save', 4563d3f6056SSatoshi Sahara 'sizechange' => -13, 4573d3f6056SSatoshi Sahara ); 4586072486dSGerrit Uitslag 4596072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 460*b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 4616072486dSGerrit Uitslag 462aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 4636072486dSGerrit Uitslag 4643d3f6056SSatoshi Sahara // 3.4 externally delete the page 4656072486dSGerrit Uitslag unlink($file); 4663c425c43SSatoshi Sahara $expectedRevs = 2; 4673d3f6056SSatoshi Sahara $expectExternal = array( 4683d3f6056SSatoshi Sahara //'date' => $lastmod, 4693d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_DELETE, 4703d3f6056SSatoshi Sahara 'sum' => 'removed - external edit (Unknown date)', 4713d3f6056SSatoshi Sahara 'sizechange' => -11, 4723d3f6056SSatoshi Sahara ); 4736072486dSGerrit Uitslag 4746072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 4753c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 4766072486dSGerrit Uitslag } 4776072486dSGerrit Uitslag 47892fda7f4SSatoshi Sahara /** 47992fda7f4SSatoshi Sahara * Execute a whole bunch of saves on the same page and check the results 48092fda7f4SSatoshi Sahara * TEST 4 - typical page life of bundled page such as wiki:syntax 48192fda7f4SSatoshi Sahara * 4.1 externally create a page 48292fda7f4SSatoshi Sahara * 4.2 edit and save 48392fda7f4SSatoshi Sahara * 4.3 externally edit as a result of a file which has older timestamp than last revision 48492fda7f4SSatoshi Sahara */ 48592fda7f4SSatoshi Sahara function test_savesequence4() { 48692fda7f4SSatoshi Sahara $page = 'page4'; 48792fda7f4SSatoshi Sahara $file = wikiFN($page); 48892fda7f4SSatoshi Sahara 48992fda7f4SSatoshi Sahara // 4.1 externally create a page 49092fda7f4SSatoshi Sahara $this->assertFileNotExists($file); 49192fda7f4SSatoshi Sahara file_put_contents($file, 'teststring'); 49292fda7f4SSatoshi Sahara clearstatcache(false, $file); 49392fda7f4SSatoshi Sahara $lastmod = filemtime($file); 49492fda7f4SSatoshi Sahara $expectedRevs = 0; // external edit is not yet in changelog 49592fda7f4SSatoshi Sahara $expect = false; 49692fda7f4SSatoshi Sahara $expectExternal = array( 49792fda7f4SSatoshi Sahara 'date' => $lastmod, 49892fda7f4SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 49992fda7f4SSatoshi Sahara 'sum' => 'created - external edit', 50092fda7f4SSatoshi Sahara 'sizechange' => 10, 50192fda7f4SSatoshi Sahara ); 50292fda7f4SSatoshi Sahara 50392fda7f4SSatoshi Sahara $pagelog = new PageChangeLog($page); 50492fda7f4SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 50592fda7f4SSatoshi Sahara 50692fda7f4SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 50792fda7f4SSatoshi Sahara 50892fda7f4SSatoshi Sahara // 4.2 edit and save 50992fda7f4SSatoshi Sahara saveWikiText($page, 'teststring1', 'Test 4, first save', false); 51092fda7f4SSatoshi Sahara clearstatcache(false, $file); 51192fda7f4SSatoshi Sahara $newmod = filemtime($file); 51292fda7f4SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 51392fda7f4SSatoshi Sahara $lastmod = $newmod; 51492fda7f4SSatoshi Sahara $expectedRevs = 2; // two more revisions now! 51592fda7f4SSatoshi Sahara $expect = array( 51692fda7f4SSatoshi Sahara 'date' => $lastmod, 51792fda7f4SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 51892fda7f4SSatoshi Sahara 'sum' => 'Test 4, first save', 51992fda7f4SSatoshi Sahara 'sizechange' => 1, 52092fda7f4SSatoshi Sahara ); 52192fda7f4SSatoshi Sahara 52292fda7f4SSatoshi Sahara $pagelog = new PageChangeLog($page); 523*b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 52492fda7f4SSatoshi Sahara 52592fda7f4SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 52692fda7f4SSatoshi Sahara 52792fda7f4SSatoshi Sahara // 4.3 externally edit as a result of a file which has older timestamp than last revision 52892fda7f4SSatoshi Sahara unlink($file); 52992fda7f4SSatoshi Sahara file_put_contents($file, 'teststring fake 1 hout past'); 53092fda7f4SSatoshi Sahara touch($file, filemtime($file) -3600); // change file modification time to 1 hour past 53192fda7f4SSatoshi Sahara clearstatcache(); 53292fda7f4SSatoshi Sahara $newmod = filemtime($file); 53392fda7f4SSatoshi Sahara $this->assertLessThan($lastmod, $newmod); // file must be older than previous for this test 53492fda7f4SSatoshi Sahara $expectedRevs = 2; // external edit is not yet in changelog 53592fda7f4SSatoshi Sahara $expectExternal = array( 53692fda7f4SSatoshi Sahara 'date' => $lastmod + 1, 53792fda7f4SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 53892fda7f4SSatoshi Sahara 'sum' => 'external edit (Unknown date)', 53992fda7f4SSatoshi Sahara 'sizechange' => 16, 54092fda7f4SSatoshi Sahara ); 54192fda7f4SSatoshi Sahara 54292fda7f4SSatoshi Sahara $pagelog = new PageChangeLog($page); 54392fda7f4SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 54492fda7f4SSatoshi Sahara } 54592fda7f4SSatoshi Sahara 5468fb3ff96SSatoshi Sahara /** 5478fb3ff96SSatoshi Sahara * Execute a whole bunch of saves on the same page and check the results 5488fb3ff96SSatoshi Sahara * TEST 5 - page creation and deletion 5498fb3ff96SSatoshi Sahara * 5.1 create a page 5508fb3ff96SSatoshi Sahara * 5.2 external edit 5518fb3ff96SSatoshi Sahara * 5.3 edit and save on top of external edit 5528fb3ff96SSatoshi Sahara * 5.4 delete 5538fb3ff96SSatoshi Sahara * 5.5 create a page, second time 5548fb3ff96SSatoshi Sahara * 5.6 externally delete 5558fb3ff96SSatoshi Sahara * 5.7 create a page, third time 5568fb3ff96SSatoshi Sahara */ 5578fb3ff96SSatoshi Sahara function test_savesequence5() { 5588fb3ff96SSatoshi Sahara $page = 'page5'; 5598fb3ff96SSatoshi Sahara $file = wikiFN($page); 5608fb3ff96SSatoshi Sahara $this->assertFileNotExists($file); 5618fb3ff96SSatoshi Sahara 5628fb3ff96SSatoshi Sahara // 5.1 create a page 5638fb3ff96SSatoshi Sahara saveWikiText($page, 'teststring', 'Test 5, 1st save', false); 5648fb3ff96SSatoshi Sahara $this->assertFileExists($file); 5658fb3ff96SSatoshi Sahara $lastmod = filemtime($file); 5668fb3ff96SSatoshi Sahara $expectedRevs = 1; 5678fb3ff96SSatoshi Sahara $expect = array( 5688fb3ff96SSatoshi Sahara 'date' => $lastmod, 5698fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 5708fb3ff96SSatoshi Sahara 'sum' => 'Test 5, 1st save', 5718fb3ff96SSatoshi Sahara 'sizechange' => 10, // = strlen('teststring') 5728fb3ff96SSatoshi Sahara ); 5738fb3ff96SSatoshi Sahara 5748fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 5758fb3ff96SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 5768fb3ff96SSatoshi Sahara 5778fb3ff96SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 5788fb3ff96SSatoshi Sahara 5798fb3ff96SSatoshi Sahara // 5.2 external edit 5808fb3ff96SSatoshi Sahara file_put_contents($file, 'teststring external edit'); 5818fb3ff96SSatoshi Sahara clearstatcache(false, $file); 5828fb3ff96SSatoshi Sahara $newmod = filemtime($file); 5838fb3ff96SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 5848fb3ff96SSatoshi Sahara $lastmod = $newmod; 5858fb3ff96SSatoshi Sahara $expectedRevs = 1; // external edit is not yet in changelog 5868fb3ff96SSatoshi Sahara $expectExternal = array( 5878fb3ff96SSatoshi Sahara 'date' => $lastmod, 5888fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 5898fb3ff96SSatoshi Sahara 'sum' => 'external edit', 5908fb3ff96SSatoshi Sahara 'sizechange' => 14, 5918fb3ff96SSatoshi Sahara ); 5928fb3ff96SSatoshi Sahara 5938fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 5948fb3ff96SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 5958fb3ff96SSatoshi Sahara 5968fb3ff96SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 5978fb3ff96SSatoshi Sahara 5988fb3ff96SSatoshi Sahara // 5.3 edit and save on top of external edit 5998fb3ff96SSatoshi Sahara saveWikiText($page, 'teststring normal edit', 'Test 5, 2nd save', false); 6008fb3ff96SSatoshi Sahara clearstatcache(false, $file); 6018fb3ff96SSatoshi Sahara $newmod = filemtime($file); 6028fb3ff96SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 6038fb3ff96SSatoshi Sahara $lastmod = $newmod; 6048fb3ff96SSatoshi Sahara $expectedRevs = 3; // two more revisions now! 6058fb3ff96SSatoshi Sahara $expect = array( 6068fb3ff96SSatoshi Sahara 'date' => $lastmod, 6078fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 6088fb3ff96SSatoshi Sahara 'sum' => 'Test 5, 2nd save', 6098fb3ff96SSatoshi Sahara 'sizechange' => -2, 6108fb3ff96SSatoshi Sahara ); 6118fb3ff96SSatoshi Sahara 6128fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 613*b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 6148fb3ff96SSatoshi Sahara 6158fb3ff96SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 6168fb3ff96SSatoshi Sahara 6178fb3ff96SSatoshi Sahara // 5.4 delete 6188fb3ff96SSatoshi Sahara saveWikiText($page, '', 'Test 5 3rd save', false); 6198fb3ff96SSatoshi Sahara clearstatcache(false, $file); 6208fb3ff96SSatoshi Sahara $this->assertFileNotExists($file); 6218fb3ff96SSatoshi Sahara $expectedRevs = 4; 6228fb3ff96SSatoshi Sahara $expect = array( 6238fb3ff96SSatoshi Sahara //'date' => $lastmod, // ignore from lastRev assertion, but confirm attic file existence 6248fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_DELETE, 6258fb3ff96SSatoshi Sahara 'sum' => 'Test 5 3rd save', 6268fb3ff96SSatoshi Sahara 'sizechange' => -22, 6278fb3ff96SSatoshi Sahara ); 6288fb3ff96SSatoshi Sahara 6298fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 6308fb3ff96SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 6318fb3ff96SSatoshi Sahara 6328fb3ff96SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 6338fb3ff96SSatoshi Sahara 6348fb3ff96SSatoshi Sahara // 5.5 create a page, second time 6358fb3ff96SSatoshi Sahara $this->assertFileNotExists($file); 6368fb3ff96SSatoshi Sahara saveWikiText($page, 'teststring revived', 'Test 5, 4th save', false); 6378fb3ff96SSatoshi Sahara $this->assertFileExists($file); 6388fb3ff96SSatoshi Sahara $lastmod = filemtime($file); 6398fb3ff96SSatoshi Sahara $expectedRevs = 5; 6408fb3ff96SSatoshi Sahara $expect = array( 6418fb3ff96SSatoshi Sahara 'date' => $lastmod, 6428fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 6438fb3ff96SSatoshi Sahara 'sum' => 'Test 5, 4th save', 6448fb3ff96SSatoshi Sahara 'sizechange' => 18, // = strlen('teststring revived') 6458fb3ff96SSatoshi Sahara ); 6468fb3ff96SSatoshi Sahara 6478fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 6488fb3ff96SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 6498fb3ff96SSatoshi Sahara 6508fb3ff96SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 6518fb3ff96SSatoshi Sahara 6528fb3ff96SSatoshi Sahara // 5.6 externally delete 6538fb3ff96SSatoshi Sahara unlink($file); 6548fb3ff96SSatoshi Sahara $this->assertFileNotExists($file); 6558fb3ff96SSatoshi Sahara $expectedRevs = 5; 6568fb3ff96SSatoshi Sahara $expectExternal = array( 6578fb3ff96SSatoshi Sahara //'date' => $lastmod, 6588fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_DELETE, 6598fb3ff96SSatoshi Sahara 'sum' => 'removed - external edit (Unknown date)', 6608fb3ff96SSatoshi Sahara 'sizechange' => -18, 6618fb3ff96SSatoshi Sahara ); 6628fb3ff96SSatoshi Sahara 6638fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 6648fb3ff96SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 6658fb3ff96SSatoshi Sahara 6668fb3ff96SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 6678fb3ff96SSatoshi Sahara 6688fb3ff96SSatoshi Sahara // 5.7 create a page, third time 6698fb3ff96SSatoshi Sahara $this->assertFileNotExists($file); 6708fb3ff96SSatoshi Sahara saveWikiText($page, 'teststring revived 2', 'Test 5, 5th save', false); 6718fb3ff96SSatoshi Sahara clearstatcache(false, $file); 6728fb3ff96SSatoshi Sahara $this->assertFileExists($file); 6738fb3ff96SSatoshi Sahara $lastmod = filemtime($file); 6748fb3ff96SSatoshi Sahara $expectedRevs = 7; 6758fb3ff96SSatoshi Sahara $expect = array( 6768fb3ff96SSatoshi Sahara 'date' => $lastmod, 6778fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 6788fb3ff96SSatoshi Sahara 'sum' => 'Test 5, 5th save', 6798fb3ff96SSatoshi Sahara 'sizechange' => 20, // = strlen('teststring revived 2') 6808fb3ff96SSatoshi Sahara ); 6818fb3ff96SSatoshi Sahara 6828fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 683*b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 6848fb3ff96SSatoshi Sahara } 6858fb3ff96SSatoshi Sahara 686023953f0SAndreas Gohr} 687