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 23b7b9a99dSSatoshi Sahara &$expectedLastEntry, // @param array, pass by reference 245e23cdb8SSatoshi Sahara $expected2ndLastEntry = null // @param array (optional) 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'); 41b7b9a99dSSatoshi Sahara 425e23cdb8SSatoshi Sahara // second to last revision (optional), intended to check logline of previous external edits 435e23cdb8SSatoshi Sahara if ($expected2ndLastEntry && count($revisions) > 1) { 44b7b9a99dSSatoshi Sahara $prevRevInfo = $pagelog->getRevisionInfo($revisions[1]); 45b7b9a99dSSatoshi Sahara unset($expected2ndLastEntry['timestamp']); // drop timestamp key 46b7b9a99dSSatoshi Sahara $this->assertEquals($expected2ndLastEntry, $prevRevInfo); 47b7b9a99dSSatoshi 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']); 809ad2b913SAndreas Gohr $this->assertFileDoesNotExist($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); 1029ad2b913SAndreas Gohr $this->assertFileDoesNotExist($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; 1385e23cdb8SSatoshi Sahara $expectPrev = $expect; 1393d3f6056SSatoshi Sahara $expect = array( 1403d3f6056SSatoshi Sahara 'date' => $lastmod, 1413d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 1423d3f6056SSatoshi Sahara 'sum' => '3rd save', 1433d3f6056SSatoshi Sahara 'sizechange' => 5, 1443d3f6056SSatoshi Sahara ); 145023953f0SAndreas Gohr 146023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 1475e23cdb8SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectPrev); 148023953f0SAndreas Gohr 149aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 150023953f0SAndreas Gohr 1513c425c43SSatoshi Sahara // 1.4 add a minor edit (unauthenticated, minor not allowable) 1523d3f6056SSatoshi Sahara saveWikiText($page, 'teststring3long', '4th save', true); 153023953f0SAndreas Gohr clearstatcache(false, $file); 154023953f0SAndreas Gohr $newmod = filemtime($file); 155023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 156023953f0SAndreas Gohr $lastmod = $newmod; 1573c425c43SSatoshi Sahara $expectedRevs = 3; 1583d3f6056SSatoshi Sahara $expect = array( 1593d3f6056SSatoshi Sahara 'date' => $lastmod, 1603d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 1613d3f6056SSatoshi Sahara 'sum' => '4th save', 1623d3f6056SSatoshi Sahara 'sizechange' => 0, 1633d3f6056SSatoshi Sahara ); 164023953f0SAndreas Gohr 165023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 1663c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 167023953f0SAndreas Gohr 168aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 169023953f0SAndreas Gohr 1703d3f6056SSatoshi Sahara // 1.5 add a minor edit (authenticated) 171023953f0SAndreas Gohr $_SERVER['REMOTE_USER'] = 'user'; 1723d3f6056SSatoshi Sahara saveWikiText($page, 'teststring4', '5th save', true); 173023953f0SAndreas Gohr clearstatcache(false, $file); 174023953f0SAndreas Gohr $newmod = filemtime($file); 175023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 176023953f0SAndreas Gohr $lastmod = $newmod; 1773c425c43SSatoshi Sahara $expectedRevs = 4; 1783d3f6056SSatoshi Sahara $expect = array( 1793d3f6056SSatoshi Sahara 'date' => $lastmod, 1803d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_MINOR_EDIT, 1813d3f6056SSatoshi Sahara 'sum' => '5th save', 1823d3f6056SSatoshi Sahara 'sizechange' => -4, 1833d3f6056SSatoshi Sahara ); 184023953f0SAndreas Gohr 185023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 1863c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 187023953f0SAndreas Gohr 188aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 189023953f0SAndreas Gohr 1903d3f6056SSatoshi Sahara // 1.6 delete 1913d3f6056SSatoshi Sahara saveWikiText($page, '', '6th save', false); 192023953f0SAndreas Gohr clearstatcache(false, $file); 1939ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 1943c425c43SSatoshi Sahara $expectedRevs = 5; 1953d3f6056SSatoshi Sahara $expect = array( 1963d3f6056SSatoshi Sahara //'date' => $lastmod, // ignore from lastRev assertion, but confirm attic file existence 1973d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_DELETE, 1983d3f6056SSatoshi Sahara 'sum' => '6th save', 1993d3f6056SSatoshi Sahara 'sizechange' => -11, 2003d3f6056SSatoshi Sahara ); 201023953f0SAndreas Gohr 202023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 2033c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 204023953f0SAndreas Gohr 205aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 206023953f0SAndreas Gohr 2073d3f6056SSatoshi Sahara // 1.7 restore 208023953f0SAndreas Gohr $REV = $lastmod; 2093d3f6056SSatoshi Sahara saveWikiText($page, 'teststring4', '7th save', true); 210023953f0SAndreas Gohr clearstatcache(false, $file); 211023953f0SAndreas Gohr $this->assertFileExists($file); 212023953f0SAndreas Gohr $newmod = filemtime($file); 213023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 214023953f0SAndreas Gohr $lastmod = $newmod; 2153c425c43SSatoshi Sahara $expectedRevs = 6; 2163d3f6056SSatoshi Sahara $expect = array( 2173d3f6056SSatoshi Sahara 'date' => $lastmod, 2183d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_REVERT, 2193d3f6056SSatoshi Sahara 'sum' => '7th save', 2203d3f6056SSatoshi Sahara 'sizechange' => 11, 2213d3f6056SSatoshi Sahara ); 222023953f0SAndreas Gohr 223023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 2243c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 225023953f0SAndreas Gohr $REV = ''; 226023953f0SAndreas Gohr 227aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 228023953f0SAndreas Gohr 2293d3f6056SSatoshi Sahara // 1.8 external edit 2303d3f6056SSatoshi Sahara file_put_contents($file, 'teststring5 external edit'); 231023953f0SAndreas Gohr clearstatcache(false, $file); 232023953f0SAndreas Gohr $newmod = filemtime($file); 233023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 234023953f0SAndreas Gohr $lastmod = $newmod; 2353c425c43SSatoshi Sahara $expectedRevs = 6; // external edit is not yet in changelog 2363d3f6056SSatoshi Sahara $expectExternal = array( 2373d3f6056SSatoshi Sahara 'date' => $lastmod, 2383d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 2393d3f6056SSatoshi Sahara 'sum' => 'external edit', 2403d3f6056SSatoshi Sahara 'sizechange' => 14, 2413d3f6056SSatoshi Sahara ); 2423d3f6056SSatoshi Sahara 2433d3f6056SSatoshi Sahara $pagelog = new PageChangeLog($page); 2443c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 2453d3f6056SSatoshi Sahara 2463d3f6056SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 2473d3f6056SSatoshi Sahara 2483d3f6056SSatoshi Sahara // 1.9 save on top of external edit 2493d3f6056SSatoshi Sahara saveWikiText($page, 'teststring6', '8th save', false); 2503d3f6056SSatoshi Sahara clearstatcache(false, $file); 2513d3f6056SSatoshi Sahara $newmod = filemtime($file); 2523d3f6056SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 2533d3f6056SSatoshi Sahara $lastmod = $newmod; 2543c425c43SSatoshi Sahara $expectedRevs = 8; 2553d3f6056SSatoshi Sahara $expect = array( 2563d3f6056SSatoshi Sahara 'date' => $lastmod, 2573d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 2583d3f6056SSatoshi Sahara 'sum' => '8th save', 2593d3f6056SSatoshi Sahara 'sizechange' => -14, 2603d3f6056SSatoshi Sahara ); 261023953f0SAndreas Gohr 262023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 263b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 264023953f0SAndreas Gohr } 2656072486dSGerrit Uitslag 2666072486dSGerrit Uitslag /** 2676072486dSGerrit Uitslag * Execute a whole bunch of saves on the same page and check the results 2683d3f6056SSatoshi Sahara * using $this->handle_write() in event IO_WIKIPAGE_WRITE 2693c425c43SSatoshi Sahara * TEST 2 - create a page externally in 2.3, while external edit in Test 1.8 2703d3f6056SSatoshi Sahara * 2.1 create a page 2713d3f6056SSatoshi Sahara * 2.2 delete 2723d3f6056SSatoshi Sahara * 2.3 externally create the page 2733c425c43SSatoshi Sahara * 2.4 edit and save on top of external edit 2743c425c43SSatoshi Sahara * 2.5 external edit 2753c425c43SSatoshi Sahara * 2.6 edit and save on top of external edit, again 2766072486dSGerrit Uitslag */ 2773d3f6056SSatoshi Sahara function test_savesequence2() { 278ea466a98SMichael Hamann // add an additional delay when saving files to make sure 279ea466a98SMichael Hamann // nobody relies on the saving happening in the same second 280e1d9dcc8SAndreas Gohr /** @var $EVENT_HANDLER \dokuwiki\Extension\EventHandler */ 281ea466a98SMichael Hamann global $EVENT_HANDLER; 282ea466a98SMichael Hamann $EVENT_HANDLER->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, 'handle_write'); 283ea466a98SMichael Hamann 2846072486dSGerrit Uitslag $page = 'page2'; 2856072486dSGerrit Uitslag $file = wikiFN($page); 2869ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 2876072486dSGerrit Uitslag 2883d3f6056SSatoshi Sahara // 2.1 create a page 2893d3f6056SSatoshi Sahara saveWikiText($page, 'teststring', 'Test 2, 1st save', false); 29092fda7f4SSatoshi Sahara clearstatcache(false, $file); 2916072486dSGerrit Uitslag $this->assertFileExists($file); 2926072486dSGerrit Uitslag $lastmod = filemtime($file); 2933c425c43SSatoshi Sahara $expectedRevs = 1; 2943d3f6056SSatoshi Sahara $expect = array( 2953d3f6056SSatoshi Sahara 'date' => $lastmod, 2963d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 2973d3f6056SSatoshi Sahara 'sum' => 'Test 2, 1st save', 2983d3f6056SSatoshi Sahara 'sizechange' => 10, // = strlen('teststring') 2993d3f6056SSatoshi Sahara ); 3006072486dSGerrit Uitslag 3016072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3023c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 3036072486dSGerrit Uitslag 304aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 3056072486dSGerrit Uitslag 3063d3f6056SSatoshi Sahara // 2.2 delete 3073d3f6056SSatoshi Sahara saveWikiText($page, '', 'Test 2, 2nd save', false); 3086072486dSGerrit Uitslag clearstatcache(false, $file); 3099ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 3103c425c43SSatoshi Sahara $expectedRevs = 2; 3113d3f6056SSatoshi Sahara $expect = array( 3123d3f6056SSatoshi Sahara //'date' => $lastmod, // ignore from lastRev assertion, but confirm attic file existence 3133d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_DELETE, 3143d3f6056SSatoshi Sahara 'sum' => 'Test 2, 2nd save', 3153d3f6056SSatoshi Sahara 'sizechange' => -10, 3163d3f6056SSatoshi Sahara ); 3176072486dSGerrit Uitslag 3186072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3193c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 3206072486dSGerrit Uitslag 321aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 3226072486dSGerrit Uitslag 3233d3f6056SSatoshi Sahara // 2.3 externally create the page 3246072486dSGerrit Uitslag file_put_contents($file, 'teststring5'); 3253d3f6056SSatoshi Sahara clearstatcache(false, $file); 3263d3f6056SSatoshi Sahara $lastmod = filemtime($file); 3273c425c43SSatoshi Sahara $expectedRevs = 2; // external edit is not yet in changelog 3283d3f6056SSatoshi Sahara $expectExternal = array( 3293d3f6056SSatoshi Sahara 'date' => $lastmod, 3303d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 3313d3f6056SSatoshi Sahara 'sum' => 'created - external edit', 3323d3f6056SSatoshi Sahara 'sizechange' => 11, 3333d3f6056SSatoshi Sahara ); 3343d3f6056SSatoshi Sahara 3353d3f6056SSatoshi Sahara $pagelog = new PageChangeLog($page); 3363c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 3376072486dSGerrit Uitslag 338aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 3396072486dSGerrit Uitslag 3403d3f6056SSatoshi Sahara // 2.4 save on top of external edit 3413d3f6056SSatoshi Sahara saveWikiText($page, 'teststring6', 'Test 2, 3rd save', false); 3426072486dSGerrit Uitslag clearstatcache(false, $file); 3433d3f6056SSatoshi Sahara $newmod = filemtime($file); 3443d3f6056SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 3453d3f6056SSatoshi Sahara $lastmod = $newmod; 3463c425c43SSatoshi Sahara $expectedRevs = 4; // two more revisions now! 3473d3f6056SSatoshi Sahara $expect = array( 3483d3f6056SSatoshi Sahara 'date' => $lastmod, 3493d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 3503d3f6056SSatoshi Sahara 'sum' => 'Test 2, 3rd save', 3513d3f6056SSatoshi Sahara 'sizechange' => 0, 3523d3f6056SSatoshi Sahara ); 3536072486dSGerrit Uitslag 3546072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 355b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 3566072486dSGerrit Uitslag 3573c425c43SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 3583c425c43SSatoshi Sahara 3593c425c43SSatoshi Sahara // 2.5 external edit 3603c425c43SSatoshi Sahara file_put_contents($file, 'teststring7 external edit2'); 3613c425c43SSatoshi Sahara clearstatcache(false, $file); 3623c425c43SSatoshi Sahara $newmod = filemtime($file); 3633c425c43SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 3643c425c43SSatoshi Sahara $lastmod = $newmod; 3653c425c43SSatoshi Sahara $expectedRevs = 4; // external edit is not yet in changelog 3663c425c43SSatoshi Sahara $expectExternal = array( 3673c425c43SSatoshi Sahara 'date' => $lastmod, 3683c425c43SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 3693c425c43SSatoshi Sahara 'sum' => 'external edit', 3703c425c43SSatoshi Sahara 'sizechange' => 15, 3713c425c43SSatoshi Sahara ); 3723c425c43SSatoshi Sahara 3733c425c43SSatoshi Sahara $pagelog = new PageChangeLog($page); 3743c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 3753c425c43SSatoshi Sahara 3763c425c43SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 3773c425c43SSatoshi Sahara 3783c425c43SSatoshi Sahara // 2.6 save on top of external edit, again 3793c425c43SSatoshi Sahara saveWikiText($page, 'teststring8', 'Test 2, 4th save', false); 3803c425c43SSatoshi Sahara clearstatcache(false, $file); 3813c425c43SSatoshi Sahara $newmod = filemtime($file); 3823c425c43SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 3833c425c43SSatoshi Sahara $lastmod = $newmod; 3843c425c43SSatoshi Sahara $expectedRevs = 6; // two more revisions now! 3853c425c43SSatoshi Sahara $expect = array( 3863c425c43SSatoshi Sahara 'date' => $lastmod, 3873c425c43SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 3883c425c43SSatoshi Sahara 'sum' => 'Test 2, 4th save', 3893c425c43SSatoshi Sahara 'sizechange' => -15, 3903c425c43SSatoshi Sahara ); 3913c425c43SSatoshi Sahara 3923c425c43SSatoshi Sahara $pagelog = new PageChangeLog($page); 393b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 3946072486dSGerrit Uitslag } 3956072486dSGerrit Uitslag 3966072486dSGerrit Uitslag /** 3976072486dSGerrit Uitslag * Execute a whole bunch of saves on the same page and check the results 3983c425c43SSatoshi Sahara * TEST 3 - typical page life of bundled page such as wiki:syntax 3993d3f6056SSatoshi Sahara * 3.1 externally create a page 4003d3f6056SSatoshi Sahara * 3.2 external edit 4013c425c43SSatoshi Sahara * 3.3 edit and save on top of external edit 4023d3f6056SSatoshi Sahara * 3.4 externally delete the page 4036072486dSGerrit Uitslag */ 4043d3f6056SSatoshi Sahara function test_savesequence3() { 4056072486dSGerrit Uitslag $page = 'page3'; 4066072486dSGerrit Uitslag $file = wikiFN($page); 4076072486dSGerrit Uitslag 4083d3f6056SSatoshi Sahara // 3.1 externally create a page 4099ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 4106072486dSGerrit Uitslag file_put_contents($file, 'teststring'); 4113d3f6056SSatoshi Sahara clearstatcache(false, $file); 4123d3f6056SSatoshi Sahara $lastmod = filemtime($file); 4133c425c43SSatoshi Sahara $expectedRevs = 0; // external edit is not yet in changelog 4143c425c43SSatoshi Sahara $expect = false; 4153d3f6056SSatoshi Sahara $expectExternal = array( 4163d3f6056SSatoshi Sahara 'date' => $lastmod, 4173d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 4183d3f6056SSatoshi Sahara 'sum' => 'created - external edit', 4193d3f6056SSatoshi Sahara 'sizechange' => 10, 4203d3f6056SSatoshi Sahara ); 4213d3f6056SSatoshi Sahara 4223d3f6056SSatoshi Sahara $pagelog = new PageChangeLog($page); 4233c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 4246072486dSGerrit Uitslag 425aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 4266072486dSGerrit Uitslag 4273c425c43SSatoshi Sahara // 3.2 external edit (repeated, still no changelog exists) 4283d3f6056SSatoshi Sahara file_put_contents($file, 'teststring external edit'); 4296072486dSGerrit Uitslag clearstatcache(false, $file); 4303d3f6056SSatoshi Sahara $newmod = filemtime($file); 4313d3f6056SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 4323d3f6056SSatoshi Sahara $lastmod = $newmod; 4333c425c43SSatoshi Sahara $expectedRevs = 0; // external edit is not yet in changelog 4343d3f6056SSatoshi Sahara $expectExternal = array( 4353d3f6056SSatoshi Sahara 'date' => $lastmod, 4363c425c43SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, // not DOKU_CHANGE_TYPE_EDIT 4373d3f6056SSatoshi Sahara 'sum' => 'created - external edit', 4383d3f6056SSatoshi Sahara 'sizechange' => 24, 4393d3f6056SSatoshi Sahara ); 4403d3f6056SSatoshi Sahara 4413d3f6056SSatoshi Sahara $pagelog = new PageChangeLog($page); 4423c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 4433d3f6056SSatoshi Sahara 4443d3f6056SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 4453d3f6056SSatoshi Sahara 4463d3f6056SSatoshi Sahara // 3.3 save on top of external edit 4473d3f6056SSatoshi Sahara saveWikiText($page, 'teststring1', 'Test 3, first save', false); 4483d3f6056SSatoshi Sahara clearstatcache(false, $file); 4493d3f6056SSatoshi Sahara $newmod = filemtime($file); 4503d3f6056SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 4513d3f6056SSatoshi Sahara $lastmod = $newmod; 4523c425c43SSatoshi Sahara $expectedRevs = 2; // two more revisions now! 4533d3f6056SSatoshi Sahara $expect = array( 4543d3f6056SSatoshi Sahara 'date' => $lastmod, 4553d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 4563d3f6056SSatoshi Sahara 'sum' => 'Test 3, first save', 4573d3f6056SSatoshi Sahara 'sizechange' => -13, 4583d3f6056SSatoshi Sahara ); 4596072486dSGerrit Uitslag 4606072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 461b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 4626072486dSGerrit Uitslag 463aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 4646072486dSGerrit Uitslag 4653d3f6056SSatoshi Sahara // 3.4 externally delete the page 4666072486dSGerrit Uitslag unlink($file); 4673c425c43SSatoshi Sahara $expectedRevs = 2; 4683d3f6056SSatoshi Sahara $expectExternal = array( 4693d3f6056SSatoshi Sahara //'date' => $lastmod, 4703d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_DELETE, 4713d3f6056SSatoshi Sahara 'sum' => 'removed - external edit (Unknown date)', 4723d3f6056SSatoshi Sahara 'sizechange' => -11, 4733d3f6056SSatoshi Sahara ); 4746072486dSGerrit Uitslag 4756072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 4763c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 4776072486dSGerrit Uitslag } 4786072486dSGerrit Uitslag 47992fda7f4SSatoshi Sahara /** 48092fda7f4SSatoshi Sahara * Execute a whole bunch of saves on the same page and check the results 48192fda7f4SSatoshi Sahara * TEST 4 - typical page life of bundled page such as wiki:syntax 48292fda7f4SSatoshi Sahara * 4.1 externally create a page 48392fda7f4SSatoshi Sahara * 4.2 edit and save 48492fda7f4SSatoshi Sahara * 4.3 externally edit as a result of a file which has older timestamp than last revision 48592fda7f4SSatoshi Sahara */ 48692fda7f4SSatoshi Sahara function test_savesequence4() { 48792fda7f4SSatoshi Sahara $page = 'page4'; 48892fda7f4SSatoshi Sahara $file = wikiFN($page); 48992fda7f4SSatoshi Sahara 49092fda7f4SSatoshi Sahara // 4.1 externally create a page 4919ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 49292fda7f4SSatoshi Sahara file_put_contents($file, 'teststring'); 49392fda7f4SSatoshi Sahara clearstatcache(false, $file); 49492fda7f4SSatoshi Sahara $lastmod = filemtime($file); 49592fda7f4SSatoshi Sahara $expectedRevs = 0; // external edit is not yet in changelog 49692fda7f4SSatoshi Sahara $expect = false; 49792fda7f4SSatoshi Sahara $expectExternal = array( 49892fda7f4SSatoshi Sahara 'date' => $lastmod, 49992fda7f4SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 50092fda7f4SSatoshi Sahara 'sum' => 'created - external edit', 50192fda7f4SSatoshi Sahara 'sizechange' => 10, 50292fda7f4SSatoshi Sahara ); 50392fda7f4SSatoshi Sahara 50492fda7f4SSatoshi Sahara $pagelog = new PageChangeLog($page); 50592fda7f4SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 50692fda7f4SSatoshi Sahara 50792fda7f4SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 50892fda7f4SSatoshi Sahara 50992fda7f4SSatoshi Sahara // 4.2 edit and save 51092fda7f4SSatoshi Sahara saveWikiText($page, 'teststring1', 'Test 4, first save', false); 51192fda7f4SSatoshi Sahara clearstatcache(false, $file); 51292fda7f4SSatoshi Sahara $newmod = filemtime($file); 51392fda7f4SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 51492fda7f4SSatoshi Sahara $lastmod = $newmod; 51592fda7f4SSatoshi Sahara $expectedRevs = 2; // two more revisions now! 51692fda7f4SSatoshi Sahara $expect = array( 51792fda7f4SSatoshi Sahara 'date' => $lastmod, 51892fda7f4SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 51992fda7f4SSatoshi Sahara 'sum' => 'Test 4, first save', 52092fda7f4SSatoshi Sahara 'sizechange' => 1, 52192fda7f4SSatoshi Sahara ); 52292fda7f4SSatoshi Sahara 52392fda7f4SSatoshi Sahara $pagelog = new PageChangeLog($page); 524b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 52592fda7f4SSatoshi Sahara 52692fda7f4SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 52792fda7f4SSatoshi Sahara 52892fda7f4SSatoshi Sahara // 4.3 externally edit as a result of a file which has older timestamp than last revision 52992fda7f4SSatoshi Sahara unlink($file); 530*36784b8fSAndreas Gohr file_put_contents($file, 'teststring fake 1 hour past'); 53192fda7f4SSatoshi Sahara touch($file, filemtime($file) -3600); // change file modification time to 1 hour past 53292fda7f4SSatoshi Sahara clearstatcache(); 53392fda7f4SSatoshi Sahara $newmod = filemtime($file); 53492fda7f4SSatoshi Sahara $this->assertLessThan($lastmod, $newmod); // file must be older than previous for this test 53592fda7f4SSatoshi Sahara $expectedRevs = 2; // external edit is not yet in changelog 53692fda7f4SSatoshi Sahara $expectExternal = array( 53792fda7f4SSatoshi Sahara 'date' => $lastmod + 1, 53892fda7f4SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 53992fda7f4SSatoshi Sahara 'sum' => 'external edit (Unknown date)', 54092fda7f4SSatoshi Sahara 'sizechange' => 16, 54192fda7f4SSatoshi Sahara ); 54292fda7f4SSatoshi Sahara 543*36784b8fSAndreas Gohr $this->expectLogMessage('current file modification time is older than last'); 54492fda7f4SSatoshi Sahara $pagelog = new PageChangeLog($page); 54592fda7f4SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 54692fda7f4SSatoshi Sahara } 54792fda7f4SSatoshi Sahara 5488fb3ff96SSatoshi Sahara /** 5498fb3ff96SSatoshi Sahara * Execute a whole bunch of saves on the same page and check the results 5508fb3ff96SSatoshi Sahara * TEST 5 - page creation and deletion 5518fb3ff96SSatoshi Sahara * 5.1 create a page 5528fb3ff96SSatoshi Sahara * 5.2 external edit 5538fb3ff96SSatoshi Sahara * 5.3 edit and save on top of external edit 5548fb3ff96SSatoshi Sahara * 5.4 delete 5558fb3ff96SSatoshi Sahara * 5.5 create a page, second time 5568fb3ff96SSatoshi Sahara * 5.6 externally delete 5578fb3ff96SSatoshi Sahara * 5.7 create a page, third time 5588fb3ff96SSatoshi Sahara */ 5598fb3ff96SSatoshi Sahara function test_savesequence5() { 5608fb3ff96SSatoshi Sahara $page = 'page5'; 5618fb3ff96SSatoshi Sahara $file = wikiFN($page); 5629ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 5638fb3ff96SSatoshi Sahara 5648fb3ff96SSatoshi Sahara // 5.1 create a page 5658fb3ff96SSatoshi Sahara saveWikiText($page, 'teststring', 'Test 5, 1st save', false); 5668fb3ff96SSatoshi Sahara $this->assertFileExists($file); 5678fb3ff96SSatoshi Sahara $lastmod = filemtime($file); 5688fb3ff96SSatoshi Sahara $expectedRevs = 1; 5698fb3ff96SSatoshi Sahara $expect = array( 5708fb3ff96SSatoshi Sahara 'date' => $lastmod, 5718fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 5728fb3ff96SSatoshi Sahara 'sum' => 'Test 5, 1st save', 5738fb3ff96SSatoshi Sahara 'sizechange' => 10, // = strlen('teststring') 5748fb3ff96SSatoshi Sahara ); 5758fb3ff96SSatoshi Sahara 5768fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 5778fb3ff96SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 5788fb3ff96SSatoshi Sahara 5798fb3ff96SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 5808fb3ff96SSatoshi Sahara 5818fb3ff96SSatoshi Sahara // 5.2 external edit 5828fb3ff96SSatoshi Sahara file_put_contents($file, 'teststring external edit'); 5838fb3ff96SSatoshi Sahara clearstatcache(false, $file); 5848fb3ff96SSatoshi Sahara $newmod = filemtime($file); 5858fb3ff96SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 5868fb3ff96SSatoshi Sahara $lastmod = $newmod; 5878fb3ff96SSatoshi Sahara $expectedRevs = 1; // external edit is not yet in changelog 5888fb3ff96SSatoshi Sahara $expectExternal = array( 5898fb3ff96SSatoshi Sahara 'date' => $lastmod, 5908fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 5918fb3ff96SSatoshi Sahara 'sum' => 'external edit', 5928fb3ff96SSatoshi Sahara 'sizechange' => 14, 5938fb3ff96SSatoshi Sahara ); 5948fb3ff96SSatoshi Sahara 5958fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 5968fb3ff96SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 5978fb3ff96SSatoshi Sahara 5988fb3ff96SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 5998fb3ff96SSatoshi Sahara 6008fb3ff96SSatoshi Sahara // 5.3 edit and save on top of external edit 6018fb3ff96SSatoshi Sahara saveWikiText($page, 'teststring normal edit', 'Test 5, 2nd save', false); 6028fb3ff96SSatoshi Sahara clearstatcache(false, $file); 6038fb3ff96SSatoshi Sahara $newmod = filemtime($file); 6048fb3ff96SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 6058fb3ff96SSatoshi Sahara $lastmod = $newmod; 6068fb3ff96SSatoshi Sahara $expectedRevs = 3; // two more revisions now! 6078fb3ff96SSatoshi Sahara $expect = array( 6088fb3ff96SSatoshi Sahara 'date' => $lastmod, 6098fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 6108fb3ff96SSatoshi Sahara 'sum' => 'Test 5, 2nd save', 6118fb3ff96SSatoshi Sahara 'sizechange' => -2, 6128fb3ff96SSatoshi Sahara ); 6138fb3ff96SSatoshi Sahara 6148fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 615b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 6168fb3ff96SSatoshi Sahara 6178fb3ff96SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 6188fb3ff96SSatoshi Sahara 6198fb3ff96SSatoshi Sahara // 5.4 delete 6208fb3ff96SSatoshi Sahara saveWikiText($page, '', 'Test 5 3rd save', false); 6218fb3ff96SSatoshi Sahara clearstatcache(false, $file); 6229ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 6238fb3ff96SSatoshi Sahara $expectedRevs = 4; 6248fb3ff96SSatoshi Sahara $expect = array( 6258fb3ff96SSatoshi Sahara //'date' => $lastmod, // ignore from lastRev assertion, but confirm attic file existence 6268fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_DELETE, 6278fb3ff96SSatoshi Sahara 'sum' => 'Test 5 3rd save', 6288fb3ff96SSatoshi Sahara 'sizechange' => -22, 6298fb3ff96SSatoshi Sahara ); 6308fb3ff96SSatoshi Sahara 6318fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 6328fb3ff96SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 6338fb3ff96SSatoshi Sahara 6348fb3ff96SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 6358fb3ff96SSatoshi Sahara 6368fb3ff96SSatoshi Sahara // 5.5 create a page, second time 6379ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 6388fb3ff96SSatoshi Sahara saveWikiText($page, 'teststring revived', 'Test 5, 4th save', false); 6398fb3ff96SSatoshi Sahara $this->assertFileExists($file); 6408fb3ff96SSatoshi Sahara $lastmod = filemtime($file); 6418fb3ff96SSatoshi Sahara $expectedRevs = 5; 6428fb3ff96SSatoshi Sahara $expect = array( 6438fb3ff96SSatoshi Sahara 'date' => $lastmod, 6448fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 6458fb3ff96SSatoshi Sahara 'sum' => 'Test 5, 4th save', 6468fb3ff96SSatoshi Sahara 'sizechange' => 18, // = strlen('teststring revived') 6478fb3ff96SSatoshi Sahara ); 6488fb3ff96SSatoshi Sahara 6498fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 6508fb3ff96SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 6518fb3ff96SSatoshi Sahara 6528fb3ff96SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 6538fb3ff96SSatoshi Sahara 6548fb3ff96SSatoshi Sahara // 5.6 externally delete 6558fb3ff96SSatoshi Sahara unlink($file); 6569ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 6578fb3ff96SSatoshi Sahara $expectedRevs = 5; 6588fb3ff96SSatoshi Sahara $expectExternal = array( 6598fb3ff96SSatoshi Sahara //'date' => $lastmod, 6608fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_DELETE, 6618fb3ff96SSatoshi Sahara 'sum' => 'removed - external edit (Unknown date)', 6628fb3ff96SSatoshi Sahara 'sizechange' => -18, 6638fb3ff96SSatoshi Sahara ); 6648fb3ff96SSatoshi Sahara 6658fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 6668fb3ff96SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 6678fb3ff96SSatoshi Sahara 6688fb3ff96SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 6698fb3ff96SSatoshi Sahara 6708fb3ff96SSatoshi Sahara // 5.7 create a page, third time 6719ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 6728fb3ff96SSatoshi Sahara saveWikiText($page, 'teststring revived 2', 'Test 5, 5th save', false); 6738fb3ff96SSatoshi Sahara clearstatcache(false, $file); 6748fb3ff96SSatoshi Sahara $this->assertFileExists($file); 6758fb3ff96SSatoshi Sahara $lastmod = filemtime($file); 6768fb3ff96SSatoshi Sahara $expectedRevs = 7; 6778fb3ff96SSatoshi Sahara $expect = array( 6788fb3ff96SSatoshi Sahara 'date' => $lastmod, 6798fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 6808fb3ff96SSatoshi Sahara 'sum' => 'Test 5, 5th save', 6818fb3ff96SSatoshi Sahara 'sizechange' => 20, // = strlen('teststring revived 2') 6828fb3ff96SSatoshi Sahara ); 6838fb3ff96SSatoshi Sahara 6848fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 685b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 6868fb3ff96SSatoshi Sahara } 6878fb3ff96SSatoshi Sahara 688023953f0SAndreas Gohr} 689