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 $this->assertEquals($expected2ndLastEntry, $prevRevInfo); 46b7b9a99dSSatoshi Sahara } 473c425c43SSatoshi Sahara } 483c425c43SSatoshi Sahara 493c425c43SSatoshi Sahara /** 503c425c43SSatoshi Sahara * assertions against changelog entries and attic after external edit, create or deletion of page 513c425c43SSatoshi Sahara */ 523c425c43SSatoshi Sahara private function checkChangeLogAfterExternalEdit( 533c425c43SSatoshi Sahara PageChangeLog $pagelog, 5492fda7f4SSatoshi Sahara $expectedRevs, // @param int 5592fda7f4SSatoshi Sahara $expectedLastEntry, // @param array 5692fda7f4SSatoshi Sahara &$expectedCurrentEntry // @param array, pass by reference 573c425c43SSatoshi Sahara ) { 583c425c43SSatoshi Sahara $revisions = $pagelog->getRevisions(-1, 200); 593c425c43SSatoshi Sahara $this->assertCount($expectedRevs, $revisions); 603c425c43SSatoshi Sahara $this->assertCount($expectedRevs, array_unique($revisions), 'date duplicated in changelog'); 613c425c43SSatoshi Sahara // last revision 623c425c43SSatoshi Sahara if ($expectedRevs > 0) { 633c425c43SSatoshi Sahara $lastRevInfo = $pagelog->getRevisionInfo($revisions[0]); 643c425c43SSatoshi Sahara $expectedLastEntry += $lastRevInfo; 653c425c43SSatoshi Sahara $this->assertEquals($expectedLastEntry, $lastRevInfo); 663c425c43SSatoshi Sahara } else { 673c425c43SSatoshi Sahara $this->assertFalse($pagelog->lastRevision(), 'changelog file does not yet exist'); 683c425c43SSatoshi Sahara } 693c425c43SSatoshi Sahara // current revision 703c425c43SSatoshi Sahara $currentRevInfo = $pagelog->getCurrentRevisionInfo(); 713c425c43SSatoshi Sahara $this->assertArrayHasKey('timestamp', $currentRevInfo, 'should be external revision'); 723c425c43SSatoshi Sahara $expectedCurrentEntry += $currentRevInfo; 733c425c43SSatoshi Sahara if ($expectedRevs > 0) { 743c425c43SSatoshi Sahara $this->assertEquals($expectedCurrentEntry, $currentRevInfo); 753c425c43SSatoshi Sahara 763c425c43SSatoshi Sahara } 77*01e8d739SAndreas Gohr // attic — external edits/creates are now copied at first detection; 78*01e8d739SAndreas Gohr // deletes have no file to attic 793c425c43SSatoshi Sahara $attic = wikiFN($currentRevInfo['id'], $currentRevInfo['date']); 80*01e8d739SAndreas Gohr if ($currentRevInfo['type'] === DOKU_CHANGE_TYPE_DELETE) { 81*01e8d739SAndreas Gohr $this->assertFileDoesNotExist($attic, 'no attic for external delete'); 82*01e8d739SAndreas Gohr } else { 83*01e8d739SAndreas Gohr $this->assertFileExists($attic, 'persisted external edit should have attic'); 84*01e8d739SAndreas Gohr } 853c425c43SSatoshi Sahara } 863c425c43SSatoshi Sahara 873c425c43SSatoshi Sahara 883c425c43SSatoshi Sahara /** 89023953f0SAndreas Gohr * Execute a whole bunch of saves on the same page and check the results 903d3f6056SSatoshi Sahara * TEST 1 913d3f6056SSatoshi Sahara * 1.1 create a page 923d3f6056SSatoshi Sahara * 1.2 save with same content should be ignored 933d3f6056SSatoshi Sahara * 1.3 update the page with new text 943c425c43SSatoshi Sahara * 1.4 add a minor edit (unauthenticated, minor not allowable) 953d3f6056SSatoshi Sahara * 1.5 add a minor edit (authenticated) 963d3f6056SSatoshi Sahara * 1.6 delete 973d3f6056SSatoshi Sahara * 1.7 restore 983d3f6056SSatoshi Sahara * 1.8 external edit 993c425c43SSatoshi Sahara * 1.9 edit and save on top of external edit 100023953f0SAndreas Gohr */ 1013d3f6056SSatoshi Sahara function test_savesequence1() { 102023953f0SAndreas Gohr global $REV; 103023953f0SAndreas Gohr 104023953f0SAndreas Gohr $page = 'page'; 105023953f0SAndreas Gohr $file = wikiFN($page); 1069ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 107023953f0SAndreas Gohr 1083d3f6056SSatoshi Sahara // 1.1 create a page 1093d3f6056SSatoshi Sahara saveWikiText($page, 'teststring', '1st save', false); 11092fda7f4SSatoshi Sahara clearstatcache(false, $file); 111023953f0SAndreas Gohr $this->assertFileExists($file); 112023953f0SAndreas Gohr $lastmod = filemtime($file); 1133c425c43SSatoshi Sahara $expectedRevs = 1; 1143d3f6056SSatoshi Sahara $expect = array( 1153d3f6056SSatoshi Sahara 'date' => $lastmod, 1163d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 1173d3f6056SSatoshi Sahara 'sum' => '1st save', 1183d3f6056SSatoshi Sahara 'sizechange' => 10, // = strlen('teststring') 1193d3f6056SSatoshi Sahara ); 120023953f0SAndreas Gohr 121023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 1223c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 123023953f0SAndreas Gohr 124aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 125023953f0SAndreas Gohr 1263d3f6056SSatoshi Sahara // 1.2 save with same content should be ignored 1273d3f6056SSatoshi Sahara saveWikiText($page, 'teststring', '2nd save', false); 128023953f0SAndreas Gohr clearstatcache(false, $file); 129023953f0SAndreas Gohr $this->assertEquals($lastmod, filemtime($file)); 130023953f0SAndreas Gohr 131023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 132023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 1337866d571SSatoshi Sahara $this->assertCount(1, $revisions); 134023953f0SAndreas Gohr 1353d3f6056SSatoshi Sahara // 1.3 update the page with new text 1363d3f6056SSatoshi Sahara saveWikiText($page, 'teststring2long', '3rd save', false); 137023953f0SAndreas Gohr clearstatcache(false, $file); 138023953f0SAndreas Gohr $newmod = filemtime($file); 139023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 140023953f0SAndreas Gohr $lastmod = $newmod; 1413c425c43SSatoshi Sahara $expectedRevs = 2; 1425e23cdb8SSatoshi Sahara $expectPrev = $expect; 1433d3f6056SSatoshi Sahara $expect = array( 1443d3f6056SSatoshi Sahara 'date' => $lastmod, 1453d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 1463d3f6056SSatoshi Sahara 'sum' => '3rd save', 1473d3f6056SSatoshi Sahara 'sizechange' => 5, 1483d3f6056SSatoshi Sahara ); 149023953f0SAndreas Gohr 150023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 1515e23cdb8SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectPrev); 152023953f0SAndreas Gohr 153aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 154023953f0SAndreas Gohr 1553c425c43SSatoshi Sahara // 1.4 add a minor edit (unauthenticated, minor not allowable) 1563d3f6056SSatoshi Sahara saveWikiText($page, 'teststring3long', '4th save', true); 157023953f0SAndreas Gohr clearstatcache(false, $file); 158023953f0SAndreas Gohr $newmod = filemtime($file); 159023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 160023953f0SAndreas Gohr $lastmod = $newmod; 1613c425c43SSatoshi Sahara $expectedRevs = 3; 1623d3f6056SSatoshi Sahara $expect = array( 1633d3f6056SSatoshi Sahara 'date' => $lastmod, 1643d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 1653d3f6056SSatoshi Sahara 'sum' => '4th save', 1663d3f6056SSatoshi Sahara 'sizechange' => 0, 1673d3f6056SSatoshi Sahara ); 168023953f0SAndreas Gohr 169023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 1703c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 171023953f0SAndreas Gohr 172aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 173023953f0SAndreas Gohr 1743d3f6056SSatoshi Sahara // 1.5 add a minor edit (authenticated) 175023953f0SAndreas Gohr $_SERVER['REMOTE_USER'] = 'user'; 1763d3f6056SSatoshi Sahara saveWikiText($page, 'teststring4', '5th save', true); 177023953f0SAndreas Gohr clearstatcache(false, $file); 178023953f0SAndreas Gohr $newmod = filemtime($file); 179023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 180023953f0SAndreas Gohr $lastmod = $newmod; 1813c425c43SSatoshi Sahara $expectedRevs = 4; 1823d3f6056SSatoshi Sahara $expect = array( 1833d3f6056SSatoshi Sahara 'date' => $lastmod, 1843d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_MINOR_EDIT, 1853d3f6056SSatoshi Sahara 'sum' => '5th save', 1863d3f6056SSatoshi Sahara 'sizechange' => -4, 1873d3f6056SSatoshi Sahara ); 188023953f0SAndreas Gohr 189023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 1903c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 191023953f0SAndreas Gohr 192aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 193023953f0SAndreas Gohr 1943d3f6056SSatoshi Sahara // 1.6 delete 1953d3f6056SSatoshi Sahara saveWikiText($page, '', '6th save', false); 196023953f0SAndreas Gohr clearstatcache(false, $file); 1979ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 1983c425c43SSatoshi Sahara $expectedRevs = 5; 1993d3f6056SSatoshi Sahara $expect = array( 2003d3f6056SSatoshi Sahara //'date' => $lastmod, // ignore from lastRev assertion, but confirm attic file existence 2013d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_DELETE, 2023d3f6056SSatoshi Sahara 'sum' => '6th save', 2033d3f6056SSatoshi Sahara 'sizechange' => -11, 2043d3f6056SSatoshi Sahara ); 205023953f0SAndreas Gohr 206023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 2073c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 208023953f0SAndreas Gohr 209aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 210023953f0SAndreas Gohr 2113d3f6056SSatoshi Sahara // 1.7 restore 212023953f0SAndreas Gohr $REV = $lastmod; 2133d3f6056SSatoshi Sahara saveWikiText($page, 'teststring4', '7th save', true); 214023953f0SAndreas Gohr clearstatcache(false, $file); 215023953f0SAndreas Gohr $this->assertFileExists($file); 216023953f0SAndreas Gohr $newmod = filemtime($file); 217023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 218023953f0SAndreas Gohr $lastmod = $newmod; 2193c425c43SSatoshi Sahara $expectedRevs = 6; 2203d3f6056SSatoshi Sahara $expect = array( 2213d3f6056SSatoshi Sahara 'date' => $lastmod, 2223d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_REVERT, 2233d3f6056SSatoshi Sahara 'sum' => '7th save', 2243d3f6056SSatoshi Sahara 'sizechange' => 11, 2253d3f6056SSatoshi Sahara ); 226023953f0SAndreas Gohr 227023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 2283c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 229023953f0SAndreas Gohr $REV = ''; 230023953f0SAndreas Gohr 231aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 232023953f0SAndreas Gohr 2333d3f6056SSatoshi Sahara // 1.8 external edit 2343d3f6056SSatoshi Sahara file_put_contents($file, 'teststring5 external edit'); 235023953f0SAndreas Gohr clearstatcache(false, $file); 236023953f0SAndreas Gohr $newmod = filemtime($file); 237023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 238023953f0SAndreas Gohr $lastmod = $newmod; 2393c425c43SSatoshi Sahara $expectedRevs = 6; // external edit is not yet in changelog 2403d3f6056SSatoshi Sahara $expectExternal = array( 2413d3f6056SSatoshi Sahara 'date' => $lastmod, 2423d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 2433d3f6056SSatoshi Sahara 'sum' => 'external edit', 2443d3f6056SSatoshi Sahara 'sizechange' => 14, 2453d3f6056SSatoshi Sahara ); 2463d3f6056SSatoshi Sahara 2473d3f6056SSatoshi Sahara $pagelog = new PageChangeLog($page); 2483c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 2493d3f6056SSatoshi Sahara 2503d3f6056SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 2513d3f6056SSatoshi Sahara 2523d3f6056SSatoshi Sahara // 1.9 save on top of external edit 2533d3f6056SSatoshi Sahara saveWikiText($page, 'teststring6', '8th save', false); 2543d3f6056SSatoshi Sahara clearstatcache(false, $file); 2553d3f6056SSatoshi Sahara $newmod = filemtime($file); 2563d3f6056SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 2573d3f6056SSatoshi Sahara $lastmod = $newmod; 2583c425c43SSatoshi Sahara $expectedRevs = 8; 2593d3f6056SSatoshi Sahara $expect = array( 2603d3f6056SSatoshi Sahara 'date' => $lastmod, 2613d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 2623d3f6056SSatoshi Sahara 'sum' => '8th save', 2633d3f6056SSatoshi Sahara 'sizechange' => -14, 2643d3f6056SSatoshi Sahara ); 265023953f0SAndreas Gohr 266023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 267b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 268023953f0SAndreas Gohr } 2696072486dSGerrit Uitslag 2706072486dSGerrit Uitslag /** 2716072486dSGerrit Uitslag * Execute a whole bunch of saves on the same page and check the results 2723d3f6056SSatoshi Sahara * using $this->handle_write() in event IO_WIKIPAGE_WRITE 2733c425c43SSatoshi Sahara * TEST 2 - create a page externally in 2.3, while external edit in Test 1.8 2743d3f6056SSatoshi Sahara * 2.1 create a page 2753d3f6056SSatoshi Sahara * 2.2 delete 2763d3f6056SSatoshi Sahara * 2.3 externally create the page 2773c425c43SSatoshi Sahara * 2.4 edit and save on top of external edit 2783c425c43SSatoshi Sahara * 2.5 external edit 2793c425c43SSatoshi Sahara * 2.6 edit and save on top of external edit, again 2806072486dSGerrit Uitslag */ 2813d3f6056SSatoshi Sahara function test_savesequence2() { 282ea466a98SMichael Hamann // add an additional delay when saving files to make sure 283ea466a98SMichael Hamann // nobody relies on the saving happening in the same second 284e1d9dcc8SAndreas Gohr /** @var $EVENT_HANDLER \dokuwiki\Extension\EventHandler */ 285ea466a98SMichael Hamann global $EVENT_HANDLER; 286ea466a98SMichael Hamann $EVENT_HANDLER->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, 'handle_write'); 287ea466a98SMichael Hamann 2886072486dSGerrit Uitslag $page = 'page2'; 2896072486dSGerrit Uitslag $file = wikiFN($page); 2909ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 2916072486dSGerrit Uitslag 2923d3f6056SSatoshi Sahara // 2.1 create a page 2933d3f6056SSatoshi Sahara saveWikiText($page, 'teststring', 'Test 2, 1st save', false); 29492fda7f4SSatoshi Sahara clearstatcache(false, $file); 2956072486dSGerrit Uitslag $this->assertFileExists($file); 2966072486dSGerrit Uitslag $lastmod = filemtime($file); 2973c425c43SSatoshi Sahara $expectedRevs = 1; 2983d3f6056SSatoshi Sahara $expect = array( 2993d3f6056SSatoshi Sahara 'date' => $lastmod, 3003d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 3013d3f6056SSatoshi Sahara 'sum' => 'Test 2, 1st save', 3023d3f6056SSatoshi Sahara 'sizechange' => 10, // = strlen('teststring') 3033d3f6056SSatoshi Sahara ); 3046072486dSGerrit Uitslag 3056072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3063c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 3076072486dSGerrit Uitslag 308aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 3096072486dSGerrit Uitslag 3103d3f6056SSatoshi Sahara // 2.2 delete 3113d3f6056SSatoshi Sahara saveWikiText($page, '', 'Test 2, 2nd save', false); 3126072486dSGerrit Uitslag clearstatcache(false, $file); 3139ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 3143c425c43SSatoshi Sahara $expectedRevs = 2; 3153d3f6056SSatoshi Sahara $expect = array( 3163d3f6056SSatoshi Sahara //'date' => $lastmod, // ignore from lastRev assertion, but confirm attic file existence 3173d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_DELETE, 3183d3f6056SSatoshi Sahara 'sum' => 'Test 2, 2nd save', 3193d3f6056SSatoshi Sahara 'sizechange' => -10, 3203d3f6056SSatoshi Sahara ); 3216072486dSGerrit Uitslag 3226072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3233c425c43SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 3246072486dSGerrit Uitslag 325aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 3266072486dSGerrit Uitslag 3273d3f6056SSatoshi Sahara // 2.3 externally create the page 3286072486dSGerrit Uitslag file_put_contents($file, 'teststring5'); 3293d3f6056SSatoshi Sahara clearstatcache(false, $file); 3303d3f6056SSatoshi Sahara $lastmod = filemtime($file); 3313c425c43SSatoshi Sahara $expectedRevs = 2; // external edit is not yet in changelog 3323d3f6056SSatoshi Sahara $expectExternal = array( 3333d3f6056SSatoshi Sahara 'date' => $lastmod, 3343d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 3353d3f6056SSatoshi Sahara 'sum' => 'created - external edit', 3363d3f6056SSatoshi Sahara 'sizechange' => 11, 3373d3f6056SSatoshi Sahara ); 3383d3f6056SSatoshi Sahara 3393d3f6056SSatoshi Sahara $pagelog = new PageChangeLog($page); 3403c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 3416072486dSGerrit Uitslag 342aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 3436072486dSGerrit Uitslag 3443d3f6056SSatoshi Sahara // 2.4 save on top of external edit 3453d3f6056SSatoshi Sahara saveWikiText($page, 'teststring6', 'Test 2, 3rd save', false); 3466072486dSGerrit Uitslag clearstatcache(false, $file); 3473d3f6056SSatoshi Sahara $newmod = filemtime($file); 3483d3f6056SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 3493d3f6056SSatoshi Sahara $lastmod = $newmod; 3503c425c43SSatoshi Sahara $expectedRevs = 4; // two more revisions now! 3513d3f6056SSatoshi Sahara $expect = array( 3523d3f6056SSatoshi Sahara 'date' => $lastmod, 3533d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 3543d3f6056SSatoshi Sahara 'sum' => 'Test 2, 3rd save', 3553d3f6056SSatoshi Sahara 'sizechange' => 0, 3563d3f6056SSatoshi Sahara ); 3576072486dSGerrit Uitslag 3586072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 359b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 3606072486dSGerrit Uitslag 3613c425c43SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 3623c425c43SSatoshi Sahara 3633c425c43SSatoshi Sahara // 2.5 external edit 3643c425c43SSatoshi Sahara file_put_contents($file, 'teststring7 external edit2'); 3653c425c43SSatoshi Sahara clearstatcache(false, $file); 3663c425c43SSatoshi Sahara $newmod = filemtime($file); 3673c425c43SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 3683c425c43SSatoshi Sahara $lastmod = $newmod; 3693c425c43SSatoshi Sahara $expectedRevs = 4; // external edit is not yet in changelog 3703c425c43SSatoshi Sahara $expectExternal = array( 3713c425c43SSatoshi Sahara 'date' => $lastmod, 3723c425c43SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 3733c425c43SSatoshi Sahara 'sum' => 'external edit', 3743c425c43SSatoshi Sahara 'sizechange' => 15, 3753c425c43SSatoshi Sahara ); 3763c425c43SSatoshi Sahara 3773c425c43SSatoshi Sahara $pagelog = new PageChangeLog($page); 3783c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 3793c425c43SSatoshi Sahara 3803c425c43SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 3813c425c43SSatoshi Sahara 3823c425c43SSatoshi Sahara // 2.6 save on top of external edit, again 3833c425c43SSatoshi Sahara saveWikiText($page, 'teststring8', 'Test 2, 4th save', false); 3843c425c43SSatoshi Sahara clearstatcache(false, $file); 3853c425c43SSatoshi Sahara $newmod = filemtime($file); 3863c425c43SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 3873c425c43SSatoshi Sahara $lastmod = $newmod; 3883c425c43SSatoshi Sahara $expectedRevs = 6; // two more revisions now! 3893c425c43SSatoshi Sahara $expect = array( 3903c425c43SSatoshi Sahara 'date' => $lastmod, 3913c425c43SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 3923c425c43SSatoshi Sahara 'sum' => 'Test 2, 4th save', 3933c425c43SSatoshi Sahara 'sizechange' => -15, 3943c425c43SSatoshi Sahara ); 3953c425c43SSatoshi Sahara 3963c425c43SSatoshi Sahara $pagelog = new PageChangeLog($page); 397b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 3986072486dSGerrit Uitslag } 3996072486dSGerrit Uitslag 4006072486dSGerrit Uitslag /** 4016072486dSGerrit Uitslag * Execute a whole bunch of saves on the same page and check the results 4023c425c43SSatoshi Sahara * TEST 3 - typical page life of bundled page such as wiki:syntax 4033d3f6056SSatoshi Sahara * 3.1 externally create a page 4043d3f6056SSatoshi Sahara * 3.2 external edit 4053c425c43SSatoshi Sahara * 3.3 edit and save on top of external edit 4063d3f6056SSatoshi Sahara * 3.4 externally delete the page 4076072486dSGerrit Uitslag */ 4083d3f6056SSatoshi Sahara function test_savesequence3() { 4096072486dSGerrit Uitslag $page = 'page3'; 4106072486dSGerrit Uitslag $file = wikiFN($page); 4116072486dSGerrit Uitslag 4123d3f6056SSatoshi Sahara // 3.1 externally create a page 4139ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 4146072486dSGerrit Uitslag file_put_contents($file, 'teststring'); 4153d3f6056SSatoshi Sahara clearstatcache(false, $file); 4163d3f6056SSatoshi Sahara $lastmod = filemtime($file); 4173c425c43SSatoshi Sahara $expectedRevs = 0; // external edit is not yet in changelog 4183c425c43SSatoshi Sahara $expect = false; 4193d3f6056SSatoshi Sahara $expectExternal = array( 4203d3f6056SSatoshi Sahara 'date' => $lastmod, 4213d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 4223d3f6056SSatoshi Sahara 'sum' => 'created - external edit', 4233d3f6056SSatoshi Sahara 'sizechange' => 10, 4243d3f6056SSatoshi Sahara ); 4253d3f6056SSatoshi Sahara 4263d3f6056SSatoshi Sahara $pagelog = new PageChangeLog($page); 4273c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 4286072486dSGerrit Uitslag 429aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 4306072486dSGerrit Uitslag 431*01e8d739SAndreas Gohr // 3.2 external edit (3.1 was already persisted on first detection, 432*01e8d739SAndreas Gohr // so this is now an EDIT on top of the prior external CREATE) 433*01e8d739SAndreas Gohr $expect = $expectExternal; // last revision is the 3.1 persisted entry 4343d3f6056SSatoshi Sahara file_put_contents($file, 'teststring external edit'); 4356072486dSGerrit Uitslag clearstatcache(false, $file); 4363d3f6056SSatoshi Sahara $newmod = filemtime($file); 4373d3f6056SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 4383d3f6056SSatoshi Sahara $lastmod = $newmod; 439*01e8d739SAndreas Gohr $expectedRevs = 1; 4403d3f6056SSatoshi Sahara $expectExternal = array( 4413d3f6056SSatoshi Sahara 'date' => $lastmod, 442*01e8d739SAndreas Gohr 'type' => DOKU_CHANGE_TYPE_EDIT, 443*01e8d739SAndreas Gohr 'sum' => 'external edit', 444*01e8d739SAndreas Gohr 'sizechange' => 14, 4453d3f6056SSatoshi Sahara ); 4463d3f6056SSatoshi Sahara 4473d3f6056SSatoshi Sahara $pagelog = new PageChangeLog($page); 4483c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 4493d3f6056SSatoshi Sahara 4503d3f6056SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 4513d3f6056SSatoshi Sahara 4523d3f6056SSatoshi Sahara // 3.3 save on top of external edit 4533d3f6056SSatoshi Sahara saveWikiText($page, 'teststring1', 'Test 3, first save', false); 4543d3f6056SSatoshi Sahara clearstatcache(false, $file); 4553d3f6056SSatoshi Sahara $newmod = filemtime($file); 4563d3f6056SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 4573d3f6056SSatoshi Sahara $lastmod = $newmod; 458*01e8d739SAndreas Gohr $expectedRevs = 3; 4593d3f6056SSatoshi Sahara $expect = array( 4603d3f6056SSatoshi Sahara 'date' => $lastmod, 4613d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 4623d3f6056SSatoshi Sahara 'sum' => 'Test 3, first save', 4633d3f6056SSatoshi Sahara 'sizechange' => -13, 4643d3f6056SSatoshi Sahara ); 4656072486dSGerrit Uitslag 4666072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 467b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 4686072486dSGerrit Uitslag 469aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 4706072486dSGerrit Uitslag 4713d3f6056SSatoshi Sahara // 3.4 externally delete the page 4726072486dSGerrit Uitslag unlink($file); 473*01e8d739SAndreas Gohr $expectedRevs = 3; 4743d3f6056SSatoshi Sahara $expectExternal = array( 4753d3f6056SSatoshi Sahara //'date' => $lastmod, 4763d3f6056SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_DELETE, 4773d3f6056SSatoshi Sahara 'sum' => 'removed - external edit (Unknown date)', 4783d3f6056SSatoshi Sahara 'sizechange' => -11, 4793d3f6056SSatoshi Sahara ); 4806072486dSGerrit Uitslag 4816072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 4823c425c43SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 4836072486dSGerrit Uitslag } 4846072486dSGerrit Uitslag 48592fda7f4SSatoshi Sahara /** 48692fda7f4SSatoshi Sahara * Execute a whole bunch of saves on the same page and check the results 48792fda7f4SSatoshi Sahara * TEST 4 - typical page life of bundled page such as wiki:syntax 48892fda7f4SSatoshi Sahara * 4.1 externally create a page 48992fda7f4SSatoshi Sahara * 4.2 edit and save 49092fda7f4SSatoshi Sahara * 4.3 externally edit as a result of a file which has older timestamp than last revision 49192fda7f4SSatoshi Sahara */ 49292fda7f4SSatoshi Sahara function test_savesequence4() { 49392fda7f4SSatoshi Sahara $page = 'page4'; 49492fda7f4SSatoshi Sahara $file = wikiFN($page); 49592fda7f4SSatoshi Sahara 49692fda7f4SSatoshi Sahara // 4.1 externally create a page 4979ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 49892fda7f4SSatoshi Sahara file_put_contents($file, 'teststring'); 49992fda7f4SSatoshi Sahara clearstatcache(false, $file); 50092fda7f4SSatoshi Sahara $lastmod = filemtime($file); 50192fda7f4SSatoshi Sahara $expectedRevs = 0; // external edit is not yet in changelog 50292fda7f4SSatoshi Sahara $expect = false; 50392fda7f4SSatoshi Sahara $expectExternal = array( 50492fda7f4SSatoshi Sahara 'date' => $lastmod, 50592fda7f4SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 50692fda7f4SSatoshi Sahara 'sum' => 'created - external edit', 50792fda7f4SSatoshi Sahara 'sizechange' => 10, 50892fda7f4SSatoshi Sahara ); 50992fda7f4SSatoshi Sahara 51092fda7f4SSatoshi Sahara $pagelog = new PageChangeLog($page); 51192fda7f4SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 51292fda7f4SSatoshi Sahara 51392fda7f4SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 51492fda7f4SSatoshi Sahara 51592fda7f4SSatoshi Sahara // 4.2 edit and save 51692fda7f4SSatoshi Sahara saveWikiText($page, 'teststring1', 'Test 4, first save', false); 51792fda7f4SSatoshi Sahara clearstatcache(false, $file); 51892fda7f4SSatoshi Sahara $newmod = filemtime($file); 51992fda7f4SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 52092fda7f4SSatoshi Sahara $lastmod = $newmod; 52192fda7f4SSatoshi Sahara $expectedRevs = 2; // two more revisions now! 52292fda7f4SSatoshi Sahara $expect = array( 52392fda7f4SSatoshi Sahara 'date' => $lastmod, 52492fda7f4SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 52592fda7f4SSatoshi Sahara 'sum' => 'Test 4, first save', 52692fda7f4SSatoshi Sahara 'sizechange' => 1, 52792fda7f4SSatoshi Sahara ); 52892fda7f4SSatoshi Sahara 52992fda7f4SSatoshi Sahara $pagelog = new PageChangeLog($page); 530b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 53192fda7f4SSatoshi Sahara 53292fda7f4SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 53392fda7f4SSatoshi Sahara 53492fda7f4SSatoshi Sahara // 4.3 externally edit as a result of a file which has older timestamp than last revision 53592fda7f4SSatoshi Sahara unlink($file); 53636784b8fSAndreas Gohr file_put_contents($file, 'teststring fake 1 hour past'); 53792fda7f4SSatoshi Sahara touch($file, filemtime($file) -3600); // change file modification time to 1 hour past 53892fda7f4SSatoshi Sahara clearstatcache(); 53992fda7f4SSatoshi Sahara $newmod = filemtime($file); 54092fda7f4SSatoshi Sahara $this->assertLessThan($lastmod, $newmod); // file must be older than previous for this test 54192fda7f4SSatoshi Sahara $expectedRevs = 2; // external edit is not yet in changelog 54292fda7f4SSatoshi Sahara $expectExternal = array( 54392fda7f4SSatoshi Sahara 'date' => $lastmod + 1, 54492fda7f4SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 54592fda7f4SSatoshi Sahara 'sum' => 'external edit (Unknown date)', 54692fda7f4SSatoshi Sahara 'sizechange' => 16, 54792fda7f4SSatoshi Sahara ); 54892fda7f4SSatoshi Sahara 54936784b8fSAndreas Gohr $this->expectLogMessage('current file modification time is older than last'); 55092fda7f4SSatoshi Sahara $pagelog = new PageChangeLog($page); 55192fda7f4SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 55292fda7f4SSatoshi Sahara } 55392fda7f4SSatoshi Sahara 5548fb3ff96SSatoshi Sahara /** 5558fb3ff96SSatoshi Sahara * Execute a whole bunch of saves on the same page and check the results 5568fb3ff96SSatoshi Sahara * TEST 5 - page creation and deletion 5578fb3ff96SSatoshi Sahara * 5.1 create a page 5588fb3ff96SSatoshi Sahara * 5.2 external edit 5598fb3ff96SSatoshi Sahara * 5.3 edit and save on top of external edit 5608fb3ff96SSatoshi Sahara * 5.4 delete 5618fb3ff96SSatoshi Sahara * 5.5 create a page, second time 5628fb3ff96SSatoshi Sahara * 5.6 externally delete 5638fb3ff96SSatoshi Sahara * 5.7 create a page, third time 5648fb3ff96SSatoshi Sahara */ 5658fb3ff96SSatoshi Sahara function test_savesequence5() { 5668fb3ff96SSatoshi Sahara $page = 'page5'; 5678fb3ff96SSatoshi Sahara $file = wikiFN($page); 5689ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 5698fb3ff96SSatoshi Sahara 5708fb3ff96SSatoshi Sahara // 5.1 create a page 5718fb3ff96SSatoshi Sahara saveWikiText($page, 'teststring', 'Test 5, 1st save', false); 5728fb3ff96SSatoshi Sahara $this->assertFileExists($file); 5738fb3ff96SSatoshi Sahara $lastmod = filemtime($file); 5748fb3ff96SSatoshi Sahara $expectedRevs = 1; 5758fb3ff96SSatoshi Sahara $expect = array( 5768fb3ff96SSatoshi Sahara 'date' => $lastmod, 5778fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 5788fb3ff96SSatoshi Sahara 'sum' => 'Test 5, 1st save', 5798fb3ff96SSatoshi Sahara 'sizechange' => 10, // = strlen('teststring') 5808fb3ff96SSatoshi Sahara ); 5818fb3ff96SSatoshi Sahara 5828fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 5838fb3ff96SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 5848fb3ff96SSatoshi Sahara 5858fb3ff96SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 5868fb3ff96SSatoshi Sahara 5878fb3ff96SSatoshi Sahara // 5.2 external edit 5888fb3ff96SSatoshi Sahara file_put_contents($file, 'teststring external edit'); 5898fb3ff96SSatoshi Sahara clearstatcache(false, $file); 5908fb3ff96SSatoshi Sahara $newmod = filemtime($file); 5918fb3ff96SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 5928fb3ff96SSatoshi Sahara $lastmod = $newmod; 5938fb3ff96SSatoshi Sahara $expectedRevs = 1; // external edit is not yet in changelog 5948fb3ff96SSatoshi Sahara $expectExternal = array( 5958fb3ff96SSatoshi Sahara 'date' => $lastmod, 5968fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 5978fb3ff96SSatoshi Sahara 'sum' => 'external edit', 5988fb3ff96SSatoshi Sahara 'sizechange' => 14, 5998fb3ff96SSatoshi Sahara ); 6008fb3ff96SSatoshi Sahara 6018fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 6028fb3ff96SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 6038fb3ff96SSatoshi Sahara 6048fb3ff96SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 6058fb3ff96SSatoshi Sahara 6068fb3ff96SSatoshi Sahara // 5.3 edit and save on top of external edit 6078fb3ff96SSatoshi Sahara saveWikiText($page, 'teststring normal edit', 'Test 5, 2nd save', false); 6088fb3ff96SSatoshi Sahara clearstatcache(false, $file); 6098fb3ff96SSatoshi Sahara $newmod = filemtime($file); 6108fb3ff96SSatoshi Sahara $this->assertNotEquals($lastmod, $newmod); 6118fb3ff96SSatoshi Sahara $lastmod = $newmod; 6128fb3ff96SSatoshi Sahara $expectedRevs = 3; // two more revisions now! 6138fb3ff96SSatoshi Sahara $expect = array( 6148fb3ff96SSatoshi Sahara 'date' => $lastmod, 6158fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_EDIT, 6168fb3ff96SSatoshi Sahara 'sum' => 'Test 5, 2nd save', 6178fb3ff96SSatoshi Sahara 'sizechange' => -2, 6188fb3ff96SSatoshi Sahara ); 6198fb3ff96SSatoshi Sahara 6208fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 621b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 6228fb3ff96SSatoshi Sahara 6238fb3ff96SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 6248fb3ff96SSatoshi Sahara 6258fb3ff96SSatoshi Sahara // 5.4 delete 6268fb3ff96SSatoshi Sahara saveWikiText($page, '', 'Test 5 3rd save', false); 6278fb3ff96SSatoshi Sahara clearstatcache(false, $file); 6289ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 6298fb3ff96SSatoshi Sahara $expectedRevs = 4; 6308fb3ff96SSatoshi Sahara $expect = array( 6318fb3ff96SSatoshi Sahara //'date' => $lastmod, // ignore from lastRev assertion, but confirm attic file existence 6328fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_DELETE, 6338fb3ff96SSatoshi Sahara 'sum' => 'Test 5 3rd save', 6348fb3ff96SSatoshi Sahara 'sizechange' => -22, 6358fb3ff96SSatoshi Sahara ); 6368fb3ff96SSatoshi Sahara 6378fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 6388fb3ff96SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 6398fb3ff96SSatoshi Sahara 6408fb3ff96SSatoshi Sahara $this->waitForTick(); // wait for new revision ID 6418fb3ff96SSatoshi Sahara 6428fb3ff96SSatoshi Sahara // 5.5 create a page, second time 6439ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 6448fb3ff96SSatoshi Sahara saveWikiText($page, 'teststring revived', 'Test 5, 4th save', false); 6458fb3ff96SSatoshi Sahara $this->assertFileExists($file); 6468fb3ff96SSatoshi Sahara $lastmod = filemtime($file); 6478fb3ff96SSatoshi Sahara $expectedRevs = 5; 6488fb3ff96SSatoshi Sahara $expect = array( 6498fb3ff96SSatoshi Sahara 'date' => $lastmod, 6508fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 6518fb3ff96SSatoshi Sahara 'sum' => 'Test 5, 4th save', 6528fb3ff96SSatoshi Sahara 'sizechange' => 18, // = strlen('teststring revived') 6538fb3ff96SSatoshi Sahara ); 6548fb3ff96SSatoshi Sahara 6558fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 6568fb3ff96SSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect); 6578fb3ff96SSatoshi Sahara 6588fb3ff96SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 6598fb3ff96SSatoshi Sahara 6608fb3ff96SSatoshi Sahara // 5.6 externally delete 6618fb3ff96SSatoshi Sahara unlink($file); 6629ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 6638fb3ff96SSatoshi Sahara $expectedRevs = 5; 6648fb3ff96SSatoshi Sahara $expectExternal = array( 6658fb3ff96SSatoshi Sahara //'date' => $lastmod, 6668fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_DELETE, 6678fb3ff96SSatoshi Sahara 'sum' => 'removed - external edit (Unknown date)', 6688fb3ff96SSatoshi Sahara 'sizechange' => -18, 6698fb3ff96SSatoshi Sahara ); 6708fb3ff96SSatoshi Sahara 6718fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 6728fb3ff96SSatoshi Sahara $this->checkChangeLogAfterExternalEdit($pagelog, $expectedRevs, $expect, $expectExternal); 6738fb3ff96SSatoshi Sahara 6748fb3ff96SSatoshi Sahara $this->waitForTick(true); // wait for new revision ID 6758fb3ff96SSatoshi Sahara 6768fb3ff96SSatoshi Sahara // 5.7 create a page, third time 6779ad2b913SAndreas Gohr $this->assertFileDoesNotExist($file); 6788fb3ff96SSatoshi Sahara saveWikiText($page, 'teststring revived 2', 'Test 5, 5th save', false); 6798fb3ff96SSatoshi Sahara clearstatcache(false, $file); 6808fb3ff96SSatoshi Sahara $this->assertFileExists($file); 6818fb3ff96SSatoshi Sahara $lastmod = filemtime($file); 6828fb3ff96SSatoshi Sahara $expectedRevs = 7; 6838fb3ff96SSatoshi Sahara $expect = array( 6848fb3ff96SSatoshi Sahara 'date' => $lastmod, 6858fb3ff96SSatoshi Sahara 'type' => DOKU_CHANGE_TYPE_CREATE, 6868fb3ff96SSatoshi Sahara 'sum' => 'Test 5, 5th save', 6878fb3ff96SSatoshi Sahara 'sizechange' => 20, // = strlen('teststring revived 2') 6888fb3ff96SSatoshi Sahara ); 6898fb3ff96SSatoshi Sahara 6908fb3ff96SSatoshi Sahara $pagelog = new PageChangeLog($page); 691b7b9a99dSSatoshi Sahara $this->checkChangeLogAfterNormalSave($pagelog, $expectedRevs, $expect, $expectExternal); 6928fb3ff96SSatoshi Sahara } 6938fb3ff96SSatoshi Sahara 694023953f0SAndreas Gohr} 695