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 27 sleep(1); // wait for new revision ID 28 29 // save with same content should be ignored 30 saveWikiText($page, 'teststring', 'second save', false); 31 clearstatcache(false, $file); 32 $this->assertEquals($lastmod, filemtime($file)); 33 34 $pagelog = new PageChangeLog($page); 35 $revisions = $pagelog->getRevisions(-1, 200); 36 $this->assertEquals(1, count($revisions)); 37 38 // update the page with new text 39 saveWikiText($page, 'teststring2', 'third save', false); 40 clearstatcache(false, $file); 41 $newmod = filemtime($file); 42 $this->assertNotEquals($lastmod, $newmod); 43 $lastmod = $newmod; 44 45 $pagelog = new PageChangeLog($page); 46 $revisions = $pagelog->getRevisions(-1, 200); 47 $this->assertEquals(2, count($revisions)); 48 $revinfo = $pagelog->getRevisionInfo($revisions[0]); 49 $this->assertEquals('third save', $revinfo['sum']); 50 $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 51 52 sleep(1); // wait for new revision ID 53 54 // add a minor edit (unauthenticated) 55 saveWikiText($page, 'teststring3', 'fourth save', true); 56 clearstatcache(false, $file); 57 $newmod = filemtime($file); 58 $this->assertNotEquals($lastmod, $newmod); 59 $lastmod = $newmod; 60 61 $pagelog = new PageChangeLog($page); 62 $revisions = $pagelog->getRevisions(-1, 200); 63 $this->assertEquals(3, count($revisions)); 64 $revinfo = $pagelog->getRevisionInfo($revisions[0]); 65 $this->assertEquals('fourth save', $revinfo['sum']); 66 $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 67 68 sleep(1); // wait for new revision ID 69 70 // add a minor edit (authenticated) 71 $_SERVER['REMOTE_USER'] = 'user'; 72 saveWikiText($page, 'teststring4', 'fifth save', true); 73 clearstatcache(false, $file); 74 $newmod = filemtime($file); 75 $this->assertNotEquals($lastmod, $newmod); 76 $lastmod = $newmod; 77 78 $pagelog = new PageChangeLog($page); 79 $revisions = $pagelog->getRevisions(-1, 200); 80 $this->assertEquals(4, count($revisions)); 81 $revinfo = $pagelog->getRevisionInfo($revisions[0]); 82 $this->assertEquals('fifth save', $revinfo['sum']); 83 $this->assertEquals(DOKU_CHANGE_TYPE_MINOR_EDIT, $revinfo['type']); 84 85 sleep(1); // wait for new revision ID 86 87 // delete 88 saveWikiText($page, '', 'sixth save', false); 89 clearstatcache(false, $file); 90 $this->assertFileNotExists($file); 91 92 $pagelog = new PageChangeLog($page); 93 $revisions = $pagelog->getRevisions(-1, 200); 94 $this->assertEquals(5, count($revisions)); 95 $revinfo = $pagelog->getRevisionInfo($revisions[0]); 96 $this->assertEquals('sixth save', $revinfo['sum']); 97 $this->assertEquals(DOKU_CHANGE_TYPE_DELETE, $revinfo['type']); 98 99 sleep(1); // wait for new revision ID 100 101 // restore 102 $REV = $lastmod; 103 saveWikiText($page, 'teststring4', 'seventh save', true); 104 clearstatcache(false, $file); 105 $this->assertFileExists($file); 106 $newmod = filemtime($file); 107 $this->assertNotEquals($lastmod, $newmod); 108 $lastmod = $newmod; 109 110 $pagelog = new PageChangeLog($page); 111 $revisions = $pagelog->getRevisions(-1, 200); 112 $this->assertEquals(6, count($revisions)); 113 $revinfo = $pagelog->getRevisionInfo($revisions[0]); 114 $this->assertEquals('seventh save', $revinfo['sum']); 115 $this->assertEquals(DOKU_CHANGE_TYPE_REVERT, $revinfo['type']); 116 $this->assertEquals($REV, $revinfo['extra']); 117 $REV = ''; 118 119 sleep(1); // wait for new revision ID 120 121 // create external edit 122 file_put_contents($file, 'teststring5'); 123 124 sleep(1); // wait for new revision ID 125 126 // save on top of external edit 127 saveWikiText($page, 'teststring6', 'eigth save', false); 128 clearstatcache(false, $file); 129 $newmod = filemtime($file); 130 $this->assertNotEquals($lastmod, $newmod); 131 $lastmod = $newmod; 132 133 $pagelog = new PageChangeLog($page); 134 $revisions = $pagelog->getRevisions(-1, 200); 135 $this->assertEquals(8, count($revisions)); // two more revisions now! 136 $revinfo = $pagelog->getRevisionInfo($revisions[0]); 137 $this->assertEquals('eigth save', $revinfo['sum']); 138 $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 139 140 $revinfo = $pagelog->getRevisionInfo($revisions[1]); 141 $this->assertEquals('external edit', $revinfo['sum']); 142 $this->assertEquals(DOKU_CHANGE_TYPE_EDIT, $revinfo['type']); 143 144 } 145} 146