1023953f0SAndreas Gohr<?php 2023953f0SAndreas Gohr 3023953f0SAndreas Gohrclass common_saveWikiText_test extends DokuWikiTest { 4*ea466a98SMichael Hamann /** Delay writes of old revisions by a second. */ 5*ea466a98SMichael Hamann public function handle_write(Doku_Event $event, $param) { 6*ea466a98SMichael Hamann if ($event->data[3] !== false) { 7*ea466a98SMichael Hamann $this->waitForTick(); 8*ea466a98SMichael Hamann } 9*ea466a98SMichael Hamann } 10023953f0SAndreas Gohr 11023953f0SAndreas Gohr /** 12023953f0SAndreas Gohr * Execute a whole bunch of saves on the same page and check the results 13023953f0SAndreas Gohr */ 14023953f0SAndreas Gohr function test_savesequence() { 15023953f0SAndreas Gohr global $REV; 16023953f0SAndreas Gohr 17023953f0SAndreas Gohr $page = 'page'; 18023953f0SAndreas Gohr $file = wikiFN($page); 19023953f0SAndreas Gohr 20023953f0SAndreas Gohr // create the page 21023953f0SAndreas Gohr $this->assertFileNotExists($file); 22023953f0SAndreas Gohr saveWikiText($page, 'teststring', 'first save', false); 23023953f0SAndreas Gohr $this->assertFileExists($file); 24023953f0SAndreas Gohr $lastmod = filemtime($file); 25023953f0SAndreas Gohr 26023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 27023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 28023953f0SAndreas Gohr $this->assertEquals(1, count($revisions)); 29023953f0SAndreas Gohr $revinfo = $pagelog->getRevisionInfo($revisions[0]); 30023953f0SAndreas Gohr $this->assertEquals('first save', $revinfo['sum']); 31023953f0SAndreas Gohr $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']); 324b5aebc1SGerrit Uitslag $this->assertEquals(10, $revinfo['sizechange']); 33*ea466a98SMichael Hamann $this->assertFileExists(wikiFN($page, $revinfo['date'])); 34023953f0SAndreas Gohr 35aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 36023953f0SAndreas Gohr 37023953f0SAndreas Gohr // save with same content should be ignored 38023953f0SAndreas Gohr saveWikiText($page, 'teststring', 'second save', false); 39023953f0SAndreas Gohr clearstatcache(false, $file); 40023953f0SAndreas Gohr $this->assertEquals($lastmod, filemtime($file)); 41023953f0SAndreas Gohr 42023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 43023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 44023953f0SAndreas Gohr $this->assertEquals(1, count($revisions)); 45023953f0SAndreas Gohr 46023953f0SAndreas Gohr // update the page with new text 474b5aebc1SGerrit Uitslag saveWikiText($page, 'teststring2long', 'third save', false); 48023953f0SAndreas Gohr clearstatcache(false, $file); 49023953f0SAndreas Gohr $newmod = filemtime($file); 50023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 51023953f0SAndreas Gohr $lastmod = $newmod; 52023953f0SAndreas Gohr 53023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 54023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 55023953f0SAndreas Gohr $this->assertEquals(2, count($revisions)); 56023953f0SAndreas Gohr $revinfo = $pagelog->getRevisionInfo($revisions[0]); 57023953f0SAndreas Gohr $this->assertEquals('third save', $revinfo['sum']); 58023953f0SAndreas Gohr $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 594b5aebc1SGerrit Uitslag $this->assertEquals(5, $revinfo['sizechange']); 60023953f0SAndreas Gohr 61aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 62023953f0SAndreas Gohr 63023953f0SAndreas Gohr // add a minor edit (unauthenticated) 644b5aebc1SGerrit Uitslag saveWikiText($page, 'teststring3long', 'fourth save', true); 65023953f0SAndreas Gohr clearstatcache(false, $file); 66023953f0SAndreas Gohr $newmod = filemtime($file); 67023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 68023953f0SAndreas Gohr $lastmod = $newmod; 69023953f0SAndreas Gohr 70023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 71023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 72023953f0SAndreas Gohr $this->assertEquals(3, count($revisions)); 73023953f0SAndreas Gohr $revinfo = $pagelog->getRevisionInfo($revisions[0]); 74023953f0SAndreas Gohr $this->assertEquals('fourth save', $revinfo['sum']); 75023953f0SAndreas Gohr $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 764b5aebc1SGerrit Uitslag $this->assertEquals(0, $revinfo['sizechange']); 77023953f0SAndreas Gohr 78aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 79023953f0SAndreas Gohr 80023953f0SAndreas Gohr // add a minor edit (authenticated) 81023953f0SAndreas Gohr $_SERVER['REMOTE_USER'] = 'user'; 82023953f0SAndreas Gohr saveWikiText($page, 'teststring4', 'fifth save', true); 83023953f0SAndreas Gohr clearstatcache(false, $file); 84023953f0SAndreas Gohr $newmod = filemtime($file); 85023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 86023953f0SAndreas Gohr $lastmod = $newmod; 87023953f0SAndreas Gohr 88023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 89023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 90023953f0SAndreas Gohr $this->assertEquals(4, count($revisions)); 91023953f0SAndreas Gohr $revinfo = $pagelog->getRevisionInfo($revisions[0]); 92023953f0SAndreas Gohr $this->assertEquals('fifth save', $revinfo['sum']); 93023953f0SAndreas Gohr $this->assertEquals(DOKU_CHANGE_TYPE_MINOR_EDIT, $revinfo['type']); 944b5aebc1SGerrit Uitslag $this->assertEquals(-4, $revinfo['sizechange']); 95023953f0SAndreas Gohr 96aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 97023953f0SAndreas Gohr 98023953f0SAndreas Gohr // delete 99023953f0SAndreas Gohr saveWikiText($page, '', 'sixth save', false); 100023953f0SAndreas Gohr clearstatcache(false, $file); 101023953f0SAndreas Gohr $this->assertFileNotExists($file); 102023953f0SAndreas Gohr 103023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 104023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 105023953f0SAndreas Gohr $this->assertEquals(5, count($revisions)); 106023953f0SAndreas Gohr $revinfo = $pagelog->getRevisionInfo($revisions[0]); 107023953f0SAndreas Gohr $this->assertEquals('sixth save', $revinfo['sum']); 108023953f0SAndreas Gohr $this->assertEquals(DOKU_CHANGE_TYPE_DELETE, $revinfo['type']); 1094b5aebc1SGerrit Uitslag $this->assertEquals(-11, $revinfo['sizechange']); 110*ea466a98SMichael Hamann $this->assertFileExists(wikiFN($page, $revinfo['date'])); 111023953f0SAndreas Gohr 112aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 113023953f0SAndreas Gohr 114023953f0SAndreas Gohr // restore 115023953f0SAndreas Gohr $REV = $lastmod; 116023953f0SAndreas Gohr saveWikiText($page, 'teststring4', 'seventh save', true); 117023953f0SAndreas Gohr clearstatcache(false, $file); 118023953f0SAndreas Gohr $this->assertFileExists($file); 119023953f0SAndreas Gohr $newmod = filemtime($file); 120023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 121023953f0SAndreas Gohr $lastmod = $newmod; 122023953f0SAndreas Gohr 123023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 124023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 125023953f0SAndreas Gohr $this->assertEquals(6, count($revisions)); 126023953f0SAndreas Gohr $revinfo = $pagelog->getRevisionInfo($revisions[0]); 127023953f0SAndreas Gohr $this->assertEquals('seventh save', $revinfo['sum']); 128023953f0SAndreas Gohr $this->assertEquals(DOKU_CHANGE_TYPE_REVERT, $revinfo['type']); 129023953f0SAndreas Gohr $this->assertEquals($REV, $revinfo['extra']); 1304b5aebc1SGerrit Uitslag $this->assertEquals(11, $revinfo['sizechange']); 131*ea466a98SMichael Hamann $this->assertFileExists(wikiFN($page, $revinfo['date'])); 132023953f0SAndreas Gohr $REV = ''; 133023953f0SAndreas Gohr 134aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 135023953f0SAndreas Gohr 136023953f0SAndreas Gohr // create external edit 137023953f0SAndreas Gohr file_put_contents($file, 'teststring5'); 138023953f0SAndreas Gohr 139aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 140023953f0SAndreas Gohr 141023953f0SAndreas Gohr // save on top of external edit 142023953f0SAndreas Gohr saveWikiText($page, 'teststring6', 'eigth save', false); 143023953f0SAndreas Gohr clearstatcache(false, $file); 144023953f0SAndreas Gohr $newmod = filemtime($file); 145023953f0SAndreas Gohr $this->assertNotEquals($lastmod, $newmod); 146023953f0SAndreas Gohr $lastmod = $newmod; 147023953f0SAndreas Gohr 148023953f0SAndreas Gohr $pagelog = new PageChangeLog($page); 149023953f0SAndreas Gohr $revisions = $pagelog->getRevisions(-1, 200); 150023953f0SAndreas Gohr $this->assertEquals(8, count($revisions)); // two more revisions now! 151023953f0SAndreas Gohr $revinfo = $pagelog->getRevisionInfo($revisions[0]); 152023953f0SAndreas Gohr $this->assertEquals('eigth save', $revinfo['sum']); 153023953f0SAndreas Gohr $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 1544b5aebc1SGerrit Uitslag $this->assertEquals(0, $revinfo['sizechange']); 155023953f0SAndreas Gohr 156023953f0SAndreas Gohr $revinfo = $pagelog->getRevisionInfo($revisions[1]); 157023953f0SAndreas Gohr $this->assertEquals('external edit', $revinfo['sum']); 158023953f0SAndreas Gohr $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 1594b5aebc1SGerrit Uitslag $this->assertEquals(0, $revinfo['sizechange']); 160023953f0SAndreas Gohr 161023953f0SAndreas Gohr } 1626072486dSGerrit Uitslag 1636072486dSGerrit Uitslag /** 1646072486dSGerrit Uitslag * Execute a whole bunch of saves on the same page and check the results 1656072486dSGerrit Uitslag */ 1666072486dSGerrit Uitslag function test_savesequencedeleteexternalrevision() { 167*ea466a98SMichael Hamann // add an additional delay when saving files to make sure 168*ea466a98SMichael Hamann // nobody relies on the saving happening in the same second 169*ea466a98SMichael Hamann /** @var $EVENT_HANDLER Doku_Event_Handler */ 170*ea466a98SMichael Hamann global $EVENT_HANDLER; 171*ea466a98SMichael Hamann $EVENT_HANDLER->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, 'handle_write'); 172*ea466a98SMichael Hamann 1736072486dSGerrit Uitslag $page = 'page2'; 1746072486dSGerrit Uitslag $file = wikiFN($page); 1756072486dSGerrit Uitslag 1766072486dSGerrit Uitslag // create the page 1776072486dSGerrit Uitslag $this->assertFileNotExists($file); 1786072486dSGerrit Uitslag saveWikiText($page, 'teststring', 'first save', false); 1796072486dSGerrit Uitslag $this->assertFileExists($file); 1806072486dSGerrit Uitslag $lastmod = filemtime($file); 1816072486dSGerrit Uitslag 1826072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 1836072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 1846072486dSGerrit Uitslag $this->assertEquals(1, count($revisions)); 1856072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 1866072486dSGerrit Uitslag $this->assertEquals('first save', $revinfo['sum']); 1876072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']); 1886072486dSGerrit Uitslag $this->assertEquals(10, $revinfo['sizechange']); 189*ea466a98SMichael Hamann $this->assertFileExists(wikiFN($page, $revinfo['date'])); 1906072486dSGerrit Uitslag 191aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 1926072486dSGerrit Uitslag 1936072486dSGerrit Uitslag // delete 1946072486dSGerrit Uitslag saveWikiText($page, '', 'second save', false); 1956072486dSGerrit Uitslag clearstatcache(false, $file); 1966072486dSGerrit Uitslag $this->assertFileNotExists($file); 1976072486dSGerrit Uitslag 1986072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 1996072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 2006072486dSGerrit Uitslag $this->assertEquals(2, count($revisions)); 2016072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 2026072486dSGerrit Uitslag $this->assertEquals('second save', $revinfo['sum']); 2036072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_DELETE, $revinfo['type']); 2046072486dSGerrit Uitslag $this->assertEquals(-10, $revinfo['sizechange']); 205*ea466a98SMichael Hamann $this->assertFileExists(wikiFN($page, $revinfo['date'])); 2066072486dSGerrit Uitslag 207aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 2086072486dSGerrit Uitslag 2096072486dSGerrit Uitslag // create external edit 2106072486dSGerrit Uitslag file_put_contents($file, 'teststring5'); 2116072486dSGerrit Uitslag 212aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 2136072486dSGerrit Uitslag 2146072486dSGerrit Uitslag // save on top of external edit 2156072486dSGerrit Uitslag saveWikiText($page, 'teststring6', 'third save', false); 2166072486dSGerrit Uitslag clearstatcache(false, $file); 2176072486dSGerrit Uitslag 2186072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 2196072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 2206072486dSGerrit Uitslag $this->assertEquals(4, count($revisions)); // two more revisions now! 2216072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 2226072486dSGerrit Uitslag $this->assertEquals('third save', $revinfo['sum']); 2236072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 2246072486dSGerrit Uitslag $this->assertEquals(0, $revinfo['sizechange']); 225*ea466a98SMichael Hamann $this->assertFileExists(wikiFN($page, $revinfo['date'])); 2266072486dSGerrit Uitslag 2276072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[1]); 2286072486dSGerrit Uitslag $this->assertEquals('external edit', $revinfo['sum']); 2296072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 2306072486dSGerrit Uitslag $this->assertEquals(11, $revinfo['sizechange']); 231*ea466a98SMichael Hamann $this->assertFileExists(wikiFN($page, $revinfo['date'])); 2326072486dSGerrit Uitslag 2336072486dSGerrit Uitslag } 2346072486dSGerrit Uitslag 2356072486dSGerrit Uitslag /** 2366072486dSGerrit Uitslag * Execute a whole bunch of saves on the same page and check the results 2376072486dSGerrit Uitslag */ 2386072486dSGerrit Uitslag function test_saveexternalasfirst() { 2396072486dSGerrit Uitslag $page = 'page3'; 2406072486dSGerrit Uitslag $file = wikiFN($page); 2416072486dSGerrit Uitslag 2426072486dSGerrit Uitslag // create the page 2436072486dSGerrit Uitslag $this->assertFileNotExists($file); 2446072486dSGerrit Uitslag 2456072486dSGerrit Uitslag // create external edit 2466072486dSGerrit Uitslag file_put_contents($file, 'teststring'); 2476072486dSGerrit Uitslag 248aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 2496072486dSGerrit Uitslag 2506072486dSGerrit Uitslag // save on top of external edit 2516072486dSGerrit Uitslag saveWikiText($page, 'teststring6', 'first save', false); 2526072486dSGerrit Uitslag clearstatcache(false, $file); 2536072486dSGerrit Uitslag 2546072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 2556072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 2566072486dSGerrit Uitslag $this->assertEquals(2, count($revisions)); // two more revisions now! 2576072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 2586072486dSGerrit Uitslag $this->assertEquals('first save', $revinfo['sum']); 2596072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 2606072486dSGerrit Uitslag $this->assertEquals(1, $revinfo['sizechange']); 2616072486dSGerrit Uitslag 2626072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[1]); 2636072486dSGerrit Uitslag $this->assertEquals('external edit', $revinfo['sum']); 2646072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 2656072486dSGerrit Uitslag $this->assertEquals(10, $revinfo['sizechange']); 2666072486dSGerrit Uitslag 2676072486dSGerrit Uitslag } 2686072486dSGerrit Uitslag 2696072486dSGerrit Uitslag /** 2706072486dSGerrit Uitslag * Execute a whole bunch of saves on the same page and check the results 2716072486dSGerrit Uitslag */ 2726072486dSGerrit Uitslag function test_savesequenceexternaldeleteedit() { 2736072486dSGerrit Uitslag $page = 'page4'; 2746072486dSGerrit Uitslag $file = wikiFN($page); 2756072486dSGerrit Uitslag 2766072486dSGerrit Uitslag // create the page 2776072486dSGerrit Uitslag $this->assertFileNotExists($file); 2786072486dSGerrit Uitslag saveWikiText($page, 'teststring', 'first save', false); 2796072486dSGerrit Uitslag $this->assertFileExists($file); 2806072486dSGerrit Uitslag $lastmod = filemtime($file); 2816072486dSGerrit Uitslag 2826072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 2836072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 2846072486dSGerrit Uitslag $this->assertEquals(1, count($revisions)); 2856072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 2866072486dSGerrit Uitslag $this->assertEquals('first save', $revinfo['sum']); 2876072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']); 2886072486dSGerrit Uitslag $this->assertEquals(10, $revinfo['sizechange']); 2896072486dSGerrit Uitslag 290aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 2916072486dSGerrit Uitslag 2926072486dSGerrit Uitslag 2936072486dSGerrit Uitslag // create external delete 2946072486dSGerrit Uitslag unlink($file); 2956072486dSGerrit Uitslag clearstatcache(false, $file); 2966072486dSGerrit Uitslag 297aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 2986072486dSGerrit Uitslag 2996072486dSGerrit Uitslag // save on top of external delete. save is seen as creation 3006072486dSGerrit Uitslag saveWikiText($page, 'teststring6', 'second save', false); 3016072486dSGerrit Uitslag clearstatcache(false, $file); 3026072486dSGerrit Uitslag 3036072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3046072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 3056072486dSGerrit Uitslag $this->assertEquals(2, count($revisions)); // one more revisions now! 3066072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 3076072486dSGerrit Uitslag $this->assertEquals('second save', $revinfo['sum']); 3086072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']); 3096072486dSGerrit Uitslag $this->assertEquals(11, $revinfo['sizechange']); 3106072486dSGerrit Uitslag 3116072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[1]); 3126072486dSGerrit Uitslag $this->assertEquals('first save', $revinfo['sum']); 3136072486dSGerrit Uitslag 3146072486dSGerrit Uitslag } 3156072486dSGerrit Uitslag 3166072486dSGerrit Uitslag /** 3176072486dSGerrit Uitslag * Execute a whole bunch of saves on the same page and check the results 3186072486dSGerrit Uitslag */ 3196072486dSGerrit Uitslag function test_savesequencerevert() { 3206072486dSGerrit Uitslag global $REV; 3216072486dSGerrit Uitslag 3226072486dSGerrit Uitslag $page = 'page5'; 3236072486dSGerrit Uitslag $file = wikiFN($page); 3246072486dSGerrit Uitslag 3256072486dSGerrit Uitslag // create the page 3266072486dSGerrit Uitslag $this->assertFileNotExists($file); 3276072486dSGerrit Uitslag saveWikiText($page, 'teststring', 'first save', false); 3286072486dSGerrit Uitslag $this->assertFileExists($file); 3296072486dSGerrit Uitslag $lastmod = filemtime($file); 3306072486dSGerrit Uitslag 3316072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3326072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 3336072486dSGerrit Uitslag $this->assertEquals(1, count($revisions)); 3346072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 3356072486dSGerrit Uitslag $this->assertEquals('first save', $revinfo['sum']); 3366072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']); 3376072486dSGerrit Uitslag $this->assertEquals(10, $revinfo['sizechange']); 3386072486dSGerrit Uitslag 339aaf4f55eSAndreas Gohr $this->waitForTick(true); // wait for new revision ID 3406072486dSGerrit Uitslag 3416072486dSGerrit Uitslag // save with same content should be ignored 3426072486dSGerrit Uitslag saveWikiText($page, 'teststring', 'second save', false); 3436072486dSGerrit Uitslag clearstatcache(false, $file); 3446072486dSGerrit Uitslag $this->assertEquals($lastmod, filemtime($file)); 3456072486dSGerrit Uitslag 3466072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3476072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 3486072486dSGerrit Uitslag $this->assertEquals(1, count($revisions)); 3496072486dSGerrit Uitslag 3506072486dSGerrit Uitslag // update the page with new text 3516072486dSGerrit Uitslag saveWikiText($page, 'teststring2long', 'third save', false); 3526072486dSGerrit Uitslag clearstatcache(false, $file); 3536072486dSGerrit Uitslag $newmod = filemtime($file); 3546072486dSGerrit Uitslag $this->assertNotEquals($lastmod, $newmod); 3556072486dSGerrit Uitslag $lastmod = $newmod; 3566072486dSGerrit Uitslag $revertrev = $newmod; 3576072486dSGerrit Uitslag 3586072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3596072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 3606072486dSGerrit Uitslag $this->assertEquals(2, count($revisions)); 3616072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 3626072486dSGerrit Uitslag $this->assertEquals('third save', $revinfo['sum']); 3636072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 3646072486dSGerrit Uitslag $this->assertEquals(5, $revinfo['sizechange']); 3656072486dSGerrit Uitslag 366aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 3676072486dSGerrit Uitslag 3686072486dSGerrit Uitslag // add a minor edit (unauthenticated) 3696072486dSGerrit Uitslag saveWikiText($page, 'teststring3long', 'fourth save', true); 3706072486dSGerrit Uitslag clearstatcache(false, $file); 3716072486dSGerrit Uitslag $newmod = filemtime($file); 3726072486dSGerrit Uitslag $this->assertNotEquals($lastmod, $newmod); 3736072486dSGerrit Uitslag $lastmod = $newmod; 3746072486dSGerrit Uitslag 3756072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3766072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 3776072486dSGerrit Uitslag $this->assertEquals(3, count($revisions)); 3786072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 3796072486dSGerrit Uitslag $this->assertEquals('fourth save', $revinfo['sum']); 3806072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 3816072486dSGerrit Uitslag $this->assertEquals(0, $revinfo['sizechange']); 3826072486dSGerrit Uitslag 383aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 3846072486dSGerrit Uitslag 3856072486dSGerrit Uitslag // add a minor edit (authenticated) 3866072486dSGerrit Uitslag $_SERVER['REMOTE_USER'] = 'user'; 3876072486dSGerrit Uitslag saveWikiText($page, 'teststring4', 'fifth save', true); 3886072486dSGerrit Uitslag clearstatcache(false, $file); 3896072486dSGerrit Uitslag $newmod = filemtime($file); 3906072486dSGerrit Uitslag $this->assertNotEquals($lastmod, $newmod); 3916072486dSGerrit Uitslag $lastmod = $newmod; 3926072486dSGerrit Uitslag 3936072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 3946072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 3956072486dSGerrit Uitslag $this->assertEquals(4, count($revisions)); 3966072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 3976072486dSGerrit Uitslag $this->assertEquals('fifth save', $revinfo['sum']); 3986072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_MINOR_EDIT, $revinfo['type']); 3996072486dSGerrit Uitslag $this->assertEquals(-4, $revinfo['sizechange']); 4006072486dSGerrit Uitslag 401aaf4f55eSAndreas Gohr $this->waitForTick(); // wait for new revision ID 4026072486dSGerrit Uitslag 4036072486dSGerrit Uitslag // restore 4046072486dSGerrit Uitslag $REV = $revertrev; 4056072486dSGerrit Uitslag saveWikiText($page, 'teststring2long', 'sixth save', true); 4066072486dSGerrit Uitslag clearstatcache(false, $file); 4076072486dSGerrit Uitslag $this->assertFileExists($file); 4086072486dSGerrit Uitslag $newmod = filemtime($file); 4096072486dSGerrit Uitslag $this->assertNotEquals($lastmod, $newmod); 4106072486dSGerrit Uitslag 4116072486dSGerrit Uitslag $pagelog = new PageChangeLog($page); 4126072486dSGerrit Uitslag $revisions = $pagelog->getRevisions(-1, 200); 4136072486dSGerrit Uitslag $this->assertEquals(5, count($revisions)); 4146072486dSGerrit Uitslag $revinfo = $pagelog->getRevisionInfo($revisions[0]); 4156072486dSGerrit Uitslag $this->assertEquals('sixth save', $revinfo['sum']); 4166072486dSGerrit Uitslag $this->assertEquals(DOKU_CHANGE_TYPE_REVERT, $revinfo['type']); 4176072486dSGerrit Uitslag $this->assertEquals($REV, $revinfo['extra']); 4186072486dSGerrit Uitslag $this->assertEquals(4, $revinfo['sizechange']); 4196072486dSGerrit Uitslag $REV = ''; 4206072486dSGerrit Uitslag } 4216072486dSGerrit Uitslag 422023953f0SAndreas Gohr} 423