e12e46d5971a6b3b85af6297380e8dcb236b1525
[lhc/web/wiklou.git] / maintenance / tests / phpunit / includes / api / ApiWatchTest.php
1 <?php
2
3 class ApiWatchTest extends ApiTestSetup {
4
5 function setUp() {
6 ini_set( 'log_errors', 1 );
7 ini_set( 'error_reporting', 1 );
8 ini_set( 'display_errors', 1 );
9
10 global $wgMemc;
11 $wgMemc = new FakeMemCachedClient;
12 }
13
14 function tearDown() {
15 global $wgMemc;
16
17 $wgMemc = null;
18 }
19
20
21 function doApiRequest( $params, $data = null ) {
22 $_SESSION = isset( $data[2] ) ? $data[2] : array();
23
24 $req = new FauxRequest( $params, true, $_SESSION );
25 $module = new ApiMain( $req, true );
26 $module->execute();
27
28 $data[0] = $module->getResultData();
29 $data[1] = $req;
30 $data[2] = $_SESSION;
31
32 return $data;
33 }
34
35 function testLogin() {
36 $data = $this->doApiRequest( array(
37 'action' => 'login',
38 'lgname' => 'WikiSysop',
39 'lgpassword' => 'none' ), $data );
40
41 $this->assertArrayHasKey( "login", $data[0] );
42 $this->assertArrayHasKey( "result", $data[0]['login'] );
43 $this->assertEquals( "NeedToken", $data[0]['login']['result'] );
44 $token = $data[0]['login']['token'];
45
46 $data = $this->doApiRequest( array(
47 'action' => 'login',
48 "lgtoken" => $token,
49 "lgname" => 'WikiSysop',
50 "lgpassword" => 'none' ), $data );
51
52 $this->assertArrayHasKey( "login", $data[0] );
53 $this->assertArrayHasKey( "result", $data[0]['login'] );
54 $this->assertEquals( "Success", $data[0]['login']['result'] );
55 $this->assertArrayHasKey( 'lgtoken', $data[0]['login'] );
56
57 return $data;
58 }
59
60 function testGetToken() {
61
62 $data = $this->doApiRequest( array(
63 'action' => 'query',
64 'titles' => 'Main Page',
65 'intoken' => 'edit|delete|protect|move|block|unblock',
66 'prop' => 'info' ), $data );
67
68 $this->assertArrayHasKey( 'query', $data[0] );
69 $this->assertArrayHasKey( 'pages', $data[0]['query'] );
70 $key = array_pop( array_keys( $data[0]['query']['pages'] ) );
71
72 $this->assertArrayHasKey( $key, $data[0]['query']['pages'] );
73 $this->assertArrayHasKey( 'edittoken', $data[0]['query']['pages'][$key] );
74 $this->assertArrayHasKey( 'movetoken', $data[0]['query']['pages'][$key] );
75 $this->assertArrayHasKey( 'deletetoken', $data[0]['query']['pages'][$key] );
76 $this->assertArrayHasKey( 'blocktoken', $data[0]['query']['pages'][$key] );
77 $this->assertArrayHasKey( 'unblocktoken', $data[0]['query']['pages'][$key] );
78 $this->assertArrayHasKey( 'protecttoken', $data[0]['query']['pages'][$key] );
79
80 return $data;
81 }
82
83 /**
84 * @depends testGetToken
85 */
86 function testWatchEdit( $data ) {
87 $key = array_pop( array_keys( $data[0]['query']['pages'] ) );
88 $pageinfo = $data[0]['query']['pages'][$key];
89
90 $data = $this->doApiRequest( array(
91 'action' => 'edit',
92 'title' => 'Main Page',
93 'text' => 'new text',
94 'token' => $pageinfo['edittoken'],
95 'watchlist' => 'watch' ), $data );
96 $this->assertArrayHasKey( 'edit', $data[0] );
97 $this->assertArrayHasKey( 'result', $data[0]['edit'] );
98 $this->assertEquals( 'Success', $data[0]['edit']['result'] );
99
100 return $data;
101 }
102
103
104 /**
105 * @depends testWatchEdit
106 */
107 function testWatchClear( $data ) {
108 $data = $this->doApiRequest( array(
109 'action' => 'query',
110 'list' => 'watchlist' ), $data );
111
112 if ( isset( $data[0]['query']['watchlist'] ) ) {
113 $wl = $data[0]['query']['watchlist'];
114
115 foreach ( $wl as $page ) {
116 $data = $this->doApiRequest( array(
117 'action' => 'watch',
118 'title' => $page['title'],
119 'unwatch' => true ), $data );
120 }
121 }
122 $data = $this->doApiRequest( array(
123 'action' => 'query',
124 'list' => 'watchlist' ), $data );
125 $this->assertArrayHasKey( 'query', $data[0] );
126 $this->assertArrayHasKey( 'watchlist', $data[0]['query'] );
127 $this->assertEquals( 0, count( $data[0]['query']['watchlist'] ) );
128
129 return $data;
130 }
131
132 /**
133 * @depends testGetToken
134 */
135 function testWatchProtect( $data ) {
136 $key = array_pop( array_keys( $data[0]['query']['pages'] ) );
137 $pageinfo = $data[0]['query']['pages'][$key];
138
139 $data = $this->doApiRequest( array(
140 'action' => 'protect',
141 'token' => $pageinfo['protecttoken'],
142 'title' => 'Main Page',
143 'protections' => 'edit=sysop',
144 'watchlist' => 'unwatch' ), $data );
145
146 $this->assertArrayHasKey( 'protect', $data[0] );
147 $this->assertArrayHasKey( 'protections', $data[0]['protect'] );
148 $this->assertEquals( 1, count( $data[0]['protect']['protections'] ) );
149 $this->assertArrayHasKey( 'edit', $data[0]['protect']['protections'][0] );
150 }
151
152 /**
153 * @depends testGetToken
154 */
155 function testGetRollbackToken( $data ) {
156 $data = $this->doApiRequest( array(
157 'action' => 'query',
158 'prop' => 'revisions',
159 'titles' => 'Main Page',
160 'rvtoken' => 'rollback' ), $data );
161
162 $this->assertArrayHasKey( 'query', $data[0] );
163 $this->assertArrayHasKey( 'pages', $data[0]['query'] );
164 $key = array_pop( array_keys( $data[0]['query']['pages'] ) );
165
166 $this->assertArrayHasKey( 'pageid', $data[0]['query']['pages'][$key] );
167 $this->assertArrayHasKey( 'revisions', $data[0]['query']['pages'][$key] );
168 $this->assertArrayHasKey( 0, $data[0]['query']['pages'][$key]['revisions'] );
169 $this->assertArrayHasKey( 'rollbacktoken', $data[0]['query']['pages'][$key]['revisions'][0] );
170
171 return $data;
172 }
173
174 /**
175 * @depends testGetRollbackToken
176 */
177 function testWatchRollback( $data ) {
178 $key = array_pop( array_keys( $data[0]['query']['pages'] ) );
179 $pageinfo = $data[0]['query']['pages'][$key]['revisions'][0];
180
181 $data = $this->doApiRequest( array(
182 'action' => 'rollback',
183 'title' => 'Main Page',
184 'user' => 'WikiSysop',
185 'token' => $pageinfo['rollbacktoken'],
186 'watchlist' => 'watch' ), $data );
187
188 $this->assertArrayHasKey( 'rollback', $data[0] );
189 $this->assertArrayHasKey( 'title', $data[0]['rollback'] );
190 }
191
192 /**
193 * @depends testGetToken
194 */
195 function testWatchDelete( $data ) {
196 $key = array_pop( array_keys( $data[0]['query']['pages'] ) );
197 $pageinfo = $data[0]['query']['pages'][$key];
198
199 $data = $this->doApiRequest( array(
200 'action' => 'delete',
201 'token' => $pageinfo['deletetoken'],
202 'title' => 'Main Page' ), $data );
203 $this->assertArrayHasKey( 'delete', $data[0] );
204 $this->assertArrayHasKey( 'title', $data[0]['delete'] );
205
206 $data = $this->doApiRequest( array(
207 'action' => 'query',
208 'list' => 'watchlist' ), $data );
209 }
210
211 }