Just methods where adding "static" to the declaration was enough, I didn't do anything with providers that used $this. Initially by search and replace. There were many mistakes which I found mostly by running the PHPStorm inspection which searches for $this usage in a static method. Later I used the PHPStorm "make static" action which avoids the more obvious mistakes. Bug: T332865 Change-Id: I47ed6692945607dfa5c139d42edbd934fa4f3a36
114 lines
3.6 KiB
PHP
114 lines
3.6 KiB
PHP
<?php
|
|
|
|
use MediaWiki\Content\ValidationParams;
|
|
use MediaWiki\Page\PageIdentity;
|
|
use MediaWiki\Page\PageIdentityValue;
|
|
use MediaWiki\Title\Title;
|
|
|
|
class JsonContentHandlerIntegrationTest extends MediaWikiLangTestCase {
|
|
|
|
public static function provideDataAndParserText() {
|
|
return [
|
|
[
|
|
[],
|
|
'<table class="mw-json"><tbody><tr><td>' .
|
|
'<table class="mw-json"><tbody><tr><td class="mw-json-empty">Empty array</td></tr>'
|
|
. '</tbody></table></td></tr></tbody></table>'
|
|
],
|
|
[
|
|
(object)[],
|
|
'<table class="mw-json"><tbody><tr><td class="mw-json-empty">Empty object</td></tr>' .
|
|
'</tbody></table>'
|
|
],
|
|
[
|
|
(object)[ 'foo' ],
|
|
'<table class="mw-json"><tbody><tr><th><span>0</span></th>' .
|
|
'<td class="mw-json-value">"foo"</td></tr></tbody></table>'
|
|
],
|
|
[
|
|
(object)[ 'foo', 'bar' ],
|
|
'<table class="mw-json"><tbody><tr><th><span>0</span></th>' .
|
|
'<td class="mw-json-value">"foo"</td></tr><tr><th><span>1</span></th>' .
|
|
'<td class="mw-json-value">"bar"</td></tr></tbody></table>'
|
|
],
|
|
[
|
|
(object)[ 'baz' => 'foo', 'bar' ],
|
|
'<table class="mw-json"><tbody><tr><th><span>baz</span></th>' .
|
|
'<td class="mw-json-value">"foo"</td></tr><tr><th><span>0</span></th>' .
|
|
'<td class="mw-json-value">"bar"</td></tr></tbody></table>'
|
|
],
|
|
[
|
|
(object)[ 'baz' => 1000, 'bar' ],
|
|
'<table class="mw-json"><tbody><tr><th><span>baz</span></th>' .
|
|
'<td class="mw-json-value">1000</td></tr><tr><th><span>0</span></th>' .
|
|
'<td class="mw-json-value">"bar"</td></tr></tbody></table>'
|
|
],
|
|
[
|
|
(object)[ '<script>alert("evil!")</script>' ],
|
|
'<table class="mw-json"><tbody><tr><th><span>0</span></th><td class="mw-json-value">"' .
|
|
'<script>alert("evil!")</script>"' .
|
|
'</td></tr></tbody></table>',
|
|
],
|
|
[
|
|
'{ broken JSON ]',
|
|
'Invalid JSON: $1',
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider provideDataAndParserText
|
|
* @covers JsonContentHandler::fillParserOutput
|
|
*/
|
|
public function testFillParserOutput( $data, $expected ) {
|
|
if ( !is_string( $data ) ) {
|
|
$data = FormatJson::encode( $data );
|
|
}
|
|
|
|
$content = new JsonContent( $data );
|
|
$contentRenderer = $this->getServiceContainer()->getContentRenderer();
|
|
$parserOutput = $contentRenderer->getParserOutput(
|
|
$content,
|
|
$this->createMock( Title::class ),
|
|
null,
|
|
null,
|
|
true
|
|
);
|
|
$this->assertInstanceOf( ParserOutput::class, $parserOutput );
|
|
$this->assertEquals( $expected, $parserOutput->getText() );
|
|
}
|
|
|
|
/**
|
|
* @covers JsonContentHandler::validateSave
|
|
*/
|
|
public function testValidateSave() {
|
|
$handler = new JsonContentHandler();
|
|
$validationParams = new ValidationParams(
|
|
PageIdentityValue::localIdentity( 123, NS_MEDIAWIKI, 'Config.json' ),
|
|
0
|
|
);
|
|
|
|
$validJson = new JsonContent( FormatJson::encode( [ 'test' => 'value' ] ) );
|
|
$invalidJson = new JsonContent( '{"key":' );
|
|
|
|
$this->assertStatusGood( $handler->validateSave( $validJson, $validationParams ) );
|
|
$this->assertStatusNotOK( $handler->validateSave( $invalidJson, $validationParams ) );
|
|
|
|
$this->setTemporaryHook(
|
|
'JsonValidateSave',
|
|
static function ( JsonContent $content, PageIdentity $pageIdentity, StatusValue $status )
|
|
{
|
|
if ( $pageIdentity->getDBkey() === 'Config.json' &&
|
|
!isset( $content->getData()->getValue()->foo ) ) {
|
|
$status->fatal( 'missing-key-foo' );
|
|
}
|
|
}
|
|
);
|
|
|
|
$this->assertStatusNotOK( $handler->validateSave( $validJson, $validationParams ) );
|
|
$this->assertStatusError( 'invalid-json-data',
|
|
$handler->validateSave( $invalidJson, $validationParams ) );
|
|
$this->assertStatusError( 'missing-key-foo',
|
|
$handler->validateSave( $validJson, $validationParams ) );
|
|
}
|
|
}
|