1<?php 2/** 3 * Tests for requesting revisions of a page with getRevisions() 4 * 5 * This class uses the files: 6 * - data/pages/mailinglist.txt 7 * - data/meta/mailinglist.changes 8 */ 9class changelog_getrevisionsaround_test extends DokuWikiTest { 10 11 /** 12 * list of revisions in mailinglist.changes 13 */ 14 private $revsexpected = array( 15 1374261194, //current page 16 1371579614, 1368622240, 17 1368622195, 1368622152, 18 1368612599, 1368612506, 19 1368609772, 1368575634, 20 1363436892, 1362527164, 21 1362527046, 1362526861, 22 1362526767, 1362526167, 23 1362526119, 1362526039, 24 1362525926, 1362525899, 25 1362525359, 1362525145, 26 1362524799, 1361901536, 27 1360110636 28 ); 29 private $pageid = 'mailinglist'; 30 31 function setup() { 32 parent::setup(); 33 global $cache_revinfo; 34 $cache =& $cache_revinfo; 35 if(isset($cache['nonexist'])) { 36 unset($cache['nonexist']); 37 } 38 if(isset($cache['mailinglist'])) { 39 unset($cache['mailinglist']); 40 } 41 } 42 43 /** 44 * no nonexist.changes meta file available 45 */ 46 function test_changemetadatanotexists() { 47 $rev1 = 1362526767; 48 $rev2 = 1362527164; 49 $max = 50; 50 $id = 'nonexist'; 51 $revsexpected = array(array(), array()); 52 53 $pagelog = new PageChangeLog($id, $chunk_size = 8192); 54 $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max); 55 $this->assertEquals($revsexpected, $revs); 56 } 57 58 /** 59 * Surrounding revisions of rev1 and rev2 overlaps 60 */ 61 function test_request_overlapping() { 62 $rev1 = 1362526767; 63 $rev2 = 1362527164; 64 $max = 10; 65 $revsexpected = array( 66 array_slice($this->revsexpected, 8, 11), 67 array_slice($this->revsexpected, 5, 11) 68 ); 69 70 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 71 $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max); 72 $this->assertEquals($revsexpected, $revs); 73 74 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512); 75 $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max); 76 $this->assertEquals($revsexpected, $revs); 77 78 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 20); 79 $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max); 80 $this->assertEquals($revsexpected, $revs); 81 } 82 83 /** 84 * Surrounding revisions of rev1 and rev2 don't overlap. 85 */ 86 function test_request_non_overlapping() { 87 $rev1 = 1362525899; 88 $rev2 = 1368612599; 89 $max = 10; 90 $revsexpected = array( 91 array_slice($this->revsexpected, 13, 11), 92 array_slice($this->revsexpected, 0, 11) 93 ); 94 95 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 96 $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max); 97 $this->assertEquals($revsexpected, $revs); 98 99 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512); 100 $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max); 101 $this->assertEquals($revsexpected, $revs); 102 103 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 20); 104 $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max); 105 $this->assertEquals($revsexpected, $revs); 106 } 107 108 /** 109 * rev1 and rev2 are at start and end of the changelog. 110 * Should return still a number of revisions equal to max 111 */ 112 function test_request_first_last() { 113 $rev1 = 1360110636; 114 $rev2 = 1374261194; 115 $max = 10; 116 $revsexpected = array( 117 array_slice($this->revsexpected, 13, 11), 118 array_slice($this->revsexpected, 0, 11) 119 ); 120 121 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 122 $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max); 123 $this->assertEquals($revsexpected, $revs); 124 125 //todo: number of revisions on the left side is not (yet) completed until max number 126 $revsexpected = array( 127 array_slice($this->revsexpected, 18, 6), 128 array_slice($this->revsexpected, 0, 11) 129 ); 130 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512); 131 $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max); 132 $this->assertEquals($revsexpected, $revs); 133 134 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 20); 135 $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max); 136 $this->assertEquals($revsexpected, $revs); 137 } 138 139 140 /** 141 * Number of requested revisions is larger than available revisions, 142 * so returns whole log 143 */ 144 function test_request_wholelog() { 145 $rev1 = 1362525899; 146 $rev2 = 1368612599; 147 $max = 50; 148 $revsexpected = array($this->revsexpected, $this->revsexpected); 149 150 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 151 $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max); 152 $this->assertEquals($revsexpected, $revs); 153 154 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512); 155 $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max); 156 $this->assertEquals($revsexpected, $revs); 157 158 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 20); 159 $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max); 160 $this->assertEquals($revsexpected, $revs); 161 } 162 163 /** 164 * When rev1 > rev2, their order is changed 165 */ 166 function test_request_wrong_order_revs() { 167 $rev1 = 1362527164; 168 $rev2 = 1362526767; 169 $max = 10; 170 $revsexpected = array( 171 array_slice($this->revsexpected, 8, 11), 172 array_slice($this->revsexpected, 5, 11) 173 ); 174 175 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 176 $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max); 177 $this->assertEquals($revsexpected, $revs); 178 179 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 512); 180 $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max); 181 $this->assertEquals($revsexpected, $revs); 182 183 $pagelog = new PageChangeLog($this->pageid, $chunk_size = 20); 184 $revs = $pagelog->getRevisionsAround($rev1, $rev2, $max); 185 $this->assertEquals($revsexpected, $revs); 186 } 187 188}