xref: /dokuwiki/_test/tests/inc/changelog_getlastrevisionat.test.php (revision fb285245a7e0188369a3e6cc179ed20795bd3799)
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