summaryrefslogtreecommitdiff
path: root/tests/phpunit/includes/api/ApiMainTest.php
blob: 780cf9ed1f584ac287ab0bc318296e766d743147 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php

/**
 * @group API
 * @group Database
 * @group medium
 *
 * @covers ApiMain
 */
class ApiMainTest extends ApiTestCase {

	/**
	 * Test that the API will accept a FauxRequest and execute. The help action
	 * (default) throws a UsageException. Just validate we're getting proper XML
	 *
	 * @expectedException UsageException
	 */
	public function testApi() {
		$api = new ApiMain(
			new FauxRequest( array( 'action' => 'help', 'format' => 'xml' ) )
		);
		$api->execute();
		$api->getPrinter()->setBufferResult( true );
		$api->printResult( false );
		$resp = $api->getPrinter()->getBuffer();

		libxml_use_internal_errors( true );
		$sxe = simplexml_load_string( $resp );
		$this->assertNotInternalType( "bool", $sxe );
		$this->assertThat( $sxe, $this->isInstanceOf( "SimpleXMLElement" ) );
	}

	public static function provideAssert() {
		$anon = new User();
		$bot = new User();
		$bot->setName( 'Bot' );
		$bot->addToDatabase();
		$bot->addGroup( 'bot' );
		$user = new User();
		$user->setName( 'User' );
		$user->addToDatabase();
		return array(
			array( $anon, 'user', 'assertuserfailed' ),
			array( $user, 'user', false ),
			array( $user, 'bot', 'assertbotfailed' ),
			array( $bot, 'user', false ),
			array( $bot, 'bot', false ),
		);
	}

	/**
	 * Tests the assert={user|bot} functionality
	 *
	 * @covers ApiMain::checkAsserts
	 * @dataProvider provideAssert
	 * @param User $user
	 * @param string $assert
	 * @param string|bool $error False if no error expected
	 */
	public function testAssert( $user, $assert, $error ) {
		try {
			$this->doApiRequest( array(
				'action' => 'query',
				'assert' => $assert,
			), null, null, $user );
			$this->assertFalse( $error ); // That no error was expected
		} catch ( UsageException $e ) {
			$this->assertEquals( $e->getCodeString(), $error );
		}
	}

}