1<?php 2 3class common_saveWikiText_test extends DokuWikiTest { 4 5 /** 6 * Execute a whole bunch of saves on the same page and check the results 7 */ 8 function test_savesequence() { 9 global $REV; 10 11 $page = 'page'; 12 $file = wikiFN($page); 13 14 // create the page 15 $this->assertFileNotExists($file); 16 saveWikiText($page, 'teststring', 'first save', false); 17 $this->assertFileExists($file); 18 $lastmod = filemtime($file); 19 20 $pagelog = new PageChangeLog($page); 21 $revisions = $pagelog->getRevisions(-1, 200); 22 $this->assertEquals(1, count($revisions)); 23 $revinfo = $pagelog->getRevisionInfo($revisions[0]); 24 $this->assertEquals('first save', $revinfo['sum']); 25 $this->assertEquals(DOKU_CHANGE_TYPE_CREATE, $revinfo['type']); 26 $this->assertEquals(10, $revinfo['sizechange']); 27 28 sleep(1); // wait for new revision ID 29 30 // save with same content should be ignored 31 saveWikiText($page, 'teststring', 'second save', false); 32 clearstatcache(false, $file); 33 $this->assertEquals($lastmod, filemtime($file)); 34 35 $pagelog = new PageChangeLog($page); 36 $revisions = $pagelog->getRevisions(-1, 200); 37 $this->assertEquals(1, count($revisions)); 38 39 // update the page with new text 40 saveWikiText($page, 'teststring2long', 'third save', false); 41 clearstatcache(false, $file); 42 $newmod = filemtime($file); 43 $this->assertNotEquals($lastmod, $newmod); 44 $lastmod = $newmod; 45 46 $pagelog = new PageChangeLog($page); 47 $revisions = $pagelog->getRevisions(-1, 200); 48 $this->assertEquals(2, count($revisions)); 49 $revinfo = $pagelog->getRevisionInfo($revisions[0]); 50 $this->assertEquals('third save', $revinfo['sum']); 51 $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 52 $this->assertEquals(5, $revinfo['sizechange']); 53 54 sleep(1); // wait for new revision ID 55 56 // add a minor edit (unauthenticated) 57 saveWikiText($page, 'teststring3long', 'fourth save', true); 58 clearstatcache(false, $file); 59 $newmod = filemtime($file); 60 $this->assertNotEquals($lastmod, $newmod); 61 $lastmod = $newmod; 62 63 $pagelog = new PageChangeLog($page); 64 $revisions = $pagelog->getRevisions(-1, 200); 65 $this->assertEquals(3, count($revisions)); 66 $revinfo = $pagelog->getRevisionInfo($revisions[0]); 67 $this->assertEquals('fourth save', $revinfo['sum']); 68 $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 69 $this->assertEquals(0, $revinfo['sizechange']); 70 71 sleep(1); // wait for new revision ID 72 73 // add a minor edit (authenticated) 74 $_SERVER['REMOTE_USER'] = 'user'; 75 saveWikiText($page, 'teststring4', 'fifth save', true); 76 clearstatcache(false, $file); 77 $newmod = filemtime($file); 78 $this->assertNotEquals($lastmod, $newmod); 79 $lastmod = $newmod; 80 81 $pagelog = new PageChangeLog($page); 82 $revisions = $pagelog->getRevisions(-1, 200); 83 $this->assertEquals(4, count($revisions)); 84 $revinfo = $pagelog->getRevisionInfo($revisions[0]); 85 $this->assertEquals('fifth save', $revinfo['sum']); 86 $this->assertEquals(DOKU_CHANGE_TYPE_MINOR_EDIT, $revinfo['type']); 87 $this->assertEquals(-4, $revinfo['sizechange']); 88 89 sleep(1); // wait for new revision ID 90 91 // delete 92 saveWikiText($page, '', 'sixth save', false); 93 clearstatcache(false, $file); 94 $this->assertFileNotExists($file); 95 96 $pagelog = new PageChangeLog($page); 97 $revisions = $pagelog->getRevisions(-1, 200); 98 $this->assertEquals(5, count($revisions)); 99 $revinfo = $pagelog->getRevisionInfo($revisions[0]); 100 $this->assertEquals('sixth save', $revinfo['sum']); 101 $this->assertEquals(DOKU_CHANGE_TYPE_DELETE, $revinfo['type']); 102 $this->assertEquals(-11, $revinfo['sizechange']); 103 104 sleep(1); // wait for new revision ID 105 106 // restore 107 $REV = $lastmod; 108 saveWikiText($page, 'teststring4', 'seventh save', true); 109 clearstatcache(false, $file); 110 $this->assertFileExists($file); 111 $newmod = filemtime($file); 112 $this->assertNotEquals($lastmod, $newmod); 113 $lastmod = $newmod; 114 115 $pagelog = new PageChangeLog($page); 116 $revisions = $pagelog->getRevisions(-1, 200); 117 $this->assertEquals(6, count($revisions)); 118 $revinfo = $pagelog->getRevisionInfo($revisions[0]); 119 $this->assertEquals('seventh save', $revinfo['sum']); 120 $this->assertEquals(DOKU_CHANGE_TYPE_REVERT, $revinfo['type']); 121 $this->assertEquals($REV, $revinfo['extra']); 122 $this->assertEquals(11, $revinfo['sizechange']); 123 $REV = ''; 124 125 sleep(1); // wait for new revision ID 126 127 // create external edit 128 file_put_contents($file, 'teststring5'); 129 130 sleep(1); // wait for new revision ID 131 132 // save on top of external edit 133 saveWikiText($page, 'teststring6', 'eigth save', false); 134 clearstatcache(false, $file); 135 $newmod = filemtime($file); 136 $this->assertNotEquals($lastmod, $newmod); 137 $lastmod = $newmod; 138 139 $pagelog = new PageChangeLog($page); 140 $revisions = $pagelog->getRevisions(-1, 200); 141 $this->assertEquals(8, count($revisions)); // two more revisions now! 142 $revinfo = $pagelog->getRevisionInfo($revisions[0]); 143 $this->assertEquals('eigth save', $revinfo['sum']); 144 $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 145 $this->assertEquals(0, $revinfo['sizechange']); 146 147 $revinfo = $pagelog->getRevisionInfo($revisions[1]); 148 $this->assertEquals('external edit', $revinfo['sum']); 149 $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 150 $this->assertEquals(0, $revinfo['sizechange']); 151 152 } 153} 154