wiki.techinc.nl/tests/phpunit/includes/api/ApiWatchTest.php
Antoine Musso 0bbfc95f3c add broken test to broken group (not incomplete)
This test suite really needs to be fixed, marking them as incomplete does not
let us tests them easily.  Instead, I have added them to the Broken group thus
we can easily run them and do not break the continuous integration system.
2011-05-30 18:58:07 +00:00

182 lines
4.8 KiB
PHP

<?php
require_once dirname( __FILE__ ) . '/ApiSetup.php';
/**
* @group Database
* @group Destructive
* @todo This test suite is severly broken and need a full review
*/
class ApiWatchTest extends ApiTestSetup {
function setUp() {
parent::setUp();
$this->doLogin();
}
function getTokens() {
return $this->getTokenList( $this->sysopUser );
}
/**
* @group Broken
*/
function testWatchEdit() {
$data = $this->getTokens();
$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;
}
/**
* @group Broken
*/
function testWatchProtect() {
$data = $this->getTokens();
$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
* @group Broken
*/
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'] );
}
/**
* @group Broken
*/
function testWatchDelete() {
$data = $this->getTokens();
$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' );
}
}