1023953f0SAndreas Gohr<?php 2023953f0SAndreas Gohr 30c3a5702SAndreas Gohruse dokuwiki\ChangeLog\PageChangeLog; 40c3a5702SAndreas Gohr 5023953f0SAndreas Gohrclass common_saveWikiText_test extends DokuWikiTest { 6ea466a98SMichael Hamann /** Delay writes of old revisions by a second. */ 7ea466a98SMichael Hamann public function handle_write(Doku_Event $event, $param) { 8ea466a98SMichael Hamann if ($event->data[3] !== false) { 9ea466a98SMichael Hamann $this->waitForTick(); 10ea466a98SMichael Hamann } 11ea466a98SMichael Hamann } 12023953f0SAndreas Gohr 13023953f0SAndreas Gohr /** 14023953f0SAndreas Gohr * Execute a whole bunch of saves on the same page and check the results 15023953f0SAndreas Gohr */ 16023953f0SAndreas Gohr function test_savesequence() { 17023953f0SAndreas Gohr global $REV; 18023953f0SAndreas Gohr 19023953f0SAndreas Gohr $page = 'page'; 20023953f0SAndreas Gohr $file = wikiFN($page); 21023953f0SAndreas Gohr 22023953f0SAndreas Gohr // create the page 23023953f0SAndreas Gohr $this->assertFileNotExists($file); 24023953f0SAndreas Gohr saveWikiText($page, 'teststring', 'first save', false); 25023953f0SAndreas Gohr $this->assertFileExists($file); 26023953f0SAndreas Gohr $lastmod = filemtime($file); 27023953f0SAndreas Gohr 28023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 29023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 30*7866d571SSatoshi Sahara $this->assertCount(1, $revisions); 31023953f0SAndreas Gohr $revinfo = $pagelog->getRevisionInfo($revisions[0]); 32023953f0SAndreas Gohr $this->assertEquals('first save', $revinfo['sum']); 33023953f0SAndreas Gohr $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']); 344b5aebc1SGerrit Uitslag $this->assertEquals(10, $revinfo['sizechange']); 35ea466a98SMichael Hamann $this->assertFileExists(wikiFN($page, $revinfo['date'])); 36023953f0SAndreas Gohr 37aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 38023953f0SAndreas Gohr 39023953f0SAndreas Gohr // save with same content should be ignored 40023953f0SAndreas Gohr saveWikiText($page, 'teststring', 'second save', false); 41023953f0SAndreas Gohr clearstatcache(false, $file); 42023953f0SAndreas Gohr $this->assertEquals($lastmod, filemtime($file)); 43023953f0SAndreas Gohr 44023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 45023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 46*7866d571SSatoshi Sahara $this->assertCount(1, $revisions); 47023953f0SAndreas Gohr 48023953f0SAndreas Gohr // update the page with new text 494b5aebc1SGerrit Uitslag saveWikiText($page, 'teststring2long', 'third save', false); 50023953f0SAndreas Gohr clearstatcache(false, $file); 51023953f0SAndreas Gohr $newmod = filemtime($file); 52023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 53023953f0SAndreas Gohr $lastmod = $newmod; 54023953f0SAndreas Gohr 55023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 56023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 57*7866d571SSatoshi Sahara $this->assertCount(2, $revisions); 58023953f0SAndreas Gohr $revinfo = $pagelog->getRevisionInfo($revisions[0]); 59023953f0SAndreas Gohr $this->assertEquals('third save', $revinfo['sum']); 60023953f0SAndreas Gohr $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 614b5aebc1SGerrit Uitslag $this->assertEquals(5, $revinfo['sizechange']); 62023953f0SAndreas Gohr 63aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 64023953f0SAndreas Gohr 65023953f0SAndreas Gohr // add a minor edit (unauthenticated) 664b5aebc1SGerrit Uitslag saveWikiText($page, 'teststring3long', 'fourth save', true); 67023953f0SAndreas Gohr clearstatcache(false, $file); 68023953f0SAndreas Gohr $newmod = filemtime($file); 69023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 70023953f0SAndreas Gohr $lastmod = $newmod; 71023953f0SAndreas Gohr 72023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 73023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 74*7866d571SSatoshi Sahara $this->assertCount(3, $revisions); 75023953f0SAndreas Gohr $revinfo = $pagelog->getRevisionInfo($revisions[0]); 76023953f0SAndreas Gohr $this->assertEquals('fourth save', $revinfo['sum']); 77023953f0SAndreas Gohr $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 784b5aebc1SGerrit Uitslag $this->assertEquals(0, $revinfo['sizechange']); 79023953f0SAndreas Gohr 80aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 81023953f0SAndreas Gohr 82023953f0SAndreas Gohr // add a minor edit (authenticated) 83023953f0SAndreas Gohr $_SERVER['REMOTE_USER'] = 'user'; 84023953f0SAndreas Gohr saveWikiText($page, 'teststring4', 'fifth save', true); 85023953f0SAndreas Gohr clearstatcache(false, $file); 86023953f0SAndreas Gohr $newmod = filemtime($file); 87023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 88023953f0SAndreas Gohr $lastmod = $newmod; 89023953f0SAndreas Gohr 90023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 91023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 92*7866d571SSatoshi Sahara $this->assertCount(4, $revisions); 93023953f0SAndreas Gohr $revinfo = $pagelog->getRevisionInfo($revisions[0]); 94023953f0SAndreas Gohr $this->assertEquals('fifth save', $revinfo['sum']); 95023953f0SAndreas Gohr $this->assertEquals(DOKU_CHANGE_TYPE_MINOR_EDIT, $revinfo['type']); 964b5aebc1SGerrit Uitslag $this->assertEquals(-4, $revinfo['sizechange']); 97023953f0SAndreas Gohr 98aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 99023953f0SAndreas Gohr 100023953f0SAndreas Gohr // delete 101023953f0SAndreas Gohr saveWikiText($page, '', 'sixth save', false); 102023953f0SAndreas Gohr clearstatcache(false, $file); 103023953f0SAndreas Gohr $this->assertFileNotExists($file); 104023953f0SAndreas Gohr 105023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 106023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 107*7866d571SSatoshi Sahara $this->assertCount(5, $revisions); 108023953f0SAndreas Gohr $revinfo = $pagelog->getRevisionInfo($revisions[0]); 109023953f0SAndreas Gohr $this->assertEquals('sixth save', $revinfo['sum']); 110023953f0SAndreas Gohr $this->assertEquals(DOKU_CHANGE_TYPE_DELETE, $revinfo['type']); 1114b5aebc1SGerrit Uitslag $this->assertEquals(-11, $revinfo['sizechange']); 112ea466a98SMichael Hamann $this->assertFileExists(wikiFN($page, $revinfo['date'])); 113023953f0SAndreas Gohr 114aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 115023953f0SAndreas Gohr 116023953f0SAndreas Gohr // restore 117023953f0SAndreas Gohr $REV = $lastmod; 118023953f0SAndreas Gohr saveWikiText($page, 'teststring4', 'seventh save', true); 119023953f0SAndreas Gohr clearstatcache(false, $file); 120023953f0SAndreas Gohr $this->assertFileExists($file); 121023953f0SAndreas Gohr $newmod = filemtime($file); 122023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 123023953f0SAndreas Gohr $lastmod = $newmod; 124023953f0SAndreas Gohr 125023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 126023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 127*7866d571SSatoshi Sahara $this->assertCount(6, $revisions); 128023953f0SAndreas Gohr $revinfo = $pagelog->getRevisionInfo($revisions[0]); 129023953f0SAndreas Gohr $this->assertEquals('seventh save', $revinfo['sum']); 130023953f0SAndreas Gohr $this->assertEquals(DOKU_CHANGE_TYPE_REVERT, $revinfo['type']); 131023953f0SAndreas Gohr $this->assertEquals($REV, $revinfo['extra']); 1324b5aebc1SGerrit Uitslag $this->assertEquals(11, $revinfo['sizechange']); 133ea466a98SMichael Hamann $this->assertFileExists(wikiFN($page, $revinfo['date'])); 134023953f0SAndreas Gohr $REV = ''; 135023953f0SAndreas Gohr 136aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 137023953f0SAndreas Gohr 138023953f0SAndreas Gohr // create external edit 139023953f0SAndreas Gohr file_put_contents($file, 'teststring5'); 140023953f0SAndreas Gohr 141aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 142023953f0SAndreas Gohr 143023953f0SAndreas Gohr // save on top of external edit 144023953f0SAndreas Gohr saveWikiText($page, 'teststring6', 'eigth save', false); 145023953f0SAndreas Gohr clearstatcache(false, $file); 146023953f0SAndreas Gohr $newmod = filemtime($file); 147023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 148023953f0SAndreas Gohr $lastmod = $newmod; 149023953f0SAndreas Gohr 150023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 151023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 152*7866d571SSatoshi Sahara $this->assertCount(8, $revisions); // two more revisions now! 153023953f0SAndreas Gohr $revinfo = $pagelog->getRevisionInfo($revisions[0]); 154023953f0SAndreas Gohr $this->assertEquals('eigth save', $revinfo['sum']); 155023953f0SAndreas Gohr $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 1564b5aebc1SGerrit Uitslag $this->assertEquals(0, $revinfo['sizechange']); 157023953f0SAndreas Gohr 158023953f0SAndreas Gohr $revinfo = $pagelog->getRevisionInfo($revisions[1]); 159023953f0SAndreas Gohr $this->assertEquals('external edit', $revinfo['sum']); 160023953f0SAndreas Gohr $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 1614b5aebc1SGerrit Uitslag $this->assertEquals(0, $revinfo['sizechange']); 162023953f0SAndreas Gohr 163023953f0SAndreas Gohr } 1646072486dSGerrit Uitslag 1656072486dSGerrit Uitslag /** 1666072486dSGerrit Uitslag * Execute a whole bunch of saves on the same page and check the results 1676072486dSGerrit Uitslag */ 1686072486dSGerrit Uitslag function test_savesequencedeleteexternalrevision() { 169ea466a98SMichael Hamann // add an additional delay when saving files to make sure 170ea466a98SMichael Hamann // nobody relies on the saving happening in the same second 171e1d9dcc8SAndreas Gohr /** @var $EVENT_HANDLER \dokuwiki\Extension\EventHandler */ 172ea466a98SMichael Hamann global $EVENT_HANDLER; 173ea466a98SMichael Hamann $EVENT_HANDLER->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, 'handle_write'); 174ea466a98SMichael Hamann 1756072486dSGerrit Uitslag $page = 'page2'; 1766072486dSGerrit Uitslag $file = wikiFN($page); 1776072486dSGerrit Uitslag 1786072486dSGerrit Uitslag // create the page 1796072486dSGerrit Uitslag $this->assertFileNotExists($file); 1806072486dSGerrit Uitslag saveWikiText($page, 'teststring', 'first save', false); 1816072486dSGerrit Uitslag $this->assertFileExists($file); 1826072486dSGerrit Uitslag $lastmod = filemtime($file); 1836072486dSGerrit Uitslag 1846072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 1856072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 186*7866d571SSatoshi Sahara $this->assertCount(1, $revisions); 1876072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 1886072486dSGerrit Uitslag $this->assertEquals('first save', $revinfo['sum']); 1896072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']); 1906072486dSGerrit Uitslag $this->assertEquals(10, $revinfo['sizechange']); 191ea466a98SMichael Hamann $this->assertFileExists(wikiFN($page, $revinfo['date'])); 1926072486dSGerrit Uitslag 193aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 1946072486dSGerrit Uitslag 1956072486dSGerrit Uitslag // delete 1966072486dSGerrit Uitslag saveWikiText($page, '', 'second save', false); 1976072486dSGerrit Uitslag clearstatcache(false, $file); 1986072486dSGerrit Uitslag $this->assertFileNotExists($file); 1996072486dSGerrit Uitslag 2006072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 2016072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 202*7866d571SSatoshi Sahara $this->assertCount(2, $revisions); 2036072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 2046072486dSGerrit Uitslag $this->assertEquals('second save', $revinfo['sum']); 2056072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_DELETE, $revinfo['type']); 2066072486dSGerrit Uitslag $this->assertEquals(-10, $revinfo['sizechange']); 207ea466a98SMichael Hamann $this->assertFileExists(wikiFN($page, $revinfo['date'])); 2086072486dSGerrit Uitslag 209aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 2106072486dSGerrit Uitslag 2116072486dSGerrit Uitslag // create external edit 2126072486dSGerrit Uitslag file_put_contents($file, 'teststring5'); 2136072486dSGerrit Uitslag 214aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 2156072486dSGerrit Uitslag 2166072486dSGerrit Uitslag // save on top of external edit 2176072486dSGerrit Uitslag saveWikiText($page, 'teststring6', 'third save', false); 2186072486dSGerrit Uitslag clearstatcache(false, $file); 2196072486dSGerrit Uitslag 2206072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 2216072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 222*7866d571SSatoshi Sahara $this->assertCount(4, $revisions); // two more revisions now! 2236072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 2246072486dSGerrit Uitslag $this->assertEquals('third save', $revinfo['sum']); 2256072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 2266072486dSGerrit Uitslag $this->assertEquals(0, $revinfo['sizechange']); 227ea466a98SMichael Hamann $this->assertFileExists(wikiFN($page, $revinfo['date'])); 2286072486dSGerrit Uitslag 2296072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[1]); 230*7866d571SSatoshi Sahara $this->assertEquals('created - external edit', $revinfo['sum']); 231*7866d571SSatoshi Sahara $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']); 2326072486dSGerrit Uitslag $this->assertEquals(11, $revinfo['sizechange']); 233ea466a98SMichael Hamann $this->assertFileExists(wikiFN($page, $revinfo['date'])); 2346072486dSGerrit Uitslag 2356072486dSGerrit Uitslag } 2366072486dSGerrit Uitslag 2376072486dSGerrit Uitslag /** 2386072486dSGerrit Uitslag * Execute a whole bunch of saves on the same page and check the results 2396072486dSGerrit Uitslag */ 2406072486dSGerrit Uitslag function test_saveexternalasfirst() { 2416072486dSGerrit Uitslag $page = 'page3'; 2426072486dSGerrit Uitslag $file = wikiFN($page); 2436072486dSGerrit Uitslag 2446072486dSGerrit Uitslag // create the page 2456072486dSGerrit Uitslag $this->assertFileNotExists($file); 2466072486dSGerrit Uitslag 2476072486dSGerrit Uitslag // create external edit 2486072486dSGerrit Uitslag file_put_contents($file, 'teststring'); 2496072486dSGerrit Uitslag 250aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 2516072486dSGerrit Uitslag 2526072486dSGerrit Uitslag // save on top of external edit 2536072486dSGerrit Uitslag saveWikiText($page, 'teststring6', 'first save', false); 2546072486dSGerrit Uitslag clearstatcache(false, $file); 2556072486dSGerrit Uitslag 2566072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 2576072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 258*7866d571SSatoshi Sahara $this->assertCount(2, $revisions); // two more revisions now! 2596072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 2606072486dSGerrit Uitslag $this->assertEquals('first save', $revinfo['sum']); 2616072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 2626072486dSGerrit Uitslag $this->assertEquals(1, $revinfo['sizechange']); 2636072486dSGerrit Uitslag 2646072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[1]); 265*7866d571SSatoshi Sahara $this->assertEquals('created - external edit', $revinfo['sum']); 266*7866d571SSatoshi Sahara $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']); 2676072486dSGerrit Uitslag $this->assertEquals(10, $revinfo['sizechange']); 2686072486dSGerrit Uitslag 2696072486dSGerrit Uitslag } 2706072486dSGerrit Uitslag 2716072486dSGerrit Uitslag /** 2726072486dSGerrit Uitslag * Execute a whole bunch of saves on the same page and check the results 2736072486dSGerrit Uitslag */ 2746072486dSGerrit Uitslag function test_savesequenceexternaldeleteedit() { 2756072486dSGerrit Uitslag $page = 'page4'; 2766072486dSGerrit Uitslag $file = wikiFN($page); 2776072486dSGerrit Uitslag 2786072486dSGerrit Uitslag // create the page 2796072486dSGerrit Uitslag $this->assertFileNotExists($file); 2806072486dSGerrit Uitslag saveWikiText($page, 'teststring', 'first save', false); 2816072486dSGerrit Uitslag $this->assertFileExists($file); 2826072486dSGerrit Uitslag $lastmod = filemtime($file); 2836072486dSGerrit Uitslag 2846072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 2856072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 286*7866d571SSatoshi Sahara $this->assertCount(1, $revisions); 2876072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 2886072486dSGerrit Uitslag $this->assertEquals('first save', $revinfo['sum']); 2896072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']); 2906072486dSGerrit Uitslag $this->assertEquals(10, $revinfo['sizechange']); 2916072486dSGerrit Uitslag 292aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 2936072486dSGerrit Uitslag 2946072486dSGerrit Uitslag 2956072486dSGerrit Uitslag // create external delete 2966072486dSGerrit Uitslag unlink($file); 2976072486dSGerrit Uitslag clearstatcache(false, $file); 2986072486dSGerrit Uitslag 299aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 3006072486dSGerrit Uitslag 3016072486dSGerrit Uitslag // save on top of external delete. save is seen as creation 3026072486dSGerrit Uitslag saveWikiText($page, 'teststring6', 'second save', false); 3036072486dSGerrit Uitslag clearstatcache(false, $file); 3046072486dSGerrit Uitslag 3056072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3066072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 307*7866d571SSatoshi Sahara $this->assertCount(2, $revisions); // one more revisions now! 3086072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 3096072486dSGerrit Uitslag $this->assertEquals('second save', $revinfo['sum']); 3106072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']); 3116072486dSGerrit Uitslag $this->assertEquals(11, $revinfo['sizechange']); 3126072486dSGerrit Uitslag 3136072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[1]); 3146072486dSGerrit Uitslag $this->assertEquals('first save', $revinfo['sum']); 3156072486dSGerrit Uitslag 3166072486dSGerrit Uitslag } 3176072486dSGerrit Uitslag 3186072486dSGerrit Uitslag /** 3196072486dSGerrit Uitslag * Execute a whole bunch of saves on the same page and check the results 3206072486dSGerrit Uitslag */ 3216072486dSGerrit Uitslag function test_savesequencerevert() { 3226072486dSGerrit Uitslag global $REV; 3236072486dSGerrit Uitslag 3246072486dSGerrit Uitslag $page = 'page5'; 3256072486dSGerrit Uitslag $file = wikiFN($page); 3266072486dSGerrit Uitslag 3276072486dSGerrit Uitslag // create the page 3286072486dSGerrit Uitslag $this->assertFileNotExists($file); 3296072486dSGerrit Uitslag saveWikiText($page, 'teststring', 'first save', false); 3306072486dSGerrit Uitslag $this->assertFileExists($file); 3316072486dSGerrit Uitslag $lastmod = filemtime($file); 3326072486dSGerrit Uitslag 3336072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3346072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 335*7866d571SSatoshi Sahara $this->assertCount(1, $revisions); 3366072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 3376072486dSGerrit Uitslag $this->assertEquals('first save', $revinfo['sum']); 3386072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']); 3396072486dSGerrit Uitslag $this->assertEquals(10, $revinfo['sizechange']); 3406072486dSGerrit Uitslag 341aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 3426072486dSGerrit Uitslag 3436072486dSGerrit Uitslag // save with same content should be ignored 3446072486dSGerrit Uitslag saveWikiText($page, 'teststring', 'second save', false); 3456072486dSGerrit Uitslag clearstatcache(false, $file); 3466072486dSGerrit Uitslag $this->assertEquals($lastmod, filemtime($file)); 3476072486dSGerrit Uitslag 3486072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3496072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 3506072486dSGerrit Uitslag $this->assertEquals(1, count($revisions)); 3516072486dSGerrit Uitslag 3526072486dSGerrit Uitslag // update the page with new text 3536072486dSGerrit Uitslag saveWikiText($page, 'teststring2long', 'third save', false); 3546072486dSGerrit Uitslag clearstatcache(false, $file); 3556072486dSGerrit Uitslag $newmod = filemtime($file); 3566072486dSGerrit Uitslag $this->assertNotEquals($lastmod, $newmod); 3576072486dSGerrit Uitslag $lastmod = $newmod; 3586072486dSGerrit Uitslag $revertrev = $newmod; 3596072486dSGerrit Uitslag 3606072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3616072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 362*7866d571SSatoshi Sahara $this->assertCount(2, $revisions); 3636072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 3646072486dSGerrit Uitslag $this->assertEquals('third save', $revinfo['sum']); 3656072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 3666072486dSGerrit Uitslag $this->assertEquals(5, $revinfo['sizechange']); 3676072486dSGerrit Uitslag 368aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 3696072486dSGerrit Uitslag 3706072486dSGerrit Uitslag // add a minor edit (unauthenticated) 3716072486dSGerrit Uitslag saveWikiText($page, 'teststring3long', 'fourth save', true); 3726072486dSGerrit Uitslag clearstatcache(false, $file); 3736072486dSGerrit Uitslag $newmod = filemtime($file); 3746072486dSGerrit Uitslag $this->assertNotEquals($lastmod, $newmod); 3756072486dSGerrit Uitslag $lastmod = $newmod; 3766072486dSGerrit Uitslag 3776072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3786072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 379*7866d571SSatoshi Sahara $this->assertCount(3, $revisions); 3806072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 3816072486dSGerrit Uitslag $this->assertEquals('fourth save', $revinfo['sum']); 3826072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 3836072486dSGerrit Uitslag $this->assertEquals(0, $revinfo['sizechange']); 3846072486dSGerrit Uitslag 385aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 3866072486dSGerrit Uitslag 3876072486dSGerrit Uitslag // add a minor edit (authenticated) 3886072486dSGerrit Uitslag $_SERVER['REMOTE_USER'] = 'user'; 3896072486dSGerrit Uitslag saveWikiText($page, 'teststring4', 'fifth save', true); 3906072486dSGerrit Uitslag clearstatcache(false, $file); 3916072486dSGerrit Uitslag $newmod = filemtime($file); 3926072486dSGerrit Uitslag $this->assertNotEquals($lastmod, $newmod); 3936072486dSGerrit Uitslag $lastmod = $newmod; 3946072486dSGerrit Uitslag 3956072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3966072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 397*7866d571SSatoshi Sahara $this->assertCount(4, $revisions); 3986072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 3996072486dSGerrit Uitslag $this->assertEquals('fifth save', $revinfo['sum']); 4006072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_MINOR_EDIT, $revinfo['type']); 4016072486dSGerrit Uitslag $this->assertEquals(-4, $revinfo['sizechange']); 4026072486dSGerrit Uitslag 403aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 4046072486dSGerrit Uitslag 4056072486dSGerrit Uitslag // restore 4066072486dSGerrit Uitslag $REV = $revertrev; 4076072486dSGerrit Uitslag saveWikiText($page, 'teststring2long', 'sixth save', true); 4086072486dSGerrit Uitslag clearstatcache(false, $file); 4096072486dSGerrit Uitslag $this->assertFileExists($file); 4106072486dSGerrit Uitslag $newmod = filemtime($file); 4116072486dSGerrit Uitslag $this->assertNotEquals($lastmod, $newmod); 4126072486dSGerrit Uitslag 4136072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 4146072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 415*7866d571SSatoshi Sahara $this->assertCount(5, $revisions); 4166072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 4176072486dSGerrit Uitslag $this->assertEquals('sixth save', $revinfo['sum']); 4186072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_REVERT, $revinfo['type']); 4196072486dSGerrit Uitslag $this->assertEquals($REV, $revinfo['extra']); 4206072486dSGerrit Uitslag $this->assertEquals(4, $revinfo['sizechange']); 4216072486dSGerrit Uitslag $REV = ''; 4226072486dSGerrit Uitslag } 4236072486dSGerrit Uitslag 424023953f0SAndreas Gohr} 425