Add basic test coverage for all CiteHooks code

This also updates an existing test to cover all trim() in the code.

Change-Id: I0f0b4f8154004f941f4eaa5a9b2c3be0598fb137
This commit is contained in:
Thiemo Kreuz 2019-11-07 20:57:00 +01:00
parent f62acf7e89
commit ae01d35bf2
2 changed files with 184 additions and 0 deletions

View file

@ -0,0 +1,79 @@
<?php
namespace Cite\Test;
use ApiQuerySiteinfo;
use CiteHooks;
use HashBagOStuff;
use LinksUpdate;
use Title;
use WANObjectCache;
/**
* @coversDefaultClass \CiteHooks
*/
class CiteHooksTest extends \MediaWikiIntegrationTestCase {
protected function setUp() : void {
parent::setUp();
$this->setMwGlobals( [
'wgCiteStoreReferencesData' => true,
] );
}
/**
* @covers ::onLinksUpdateComplete
*/
public function testOnLinksUpdateComplete() {
$cache = $this->getMockBuilder( WANObjectCache::class )
->setConstructorArgs( [ [ 'cache' => new HashBagOStuff() ] ] )
->setMethods( [ 'makeKey', 'relayPurge' ] )
->getMock();
$cache->method( 'makeKey' )
->willReturn( '<KEY>' );
// What we actually want to check here is if WANObjectCache::delete() is called, but it's
// final and can't be mocked.
$cache->expects( $this->once() )
->method( 'relayPurge' )
->with(
'WANCache:v:<KEY>',
WANObjectCache::MAX_COMMIT_DELAY,
WANObjectCache::HOLDOFF_TTL_NONE
);
$this->setService( 'MainWANObjectCache', $cache );
$linksUpdate = $this->createMock( LinksUpdate::class );
$linksUpdate->method( 'getAddedProperties' )
->willReturn( [ 'references-1' => true ] );
$linksUpdate->method( 'getTitle' )
->willReturn( $this->createMock( Title::class ) );
CiteHooks::onLinksUpdateComplete( $linksUpdate );
}
/**
* @covers ::onResourceLoaderGetConfigVars
*/
public function testOnResourceLoaderGetConfigVars() {
$vars = [];
CiteHooks::onResourceLoaderGetConfigVars( $vars );
$this->assertArrayHasKey( 'wgCiteVisualEditorOtherGroup', $vars );
$this->assertArrayHasKey( 'wgCiteResponsiveReferences', $vars );
}
/**
* @covers ::onAPIQuerySiteInfoGeneralInfo
*/
public function testOnAPIQuerySiteInfoGeneralInfo() {
$api = $this->createMock( ApiQuerySiteinfo::class );
$data = [];
CiteHooks::onAPIQuerySiteInfoGeneralInfo( $api, $data );
$this->assertArrayHasKey( 'citeresponsivereferences', $data );
}
}

View file

@ -0,0 +1,105 @@
<?php
namespace Cite\Test\Unit;
use Cite;
use CiteHooks;
use HashConfig;
use LinksUpdate;
use Parser;
use ParserOutput;
use ResourceLoader;
use Title;
/**
* @coversDefaultClass \CiteHooks
*/
class CiteHooksTest extends \MediaWikiUnitTestCase {
protected function setUp() : void {
global $wgCiteStoreReferencesData;
parent::setUp();
$wgCiteStoreReferencesData = true;
}
/**
* @covers ::onParserFirstCallInit
*/
public function testOnParserFirstCallInit() {
$parser = $this->createMock( Parser::class );
$parser->expects( $this->exactly( 2 ) )
->method( 'setHook' )
->withConsecutive(
[ 'ref', $this->isType( 'callable' ) ],
[ 'references', $this->isType( 'callable' ) ]
);
CiteHooks::onParserFirstCallInit( $parser );
$this->assertInstanceOf( Cite::class, $parser->extCite );
}
/**
* @covers ::onContentHandlerDefaultModelFor
*/
public function testOnContentHandlerDefaultModelFor() {
$title = $this->createMock( Title::class );
$title->method( 'inNamespace' )
->willReturn( true );
$title->method( 'getText' )
->willReturn( 'Cite-tool-definition.json' );
CiteHooks::onContentHandlerDefaultModelFor( $title, $model );
$this->assertSame( CONTENT_MODEL_JSON, $model );
}
/**
* @covers ::onResourceLoaderTestModules
*/
public function testOnResourceLoaderTestModules() {
$testModules = [];
$resourceLoader = $this->createMock( ResourceLoader::class );
$resourceLoader->method( 'getConfig' )
->willReturn( new HashConfig( [
'ResourceModules' => [ 'ext.visualEditor.mediawiki' => true ],
] ) );
CiteHooks::onResourceLoaderTestModules( $testModules, $resourceLoader );
$this->assertArrayHasKey( 'ext.cite.visualEditor.test', $testModules['qunit'] );
}
/**
* @covers ::onResourceLoaderRegisterModules
*/
public function testOnResourceLoaderRegisterModules() {
$resourceLoader = $this->createMock( ResourceLoader::class );
$resourceLoader->expects( $this->atLeastOnce() )
->method( 'register' );
CiteHooks::onResourceLoaderRegisterModules( $resourceLoader );
}
/**
* @covers ::onLinksUpdate
*/
public function testOnLinksUpdate() {
$parserOutput = $this->createMock( ParserOutput::class );
$parserOutput->method( 'getExtensionData' )
->willReturn( true );
$parserOutput->expects( $this->once() )
->method( 'setExtensionData' )
->with( Cite::EXT_DATA_KEY, null );
$linksUpdate = $this->createMock( LinksUpdate::class );
$linksUpdate->method( 'getParserOutput' )
->willReturn( $parserOutput );
CiteHooks::onLinksUpdate( $linksUpdate );
$this->assertArrayHasKey( 'references-1', $linksUpdate->mProperties );
}
}