mediawiki-extensions-Discus.../tests/phpunit/integration/ApiDiscussionToolsPageInfoTest.php
Derick Alangi 672ca86016 ApiDiscussionToolsTrait: PageInfo & Compare don't need HTML for editing
ApiDiscussionToolsPageInfo and ApiDiscussionToolsCompare in direct parsoid
or VRS modes tries to fetch HTML using VisualEditor thus stashing the
HTML gotten which we don't want, we only need it for viewing in these cases.

This seems like something that was/is already happening in RESTBase. So for
APIs in DiscussionTools that need the HTML for viewing, just get it from
parser cache and not stash it.

Bug: T323357
Change-Id: I101c1e84739a2ac1f562f2f7bdc4b8f53d9f3b23
2022-11-21 16:29:13 +01:00

96 lines
3 KiB
PHP

<?php
namespace MediaWiki\Extension\DiscussionTools\Tests;
use ApiTestCase;
use MediaWiki\Extension\DiscussionTools\ApiDiscussionToolsPageInfo;
use MediaWiki\MediaWikiServices;
use Wikimedia\TestingAccessWrapper;
/**
* @group medium
* @group Database
* @covers \MediaWiki\Extension\DiscussionTools\ApiDiscussionToolsPageInfo
*/
class ApiDiscussionToolsPageInfoTest extends ApiTestCase {
use TestUtils;
/**
* Setup the MW environment
*
* @param array $config
* @param array $data
*/
protected function setupEnv( array $config, array $data ): void {
$this->setMwGlobals( $config );
$this->setMwGlobals( [
'wgArticlePath' => $config['wgArticlePath'],
'wgNamespaceAliases' => $config['wgNamespaceIds'],
'wgMetaNamespace' => strtr( $config['wgFormattedNamespaces'][NS_PROJECT], ' ', '_' ),
'wgMetaNamespaceTalk' => strtr( $config['wgFormattedNamespaces'][NS_PROJECT_TALK], ' ', '_' ),
// TODO: Move this to $config
'wgLocaltimezone' => $data['localTimezone'],
// Data used for the tests assumes there are no variants for English.
// Language variants are tested using other languages.
'wgUsePigLatinVariant' => false,
] );
$this->setUserLang( $config['wgContentLanguage'] );
$this->setContentLang( $config['wgContentLanguage'] );
}
/**
* @dataProvider provideGetThreadItemsHtml
*/
public function testGetThreadItemsHtml(
string $name, string $title, string $dom, string $expected, string $config, string $data
): void {
$dom = static::getHtml( $dom );
$expectedPath = $expected;
$expected = static::getJson( $expected );
$config = static::getJson( $config );
$data = static::getJson( $data );
$doc = static::createDocument( $dom );
$container = static::getThreadContainer( $doc );
$this->setupEnv( $config, $data );
$title = MediaWikiServices::getInstance()->getTitleParser()->parseTitle( $title );
$threadItemSet = static::createParser( $data )->parse( $container, $title );
$pageInfo = TestingAccessWrapper::newFromClass( ApiDiscussionToolsPageInfo::class );
$threadItemsHtml = $pageInfo->getThreadItemsHtml( $threadItemSet );
// Optionally write updated content to the JSON files
if ( getenv( 'DISCUSSIONTOOLS_OVERWRITE_TESTS' ) ) {
static::overwriteJsonFile( $expectedPath, $threadItemsHtml );
}
static::assertEquals( $expected, $threadItemsHtml, $name );
}
public function provideGetThreadItemsHtml(): array {
return static::getJson( '../cases/threaditemshtml.json' );
}
/**
* @covers \MediaWiki\Extension\DiscussionTools\ApiDiscussionToolsPageInfo::execute
*/
public function testExecuteApiDiscussionToolsPageInfo() {
$page = $this->getNonexistingTestPage( __METHOD__ );
$this->editPage( $page, 'add DT pageinfo content' );
$params = [
'action' => 'discussiontoolspageinfo',
'page' => $page->getTitle()->getText(),
];
$result = $this->doApiRequestWithToken( $params );
$this->assertNotEmpty( $result[0]['discussiontoolspageinfo'] );
$this->assertArrayHasKey( 'transcludedfrom', $result[0]['discussiontoolspageinfo'] );
}
}