wiki.techinc.nl/tests/phpunit/includes/api/ApiWatchTest.php
X! ad6875383b Refactor much of the API testing code.
Old: ApiWatchTest not only tested the watch module, but also tested the login module,
     and the login module test was also used to log in to the API for the other tests.
New: ApiWatchTest only contains watch-specific methods. The login testing has been moved
     to ApiTest. The code used to log in and get tokens have been moved to ApiSetup. Nice,
     organized, and much nicer than before. ApiUploadTest is still pretty fugly, though.
2011-01-02 05:52:00 +00:00

176 lines
4.8 KiB
PHP

<?php
require_once dirname( __FILE__ ) . '/ApiSetup.php';
/**
* @group Database
* @group Destructive
*/
class ApiWatchTest extends ApiTestSetup {
function setUp() {
parent::setUp();
$this->doLogin();
}
function getTokens() {
return $this->getTokenList( $this->sysopUser );
}
function testWatchEdit() {
$data = $this->getTokens();
$this->markTestIncomplete( "Broken" );
$keys = array_keys( $data[0]['query']['pages'] );
$key = array_pop( $keys );
$pageinfo = $data[0]['query']['pages'][$key];
$data = $this->doApiRequest( array(
'action' => 'edit',
'title' => 'UTPage',
'text' => 'new text',
'token' => $pageinfo['edittoken'],
'watchlist' => 'watch' ), $data );
$this->assertArrayHasKey( 'edit', $data[0] );
$this->assertArrayHasKey( 'result', $data[0]['edit'] );
$this->assertEquals( 'Success', $data[0]['edit']['result'] );
return $data;
}
/**
* @depends testWatchEdit
*/
function testWatchClear() {
$data = $this->doApiRequest( array(
'action' => 'query',
'list' => 'watchlist' ), $data );
if ( isset( $data[0]['query']['watchlist'] ) ) {
$wl = $data[0]['query']['watchlist'];
foreach ( $wl as $page ) {
$data = $this->doApiRequest( array(
'action' => 'watch',
'title' => $page['title'],
'unwatch' => true ), $data );
}
}
$data = $this->doApiRequest( array(
'action' => 'query',
'list' => 'watchlist' ), $data );
$this->assertArrayHasKey( 'query', $data[0] );
$this->assertArrayHasKey( 'watchlist', $data[0]['query'] );
$this->assertEquals( 0, count( $data[0]['query']['watchlist'] ) );
return $data;
}
function testWatchProtect() {
$data = $this->getTokens();
$this->markTestIncomplete( "Broken" );
$keys = array_keys( $data[0]['query']['pages'] );
$key = array_pop( $keys );
$pageinfo = $data[0]['query']['pages'][$key];
$data = $this->doApiRequest( array(
'action' => 'protect',
'token' => $pageinfo['protecttoken'],
'title' => 'UTPage',
'protections' => 'edit=sysop',
'watchlist' => 'unwatch' ), $data );
$this->assertArrayHasKey( 'protect', $data[0] );
$this->assertArrayHasKey( 'protections', $data[0]['protect'] );
$this->assertEquals( 1, count( $data[0]['protect']['protections'] ) );
$this->assertArrayHasKey( 'edit', $data[0]['protect']['protections'][0] );
}
function testGetRollbackToken() {
$data = $this->getTokens();
if ( !Title::newFromText( 'UTPage' )->exists() ) {
$this->markTestIncomplete( "The article [[UTPage]] does not exist" );
}
$data = $this->doApiRequest( array(
'action' => 'query',
'prop' => 'revisions',
'titles' => 'UTPage',
'rvtoken' => 'rollback' ), $data );
$this->assertArrayHasKey( 'query', $data[0] );
$this->assertArrayHasKey( 'pages', $data[0]['query'] );
$keys = array_keys( $data[0]['query']['pages'] );
$key = array_pop( $keys );
if ( isset( $data[0]['query']['pages'][$key]['missing'] ) ) {
$this->markTestIncomplete( "Target page (UTPage) doesn't exist" );
}
$this->assertArrayHasKey( 'pageid', $data[0]['query']['pages'][$key] );
$this->assertArrayHasKey( 'revisions', $data[0]['query']['pages'][$key] );
$this->assertArrayHasKey( 0, $data[0]['query']['pages'][$key]['revisions'] );
$this->assertArrayHasKey( 'rollbacktoken', $data[0]['query']['pages'][$key]['revisions'][0] );
return $data;
}
/**
* @depends testGetRollbackToken
*/
function testWatchRollback( $data ) {
$keys = array_keys( $data[0]['query']['pages'] );
$key = array_pop( $keys );
$pageinfo = $data[0]['query']['pages'][$key]['revisions'][0];
try {
$data = $this->doApiRequest( array(
'action' => 'rollback',
'title' => 'UTPage',
'user' => $pageinfo['user'],
'token' => $pageinfo['rollbacktoken'],
'watchlist' => 'watch' ), $data );
} catch( UsageException $ue ) {
if( $ue->getCodeString() == 'onlyauthor' ) {
$this->markTestIncomplete( "Only one author to 'UTPage', cannot test rollback" );
} else {
$this->fail( "Received error " . $ue->getCodeString() );
}
}
$this->assertArrayHasKey( 'rollback', $data[0] );
$this->assertArrayHasKey( 'title', $data[0]['rollback'] );
}
function testWatchDelete() {
$data = $this->getTokens();
$this->markTestIncomplete( "Broken" );
$keys = array_keys( $data[0]['query']['pages'] );
$key = array_pop( $keys );
$pageinfo = $data[0]['query']['pages'][$key];
$data = $this->doApiRequest( array(
'action' => 'delete',
'token' => $pageinfo['deletetoken'],
'title' => 'UTPage' ), $data );
$this->assertArrayHasKey( 'delete', $data[0] );
$this->assertArrayHasKey( 'title', $data[0]['delete'] );
$data = $this->doApiRequest( array(
'action' => 'query',
'list' => 'watchlist' ), $data );
$this->markTestIncomplete( 'This test needs to verify the deleted article was added to the users watchlist' );
}
}