wiki.techinc.nl/tests/phpunit/includes/specials/SpecialPageDataTest.php
Thiemo Kreuz fd7363a1e1 Fix broken PHPDoc comments that don't start with /**
Change-Id: I8db56ff0f73873864dde260e51adcd729aa74e94
2020-07-23 16:09:41 +00:00

147 lines
3.2 KiB
PHP

<?php
/**
* @covers SpecialPageData
* @group Database
* @group SpecialPage
*
* @author Daniel Kinzler
*/
class SpecialPageDataTest extends SpecialPageTestBase {
protected function setUp() : void {
parent::setUp();
$this->setContentLang( 'qqx' );
}
protected function newSpecialPage() {
$page = new SpecialPageData();
// why is this needed?
$page->getContext()->setOutput( new OutputPage( $page->getContext() ) );
$page->setRequestHandler( new PageDataRequestHandler() );
return $page;
}
public function provideExecute() {
$cases = [];
$cases['Empty request'] = [ '', [], [], '!!', 200 ];
$cases['Only title specified'] = [
'',
[ 'target' => 'Helsinki' ],
[],
'!!',
303,
[ 'Location' => '!.+!' ]
];
$cases['Accept only HTML'] = [
'',
[ 'target' => 'Helsinki' ],
[ 'Accept' => 'text/HTML' ],
'!!',
303,
[ 'Location' => '!Helsinki$!' ]
];
$cases['Accept only HTML with revid'] = [
'',
[
'target' => 'Helsinki',
'revision' => '4242',
],
[ 'Accept' => 'text/HTML' ],
'!!',
303,
[ 'Location' => '!Helsinki(\?|&)oldid=4242!' ]
];
$cases['Nothing specified'] = [
'main/Helsinki',
[],
[],
'!!',
303,
[ 'Location' => '!Helsinki&action=raw!' ]
];
$cases['Nothing specified'] = [
'/Helsinki',
[],
[],
'!!',
303,
[ 'Location' => '!Helsinki&action=raw!' ]
];
$cases['Invalid Accept header'] = [
'main/Helsinki',
[],
[ 'Accept' => 'text/foobar' ],
'!!',
406,
[],
];
return $cases;
}
/**
* @dataProvider provideExecute
*
* @param string $subpage The subpage to request (or '')
* @param array $params Request parameters
* @param array $headers Request headers
* @param string $expRegExp Regex to match the output against.
* @param int $expCode Expected HTTP status code
* @param array $expHeaders Expected HTTP response headers
*/
public function testExecute(
$subpage,
array $params,
array $headers,
$expRegExp,
$expCode = 200,
array $expHeaders = []
) {
$request = new FauxRequest( $params );
$request->response()->header( 'Status: 200 OK', true, 200 ); // init/reset
foreach ( $headers as $name => $value ) {
$request->setHeader( strtoupper( $name ), $value );
}
try {
/** @var FauxResponse $response */
list( $output, $response ) = $this->executeSpecialPage( $subpage, $request );
$this->assertEquals( $expCode, $response->getStatusCode(), "status code" );
$this->assertRegExp( $expRegExp, $output, "output" );
foreach ( $expHeaders as $name => $exp ) {
$value = $response->getHeader( $name );
$this->assertNotNull( $value, "header: $name" );
$this->assertIsString( $value, "header: $name" );
$this->assertRegExp( $exp, $value, "header: $name" );
}
} catch ( HttpError $e ) {
$this->assertEquals( $expCode, $e->getStatusCode(), "status code" );
$this->assertRegExp( $expRegExp, $e->getHTML(), "error output" );
}
}
public function testSpecialPageWithoutParameters() {
$request = new FauxRequest();
$request->response()->header( 'Status: 200 OK', true, 200 ); // init/reset
list( $output, ) = $this->executeSpecialPage( '', $request );
$this->assertStringContainsString( '(pagedata-text)', $output );
}
}