xref: /dokuwiki/_test/tests/inc/changelog_getlastrevisionat.test.php (revision 1c33cec37215d0c964cf961bdbc49ae7db3657e6)
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
17*1c33cec3SAndreas Gohr    function setup() : void {
184eb5e174Slisps        parent::setup();
194eb5e174Slisps        global $cache_revinfo;
204eb5e174Slisps        $cache =& $cache_revinfo;
214eb5e174Slisps        if(isset($cache['nonexist'])) {
224eb5e174Slisps            unset($cache['nonexist']);
234eb5e174Slisps        }
244eb5e174Slisps        if(isset($cache['mailinglist'])) {
254eb5e174Slisps            unset($cache['mailinglist']);
264eb5e174Slisps        }
274eb5e174Slisps    }
284eb5e174Slisps
294eb5e174Slisps
304eb5e174Slisps    /**
314eb5e174Slisps     * no nonexist.changes meta file available
324eb5e174Slisps     */
334eb5e174Slisps    function test_changemetadatanotexists() {
344eb5e174Slisps        $rev = 1362525899;
354eb5e174Slisps        $id = 'nonexist';
364eb5e174Slisps        $revsexpected = false;
374eb5e174Slisps
384eb5e174Slisps        $pagelog = new PageChangeLog($id, $chunk_size = 8192);
394eb5e174Slisps        $revs = $pagelog->getLastRevisionAt($rev);
404eb5e174Slisps        $this->assertEquals($revsexpected, $revs);
414eb5e174Slisps    }
424eb5e174Slisps
434eb5e174Slisps    /**
444eb5e174Slisps     * start at exact current revision of mailinglist page
454eb5e174Slisps     *
464eb5e174Slisps     */
474eb5e174Slisps    function test_startatexactcurrentrev() {
484eb5e174Slisps        $rev = 1385051947;
494eb5e174Slisps        $revsexpected = '';
504eb5e174Slisps
514eb5e174Slisps        //set a known timestamp
524eb5e174Slisps        touch(wikiFN($this->pageid), $rev);
534eb5e174Slisps
544eb5e174Slisps        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
554eb5e174Slisps        $revs = $pagelog->getLastRevisionAt($rev);
564eb5e174Slisps        $this->assertEquals($revsexpected, $revs);
574eb5e174Slisps
584eb5e174Slisps    }
594eb5e174Slisps
604eb5e174Slisps    /**
614eb5e174Slisps     * test a future revision
624eb5e174Slisps     *
634eb5e174Slisps     */
644eb5e174Slisps    function test_futurerev() {
654eb5e174Slisps        $rev = 1385051947;
664eb5e174Slisps        $revsexpected = '';
674eb5e174Slisps
684eb5e174Slisps        //set a known timestamp
694eb5e174Slisps        touch(wikiFN($this->pageid), $rev);
704eb5e174Slisps
714eb5e174Slisps        $rev +=1;
724eb5e174Slisps
734eb5e174Slisps        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
744eb5e174Slisps        $revs = $pagelog->getLastRevisionAt($rev);
754eb5e174Slisps        $this->assertEquals($revsexpected, $revs);
764eb5e174Slisps
774eb5e174Slisps    }
784eb5e174Slisps
794eb5e174Slisps    /**
804eb5e174Slisps     * start at exact last revision of mailinglist page
814eb5e174Slisps     *
824eb5e174Slisps     */
834eb5e174Slisps    function test_exactlastrev() {
844eb5e174Slisps        $rev = 1360110636;
854eb5e174Slisps        $revsexpected = 1360110636;
864eb5e174Slisps
874eb5e174Slisps        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
884eb5e174Slisps        $revs = $pagelog->getLastRevisionAt($rev);
894eb5e174Slisps        $this->assertEquals($revsexpected, $revs);
904eb5e174Slisps    }
914eb5e174Slisps
924eb5e174Slisps
934eb5e174Slisps    /**
944eb5e174Slisps     * Request not existing revision
954eb5e174Slisps     *
964eb5e174Slisps     */
974eb5e174Slisps    function test_olderrev() {
984eb5e174Slisps        $rev = 1;
994eb5e174Slisps        $revexpected = false;
1004eb5e174Slisps
1014eb5e174Slisps        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
1024eb5e174Slisps        $revfound = $pagelog->getLastRevisionAt($rev);
1034eb5e174Slisps        $this->assertEquals($revexpected, $revfound);
1044eb5e174Slisps    }
1054eb5e174Slisps
1064eb5e174Slisps    /**
1074eb5e174Slisps     * Start at non existing revision somewhere between existing revisions
1084eb5e174Slisps     */
1094eb5e174Slisps    function test_notexistingrev() {
1104eb5e174Slisps        $rev = 1362525890;
1114eb5e174Slisps        $revexpected = 1362525359;
1124eb5e174Slisps
1134eb5e174Slisps        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
1144eb5e174Slisps        $revfound = $pagelog->getLastRevisionAt($rev);
1154eb5e174Slisps        $this->assertEquals($revexpected, $revfound);
1164eb5e174Slisps    }
1174eb5e174Slisps
1184eb5e174Slisps    /**
1194eb5e174Slisps     * request nonexisting page
1204eb5e174Slisps     *
1214eb5e174Slisps     */
1224eb5e174Slisps    function test_notexistingpage() {
1234eb5e174Slisps        $rev = 1385051947;
1244eb5e174Slisps        $currentexpected = false;
1254eb5e174Slisps
1264eb5e174Slisps        $pagelog = new PageChangeLog('nonexistingpage', $chunk_size = 8192);
1274eb5e174Slisps        $current = $pagelog->getLastRevisionAt($rev);
1284eb5e174Slisps        $this->assertEquals($currentexpected, $current);
1294eb5e174Slisps    }
130aaaabdedSlisps
131aaaabdedSlisps    /**
132aaaabdedSlisps     * test get correct revision on deleted media
133aaaabdedSlisps     *
134aaaabdedSlisps     */
135cad89f56Slisps    function test_deletedimage() {
136cad89f56Slisps        global $conf;
137cad89f56Slisps        global $AUTH_ACL;
138cad89f56Slisps
139cad89f56Slisps        //we need to have a user with AUTH_DELETE rights
140cad89f56Slisps        //save settings
141cad89f56Slisps        $oldSuperUser = $conf['superuser'];
142cad89f56Slisps        $oldUseacl = $conf['useacl'];
143cad89f56Slisps        $oldRemoteUser = $_SERVER['REMOTE_USER'];
144cad89f56Slisps
145cad89f56Slisps        $conf['superuser'] = 'admin';
146cad89f56Slisps        $conf['useacl']    = 1;
147cad89f56Slisps        $_SERVER['REMOTE_USER'] = 'admin';
148cad89f56Slisps
149cad89f56Slisps        $image = 'wiki:imageat.png';
150cad89f56Slisps
151cad89f56Slisps        $ret = copy(mediaFn('wiki:kind_zu_katze.png'),mediaFn($image));
152cad89f56Slisps
153aaaabdedSlisps        $revexpected = @filemtime(mediaFn($image));
154aaaabdedSlisps        $rev = $revexpected + 10;
155aaaabdedSlisps
1567f48c40eSMichael Hamann        $this->waitForTick(true);
1577f48c40eSMichael Hamann
158cad89f56Slisps        $ret = media_delete($image, 0);
159aaaabdedSlisps
1600c3a5702SAndreas Gohr        $medialog = new MediaChangeLog($image);
161aaaabdedSlisps        $current = $medialog->getLastRevisionAt($rev);
1627f48c40eSMichael Hamann        // as we wait for a tick, we should get something greater than the timestamp
1637f48c40eSMichael Hamann        $this->assertGreaterThan($revexpected, $current);
1647f48c40eSMichael Hamann        // however, it should be less than the current time or equal to it
1657f48c40eSMichael Hamann        $this->assertLessThanOrEqual(time(), $current);
166aaaabdedSlisps
167cad89f56Slisps        //restore settings
168cad89f56Slisps        $_SERVER['REMOTE_USER'] = $oldRemoteUser;
169cad89f56Slisps        $conf['superuser'] = $oldSuperUser;
170cad89f56Slisps        $conf['useacl'] = $oldUseacl;
171aaaabdedSlisps    }
1724eb5e174Slisps}
173