Fix tabs/spaces from r74242
[mediawiki.git] / maintenance / tests / phpunit / includes / api / ApiWatchTest.php
blob6525a8afb116d6cd327b0619ef722fdb393c86cb
1 <?php
3 require_once dirname( __FILE__ ) . '/ApiSetup.php';
5 class ApiWatchTest extends ApiTestSetup {
7 function setUp() {
8 parent::setUp();
11 function testLogin() {
12 $data = $this->doApiRequest( array(
13 'action' => 'login',
14 'lgname' => self::$user->userName,
15 'lgpassword' => self::$user->password ) );
17 $this->assertArrayHasKey( "login", $data[0] );
18 $this->assertArrayHasKey( "result", $data[0]['login'] );
19 $this->assertEquals( "NeedToken", $data[0]['login']['result'] );
20 $token = $data[0]['login']['token'];
22 $data = $this->doApiRequest( array(
23 'action' => 'login',
24 "lgtoken" => $token,
25 "lgname" => self::$user->userName,
26 "lgpassword" => self::$user->password ), $data );
28 $this->assertArrayHasKey( "login", $data[0] );
29 $this->assertArrayHasKey( "result", $data[0]['login'] );
30 $this->assertEquals( "Success", $data[0]['login']['result'] );
31 $this->assertArrayHasKey( 'lgtoken', $data[0]['login'] );
33 return $data;
36 function testGetToken() {
37 foreach ( array( self::$user, self::$sysopUser ) as $user ) {
38 $GLOBALS['wgUser'] = $user->user;
40 $data = $this->doApiRequest( array(
41 'action' => 'query',
42 'titles' => 'Main Page',
43 'intoken' => 'edit|delete|protect|move|block|unblock',
44 'prop' => 'info' ) );
46 $this->assertArrayHasKey( 'query', $data[0] );
47 $this->assertArrayHasKey( 'pages', $data[0]['query'] );
48 $keys = array_keys( $data[0]['query']['pages'] );
49 $key = array_pop( $keys );
51 $rights = $user->user->getRights();
53 $this->assertArrayHasKey( $key, $data[0]['query']['pages'] );
54 $this->assertArrayHasKey( 'edittoken', $data[0]['query']['pages'][$key] );
55 $this->assertArrayHasKey( 'movetoken', $data[0]['query']['pages'][$key] );
57 if ( isset( $rights['delete'] ) ) {
58 $this->assertArrayHasKey( 'deletetoken', $data[0]['query']['pages'][$key] );
61 if ( isset( $rights['block'] ) ) {
62 $this->assertArrayHasKey( 'blocktoken', $data[0]['query']['pages'][$key] );
63 $this->assertArrayHasKey( 'unblocktoken', $data[0]['query']['pages'][$key] );
66 if ( isset( $rights['protect'] ) ) {
67 $this->assertArrayHasKey( 'protecttoken', $data[0]['query']['pages'][$key] );
71 $GLOBALS['wgUser'] = self::$user->user;
73 return $data;
76 /**
77 * @depends testGetToken
79 function testWatchEdit( $data ) {
80 $keys = array_keys( $data[0]['query']['pages'] );
81 $key = array_pop( $keys );
82 $pageinfo = $data[0]['query']['pages'][$key];
84 $data = $this->doApiRequest( array(
85 'action' => 'edit',
86 'title' => 'Main Page',
87 'text' => 'new text',
88 'token' => $pageinfo['edittoken'],
89 'watchlist' => 'watch' ), $data );
90 $this->assertArrayHasKey( 'edit', $data[0] );
91 $this->assertArrayHasKey( 'result', $data[0]['edit'] );
92 $this->assertEquals( 'Success', $data[0]['edit']['result'] );
94 return $data;
98 /**
99 * @depends testWatchEdit
101 function testWatchClear( $data ) {
102 $data = $this->doApiRequest( array(
103 'action' => 'query',
104 'list' => 'watchlist' ), $data );
106 if ( isset( $data[0]['query']['watchlist'] ) ) {
107 $wl = $data[0]['query']['watchlist'];
109 foreach ( $wl as $page ) {
110 $data = $this->doApiRequest( array(
111 'action' => 'watch',
112 'title' => $page['title'],
113 'unwatch' => true ), $data );
116 $data = $this->doApiRequest( array(
117 'action' => 'query',
118 'list' => 'watchlist' ), $data );
119 $this->assertArrayHasKey( 'query', $data[0] );
120 $this->assertArrayHasKey( 'watchlist', $data[0]['query'] );
121 $this->assertEquals( 0, count( $data[0]['query']['watchlist'] ) );
123 return $data;
127 * @depends testGetToken
129 function testWatchProtect( $data ) {
130 $keys = array_keys( $data[0]['query']['pages'] );
131 $key = array_pop( $keys );
132 $pageinfo = $data[0]['query']['pages'][$key];
134 $data = $this->doApiRequest( array(
135 'action' => 'protect',
136 'token' => $pageinfo['protecttoken'],
137 'title' => 'Main Page',
138 'protections' => 'edit=sysop',
139 'watchlist' => 'unwatch' ), $data );
141 $this->assertArrayHasKey( 'protect', $data[0] );
142 $this->assertArrayHasKey( 'protections', $data[0]['protect'] );
143 $this->assertEquals( 1, count( $data[0]['protect']['protections'] ) );
144 $this->assertArrayHasKey( 'edit', $data[0]['protect']['protections'][0] );
148 * @depends testGetToken
150 function testGetRollbackToken( $data ) {
151 $data = $this->doApiRequest( array(
152 'action' => 'query',
153 'prop' => 'revisions',
154 'titles' => 'Main Page',
155 'rvtoken' => 'rollback' ), $data );
157 $this->assertArrayHasKey( 'query', $data[0] );
158 $this->assertArrayHasKey( 'pages', $data[0]['query'] );
159 $keys = array_keys( $data[0]['query']['pages'] );
160 $key = array_pop( $keys );
162 $this->assertArrayHasKey( 'pageid', $data[0]['query']['pages'][$key] );
163 $this->assertArrayHasKey( 'revisions', $data[0]['query']['pages'][$key] );
164 $this->assertArrayHasKey( 0, $data[0]['query']['pages'][$key]['revisions'] );
165 $this->assertArrayHasKey( 'rollbacktoken', $data[0]['query']['pages'][$key]['revisions'][0] );
167 return $data;
171 * @depends testGetRollbackToken
173 function testWatchRollback( $data ) {
174 $keys = array_keys( $data[0]['query']['pages'] );
175 $key = array_pop( $keys );
176 $pageinfo = $data[0]['query']['pages'][$key]['revisions'][0];
178 try {
179 $data = $this->doApiRequest( array(
180 'action' => 'rollback',
181 'title' => 'Main Page',
182 'user' => self::$user->userName,
183 'token' => $pageinfo['rollbacktoken'],
184 'watchlist' => 'watch' ), $data );
185 } catch( UsageException $ue ) {
186 if( $ue->getCodeString() == 'onlyauthor' ) {
187 $this->markTestIncomplete( "Only one author to 'Main Page', cannot test rollback" );
190 $this->assertArrayHasKey( 'rollback', $data[0] );
191 $this->assertArrayHasKey( 'title', $data[0]['rollback'] );
195 * @depends testGetToken
197 function testWatchDelete( $data ) {
198 $keys = array_keys( $data[0]['query']['pages'] );
199 $key = array_pop( $keys );
200 $pageinfo = $data[0]['query']['pages'][$key];
202 $data = $this->doApiRequest( array(
203 'action' => 'delete',
204 'token' => $pageinfo['deletetoken'],
205 'title' => 'Main Page' ), $data );
206 $this->assertArrayHasKey( 'delete', $data[0] );
207 $this->assertArrayHasKey( 'title', $data[0]['delete'] );
209 $data = $this->doApiRequest( array(
210 'action' => 'query',
211 'list' => 'watchlist' ), $data );
213 $this->markTestIncomplete( 'This test needs to verify the deleted article was added to the users watchlist' );