Unify setUp/tearDown in ApiSetup, rather than duplicating in ApiWatchTest. Also fix...
[mediawiki.git] / maintenance / tests / phpunit / includes / api / ApiWatchTest.php
blobad6824e434fa301fc5779713c1e99e0009575dc3
1 <?php
3 require_once dirname( __FILE__ ) . '/ApiSetup.php';
5 class ApiWatchTest extends ApiTestSetup {
7 function setUp() {
8 parent::setUp();
11 function doApiRequest( $params, $data = null ) {
12 $_SESSION = isset( $data[2] ) ? $data[2] : array();
14 $req = new FauxRequest( $params, true, $_SESSION );
15 $module = new ApiMain( $req, true );
16 $module->execute();
18 $data[0] = $module->getResultData();
19 $data[1] = $req;
20 $data[2] = $_SESSION;
22 return $data;
25 function testLogin() {
26 $data = $this->doApiRequest( array(
27 'action' => 'login',
28 'lgname' => self::$userName,
29 'lgpassword' => self::$passWord ) );
31 $this->assertArrayHasKey( "login", $data[0] );
32 $this->assertArrayHasKey( "result", $data[0]['login'] );
33 $this->assertEquals( "NeedToken", $data[0]['login']['result'] );
34 $token = $data[0]['login']['token'];
36 $data = $this->doApiRequest( array(
37 'action' => 'login',
38 "lgtoken" => $token,
39 "lgname" => self::$userName,
40 "lgpassword" => self::$passWord ), $data );
42 $this->assertArrayHasKey( "login", $data[0] );
43 $this->assertArrayHasKey( "result", $data[0]['login'] );
44 $this->assertEquals( "Success", $data[0]['login']['result'] );
45 $this->assertArrayHasKey( 'lgtoken', $data[0]['login'] );
47 return $data;
50 function testGetToken() {
52 $data = $this->doApiRequest( array(
53 'action' => 'query',
54 'titles' => 'Main Page',
55 'intoken' => 'edit|delete|protect|move|block|unblock',
56 'prop' => 'info' ) );
58 $this->assertArrayHasKey( 'query', $data[0] );
59 $this->assertArrayHasKey( 'pages', $data[0]['query'] );
60 $keys = array_keys( $data[0]['query']['pages'] );
61 $key = array_pop( $keys );
63 $this->assertArrayHasKey( $key, $data[0]['query']['pages'] );
64 $this->assertArrayHasKey( 'edittoken', $data[0]['query']['pages'][$key] );
65 $this->assertArrayHasKey( 'movetoken', $data[0]['query']['pages'][$key] );
66 $this->assertArrayHasKey( 'deletetoken', $data[0]['query']['pages'][$key] );
67 $this->assertArrayHasKey( 'blocktoken', $data[0]['query']['pages'][$key] );
68 $this->assertArrayHasKey( 'unblocktoken', $data[0]['query']['pages'][$key] );
69 $this->assertArrayHasKey( 'protecttoken', $data[0]['query']['pages'][$key] );
71 return $data;
74 /**
75 * @depends testGetToken
77 function testWatchEdit( $data ) {
78 $keys = array_keys( $data[0]['query']['pages'] );
79 $key = array_pop( $keys );
80 $pageinfo = $data[0]['query']['pages'][$key];
82 $data = $this->doApiRequest( array(
83 'action' => 'edit',
84 'title' => 'Main Page',
85 'text' => 'new text',
86 'token' => $pageinfo['edittoken'],
87 'watchlist' => 'watch' ), $data );
88 $this->assertArrayHasKey( 'edit', $data[0] );
89 $this->assertArrayHasKey( 'result', $data[0]['edit'] );
90 $this->assertEquals( 'Success', $data[0]['edit']['result'] );
92 return $data;
96 /**
97 * @depends testWatchEdit
99 function testWatchClear( $data ) {
100 $data = $this->doApiRequest( array(
101 'action' => 'query',
102 'list' => 'watchlist' ), $data );
104 if ( isset( $data[0]['query']['watchlist'] ) ) {
105 $wl = $data[0]['query']['watchlist'];
107 foreach ( $wl as $page ) {
108 $data = $this->doApiRequest( array(
109 'action' => 'watch',
110 'title' => $page['title'],
111 'unwatch' => true ), $data );
114 $data = $this->doApiRequest( array(
115 'action' => 'query',
116 'list' => 'watchlist' ), $data );
117 $this->assertArrayHasKey( 'query', $data[0] );
118 $this->assertArrayHasKey( 'watchlist', $data[0]['query'] );
119 $this->assertEquals( 0, count( $data[0]['query']['watchlist'] ) );
121 return $data;
125 * @depends testGetToken
127 function testWatchProtect( $data ) {
128 $keys = array_keys( $data[0]['query']['pages'] );
129 $key = array_pop( $keys );
130 $pageinfo = $data[0]['query']['pages'][$key];
132 $data = $this->doApiRequest( array(
133 'action' => 'protect',
134 'token' => $pageinfo['protecttoken'],
135 'title' => 'Main Page',
136 'protections' => 'edit=sysop',
137 'watchlist' => 'unwatch' ), $data );
139 $this->assertArrayHasKey( 'protect', $data[0] );
140 $this->assertArrayHasKey( 'protections', $data[0]['protect'] );
141 $this->assertEquals( 1, count( $data[0]['protect']['protections'] ) );
142 $this->assertArrayHasKey( 'edit', $data[0]['protect']['protections'][0] );
146 * @depends testGetToken
148 function testGetRollbackToken( $data ) {
149 $data = $this->doApiRequest( array(
150 'action' => 'query',
151 'prop' => 'revisions',
152 'titles' => 'Main Page',
153 'rvtoken' => 'rollback' ), $data );
155 $this->assertArrayHasKey( 'query', $data[0] );
156 $this->assertArrayHasKey( 'pages', $data[0]['query'] );
157 $keys = array_keys( $data[0]['query']['pages'] );
158 $key = array_pop( $keys );
160 $this->assertArrayHasKey( 'pageid', $data[0]['query']['pages'][$key] );
161 $this->assertArrayHasKey( 'revisions', $data[0]['query']['pages'][$key] );
162 $this->assertArrayHasKey( 0, $data[0]['query']['pages'][$key]['revisions'] );
163 $this->assertArrayHasKey( 'rollbacktoken', $data[0]['query']['pages'][$key]['revisions'][0] );
165 return $data;
169 * @depends testGetRollbackToken
171 function testWatchRollback( $data ) {
172 $keys = array_keys( $data[0]['query']['pages'] );
173 $key = array_pop( $keys );
174 $pageinfo = $data[0]['query']['pages'][$key]['revisions'][0];
176 $data = $this->doApiRequest( array(
177 'action' => 'rollback',
178 'title' => 'Main Page',
179 'user' => self::$userName,
180 'token' => $pageinfo['rollbacktoken'],
181 'watchlist' => 'watch' ), $data );
183 $this->assertArrayHasKey( 'rollback', $data[0] );
184 $this->assertArrayHasKey( 'title', $data[0]['rollback'] );
188 * @depends testGetToken
190 function testWatchDelete( $data ) {
191 $keys = array_keys( $data[0]['query']['pages'] );
192 $key = array_pop( $keys );
193 $pageinfo = $data[0]['query']['pages'][$key];
195 $data = $this->doApiRequest( array(
196 'action' => 'delete',
197 'token' => $pageinfo['deletetoken'],
198 'title' => 'Main Page' ), $data );
199 $this->assertArrayHasKey( 'delete', $data[0] );
200 $this->assertArrayHasKey( 'title', $data[0]['delete'] );
202 $data = $this->doApiRequest( array(
203 'action' => 'query',
204 'list' => 'watchlist' ), $data );