14eb5e174Slisps<?php 24eb5e174Slisps 30c3a5702SAndreas Gohruse dokuwiki\ChangeLog\MediaChangeLog; 40c3a5702SAndreas Gohruse dokuwiki\ChangeLog\PageChangeLog; 50c3a5702SAndreas Gohr 64eb5e174Slisps/** 74eb5e174Slisps * Tests for requesting revisioninfo of a revision of a page with getRevisionInfo() 84eb5e174Slisps * 94eb5e174Slisps * This class uses the files: 104eb5e174Slisps * - data/pages/mailinglist.txt 114eb5e174Slisps * - data/meta/mailinglist.changes 124eb5e174Slisps */ 1381e7bffeSlispsclass changelog_getlastrevisionat_test extends DokuWikiTest { 144eb5e174Slisps 154eb5e174Slisps private $pageid = 'mailinglist'; 164eb5e174Slisps 171c33cec3SAndreas Gohr function setup() : void { 184eb5e174Slisps parent::setup(); 194eb5e174Slisps global $cache_revinfo; 204eb5e174Slisps $cache =& $cache_revinfo; 214eb5e174Slisps unset($cache['nonexist']); 224eb5e174Slisps unset($cache['mailinglist']); 234eb5e174Slisps } 244eb5e174Slisps 254eb5e174Slisps 264eb5e174Slisps /** 274eb5e174Slisps * no nonexist.changes meta file available 284eb5e174Slisps */ 294eb5e174Slisps function test_changemetadatanotexists() { 304eb5e174Slisps $rev = 1362525899; 314eb5e174Slisps $id = 'nonexist'; 324eb5e174Slisps $revsexpected = false; 334eb5e174Slisps 344eb5e174Slisps $pagelog = new PageChangeLog($id, $chunk_size = 8192); 354eb5e174Slisps $revs = $pagelog->getLastRevisionAt($rev); 364eb5e174Slisps $this->assertEquals($revsexpected, $revs); 374eb5e174Slisps } 384eb5e174Slisps 394eb5e174Slisps /** 404eb5e174Slisps * start at exact current revision of mailinglist page 414eb5e174Slisps * 424eb5e174Slisps */ 434eb5e174Slisps function test_startatexactcurrentrev() { 444eb5e174Slisps $rev = 1385051947; 454eb5e174Slisps $revsexpected = ''; 464eb5e174Slisps 474eb5e174Slisps //set a known timestamp 484eb5e174Slisps touch(wikiFN($this->pageid), $rev); 494eb5e174Slisps 504eb5e174Slisps $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 514eb5e174Slisps $revs = $pagelog->getLastRevisionAt($rev); 524eb5e174Slisps $this->assertEquals($revsexpected, $revs); 534eb5e174Slisps 544eb5e174Slisps } 554eb5e174Slisps 564eb5e174Slisps /** 574eb5e174Slisps * test a future revision 584eb5e174Slisps * 594eb5e174Slisps */ 604eb5e174Slisps function test_futurerev() { 614eb5e174Slisps $rev = 1385051947; 624eb5e174Slisps $revsexpected = ''; 634eb5e174Slisps 644eb5e174Slisps //set a known timestamp 654eb5e174Slisps touch(wikiFN($this->pageid), $rev); 664eb5e174Slisps 674eb5e174Slisps $rev +=1; 684eb5e174Slisps 694eb5e174Slisps $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 704eb5e174Slisps $revs = $pagelog->getLastRevisionAt($rev); 714eb5e174Slisps $this->assertEquals($revsexpected, $revs); 724eb5e174Slisps 734eb5e174Slisps } 744eb5e174Slisps 754eb5e174Slisps /** 764eb5e174Slisps * start at exact last revision of mailinglist page 774eb5e174Slisps * 784eb5e174Slisps */ 794eb5e174Slisps function test_exactlastrev() { 804eb5e174Slisps $rev = 1360110636; 814eb5e174Slisps $revsexpected = 1360110636; 824eb5e174Slisps 834eb5e174Slisps $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 844eb5e174Slisps $revs = $pagelog->getLastRevisionAt($rev); 854eb5e174Slisps $this->assertEquals($revsexpected, $revs); 864eb5e174Slisps } 874eb5e174Slisps 884eb5e174Slisps 894eb5e174Slisps /** 904eb5e174Slisps * Request not existing revision 914eb5e174Slisps * 924eb5e174Slisps */ 934eb5e174Slisps function test_olderrev() { 944eb5e174Slisps $rev = 1; 954eb5e174Slisps $revexpected = false; 964eb5e174Slisps 974eb5e174Slisps $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 984eb5e174Slisps $revfound = $pagelog->getLastRevisionAt($rev); 994eb5e174Slisps $this->assertEquals($revexpected, $revfound); 1004eb5e174Slisps } 1014eb5e174Slisps 1024eb5e174Slisps /** 1034eb5e174Slisps * Start at non existing revision somewhere between existing revisions 1044eb5e174Slisps */ 1054eb5e174Slisps function test_notexistingrev() { 1064eb5e174Slisps $rev = 1362525890; 1074eb5e174Slisps $revexpected = 1362525359; 1084eb5e174Slisps 1094eb5e174Slisps $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192); 1104eb5e174Slisps $revfound = $pagelog->getLastRevisionAt($rev); 1114eb5e174Slisps $this->assertEquals($revexpected, $revfound); 1124eb5e174Slisps } 1134eb5e174Slisps 1144eb5e174Slisps /** 1154eb5e174Slisps * request nonexisting page 1164eb5e174Slisps * 1174eb5e174Slisps */ 1184eb5e174Slisps function test_notexistingpage() { 1194eb5e174Slisps $rev = 1385051947; 1204eb5e174Slisps $currentexpected = false; 1214eb5e174Slisps 1224eb5e174Slisps $pagelog = new PageChangeLog('nonexistingpage', $chunk_size = 8192); 1234eb5e174Slisps $current = $pagelog->getLastRevisionAt($rev); 1244eb5e174Slisps $this->assertEquals($currentexpected, $current); 1254eb5e174Slisps } 126aaaabdedSlisps 127aaaabdedSlisps /** 128aaaabdedSlisps * test get correct revision on deleted media 129aaaabdedSlisps * 130aaaabdedSlisps */ 131cad89f56Slisps function test_deletedimage() { 132cad89f56Slisps global $conf; 133cad89f56Slisps global $AUTH_ACL; 134cad89f56Slisps 135cad89f56Slisps //we need to have a user with AUTH_DELETE rights 136cad89f56Slisps //save settings 137cad89f56Slisps $oldSuperUser = $conf['superuser']; 138cad89f56Slisps $oldUseacl = $conf['useacl']; 139*056bf31fSDamien Regad $oldRemoteUser = isset($_SERVER['REMOTE_USER']) ? $_SERVER['REMOTE_USER'] : null; 140cad89f56Slisps 141cad89f56Slisps $conf['superuser'] = 'admin'; 142cad89f56Slisps $conf['useacl'] = 1; 143cad89f56Slisps $_SERVER['REMOTE_USER'] = 'admin'; 144cad89f56Slisps 145cad89f56Slisps $image = 'wiki:imageat.png'; 146cad89f56Slisps 147cad89f56Slisps $ret = copy(mediaFn('wiki:kind_zu_katze.png'),mediaFn($image)); 148cad89f56Slisps 149aaaabdedSlisps $revexpected = @filemtime(mediaFn($image)); 150aaaabdedSlisps $rev = $revexpected + 10; 151aaaabdedSlisps 1527f48c40eSMichael Hamann $this->waitForTick(true); 1537f48c40eSMichael Hamann 154cad89f56Slisps $ret = media_delete($image, 0); 155aaaabdedSlisps 1560c3a5702SAndreas Gohr $medialog = new MediaChangeLog($image); 157aaaabdedSlisps $current = $medialog->getLastRevisionAt($rev); 1587f48c40eSMichael Hamann // as we wait for a tick, we should get something greater than the timestamp 1597f48c40eSMichael Hamann $this->assertGreaterThan($revexpected, $current); 1607f48c40eSMichael Hamann // however, it should be less than the current time or equal to it 1617f48c40eSMichael Hamann $this->assertLessThanOrEqual(time(), $current); 162aaaabdedSlisps 163cad89f56Slisps //restore settings 164*056bf31fSDamien Regad if ($oldRemoteUser !== null) { 165cad89f56Slisps $_SERVER['REMOTE_USER'] = $oldRemoteUser; 166*056bf31fSDamien Regad } 167cad89f56Slisps $conf['superuser'] = $oldSuperUser; 168cad89f56Slisps $conf['useacl'] = $oldUseacl; 169aaaabdedSlisps } 1704eb5e174Slisps} 171