xref: /dokuwiki/_test/tests/inc/changelog_getlastrevisionat.test.php (revision 8e99834d58c35fb5070c4283e8a1ed0c5ced7e05)
1<?php
2
3/**
4 * Tests for requesting revisioninfo of a revision of a page with getRevisionInfo()
5 *
6 * This class uses the files:
7 * - data/pages/mailinglist.txt
8 * - data/meta/mailinglist.changes
9 */
10class changelog_getlastrevisionat_test extends DokuWikiTest {
11
12    private $pageid = 'mailinglist';
13
14    function setup() {
15        parent::setup();
16        global $cache_revinfo;
17        $cache =& $cache_revinfo;
18        if(isset($cache['nonexist'])) {
19            unset($cache['nonexist']);
20        }
21        if(isset($cache['mailinglist'])) {
22            unset($cache['mailinglist']);
23        }
24    }
25
26
27    /**
28     * no nonexist.changes meta file available
29     */
30    function test_changemetadatanotexists() {
31        $rev = 1362525899;
32        $id = 'nonexist';
33        $revsexpected = false;
34
35        $pagelog = new PageChangeLog($id, $chunk_size = 8192);
36        $revs = $pagelog->getLastRevisionAt($rev);
37        $this->assertEquals($revsexpected, $revs);
38    }
39
40    /**
41     * start at exact current revision of mailinglist page
42     *
43     */
44    function test_startatexactcurrentrev() {
45        $rev = 1385051947;
46        $revsexpected = '';
47
48        //set a known timestamp
49        touch(wikiFN($this->pageid), $rev);
50
51        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
52        $revs = $pagelog->getLastRevisionAt($rev);
53        $this->assertEquals($revsexpected, $revs);
54
55    }
56
57    /**
58     * test a future revision
59     *
60     */
61    function test_futurerev() {
62        $rev = 1385051947;
63        $revsexpected = '';
64
65        //set a known timestamp
66        touch(wikiFN($this->pageid), $rev);
67
68        $rev +=1;
69
70        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
71        $revs = $pagelog->getLastRevisionAt($rev);
72        $this->assertEquals($revsexpected, $revs);
73
74    }
75
76    /**
77     * start at exact last revision of mailinglist page
78     *
79     */
80    function test_exactlastrev() {
81        $rev = 1360110636;
82        $revsexpected = 1360110636;
83
84        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
85        $revs = $pagelog->getLastRevisionAt($rev);
86        $this->assertEquals($revsexpected, $revs);
87    }
88
89
90    /**
91     * Request not existing revision
92     *
93     */
94    function test_olderrev() {
95        $rev = 1;
96        $revexpected = false;
97
98        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
99        $revfound = $pagelog->getLastRevisionAt($rev);
100        $this->assertEquals($revexpected, $revfound);
101    }
102
103    /**
104     * Start at non existing revision somewhere between existing revisions
105     */
106    function test_notexistingrev() {
107        $rev = 1362525890;
108        $revexpected = 1362525359;
109
110        $pagelog = new PageChangeLog($this->pageid, $chunk_size = 8192);
111        $revfound = $pagelog->getLastRevisionAt($rev);
112        $this->assertEquals($revexpected, $revfound);
113    }
114
115    /**
116     * request nonexisting page
117     *
118     */
119    function test_notexistingpage() {
120        $rev = 1385051947;
121        $currentexpected = false;
122
123        $pagelog = new PageChangeLog('nonexistingpage', $chunk_size = 8192);
124        $current = $pagelog->getLastRevisionAt($rev);
125        $this->assertEquals($currentexpected, $current);
126    }
127
128    /**
129     * test get correct revision on deleted media
130     *
131     */
132    function test_deletedimage() {
133        global $conf;
134        global $AUTH_ACL;
135
136        //we need to have a user with AUTH_DELETE rights
137        //save settings
138        $oldSuperUser = $conf['superuser'];
139        $oldUseacl = $conf['useacl'];
140        $oldRemoteUser = $_SERVER['REMOTE_USER'];
141
142        $conf['superuser'] = 'admin';
143        $conf['useacl']    = 1;
144        $_SERVER['REMOTE_USER'] = 'admin';
145
146        $image = 'wiki:imageat.png';
147
148        $ret = copy(mediaFn('wiki:kind_zu_katze.png'),mediaFn($image));
149
150        $revexpected = @filemtime(mediaFn($image));
151        $rev = $revexpected + 10;
152
153        $this->waitForTick(true);
154
155        $ret = media_delete($image, 0);
156
157        $medialog = new MediaChangelog($image);
158        $current = $medialog->getLastRevisionAt($rev);
159        // as we wait for a tick, we should get something greater than the timestamp
160        $this->assertGreaterThan($revexpected, $current);
161        // however, it should be less than the current time or equal to it
162        $this->assertLessThanOrEqual(time(), $current);
163
164        //restore settings
165        $_SERVER['REMOTE_USER'] = $oldRemoteUser;
166        $conf['superuser'] = $oldSuperUser;
167        $conf['useacl'] = $oldUseacl;
168    }
169}
170