| Current File : /home/jvzmxxx/wiki/extensions/Wikibase/lib/tests/phpunit/Modules/SitesModuleWorkerTest.php |
<?php
namespace Wikibase\Test;
use BagOStuff;
use HashBagOStuff;
use HashSiteStore;
use MediaWikiSite;
use PHPUnit_Framework_TestCase;
use Site;
use Wikibase\Lib\SitesModuleWorker;
use Wikibase\SettingsArray;
/**
* @covers Wikibase\Lib\SitesModuleWorker
*
* @uses Xml
* @uses SiteList
* @uses Wikibase\SettingsArray
* @uses Wikibase\Lib\LanguageNameLookup
*
* @group Wikibase
* @group WikibaseLib
*
* @author Adrian Heine <adrian.heine@wikimedia.de>
*/
class SitesModuleWorkerTest extends PHPUnit_Framework_TestCase {
/**
* @param Site[] $sites
* @param string[] $groups
* @param string[] $specialGroups
* @param BagOStuff|null $cache
*
* @return SitesModuleWorker
*/
private function newSitesModuleWorker(
array $sites = array(),
array $groups = array(),
array $specialGroups = array(),
BagOStuff $cache = null
) {
$siteStore = new HashSiteStore( $sites );
return new SitesModuleWorker(
new SettingsArray( array(
'siteLinkGroups' => $groups,
'specialSiteLinkGroups' => $specialGroups
) ),
$siteStore,
$cache ?: new HashBagOStuff()
);
}
/**
* @uses Wikibase\Test\SitesModuleWorkerTest::newSitesModuleWorker
*
* @dataProvider getScriptProvider
*/
public function testGetScript(
array $sites,
array $groups,
array $specialGroups,
$languageCode,
$expected
) {
$worker = $this->newSitesModuleWorker( $sites, $groups, $specialGroups );
$result = $worker->getScript( $languageCode );
$this->assertEquals( $result, 'mediaWiki.config.set("wbSiteDetails",' . $expected . ');' );
}
public function getScriptProvider() {
$site = new MediaWikiSite();
$site->setGlobalId( 'siteid' );
$site->setGroup( 'allowedgroup' );
$nonMwSite = new Site();
$nonMwSite->setGlobalId( 'siteid' );
$nonMwSite->setGroup( 'allowedgroup' );
return array(
'no sites' => array( array(), array(), array(), 'qqx', '[]' ),
'no site in sitelinkgroups' => array( array( $site ), array(), array(), 'qqx', '[]' ),
'single site in sitelinkgroups' => array(
array( $site ),
array( 'allowedgroup' ),
array(),
'qqx',
'{"siteid":{"shortName":"","name":"","id":"siteid","pageUrl":"","apiUrl":"",' .
'"languageCode":null,"group":"allowedgroup"}}'
),
'single site in special group' => array(
array( $site ),
array( 'special' ),
array( 'allowedgroup' ),
'ar',
'{"siteid":{"shortName":"siteid","name":"siteid","id":"siteid","pageUrl":"",' .
'"apiUrl":"","languageCode":null,"group":"special"}}'
),
'single non-MediaWiki site in sitelinkgroups' => array(
array( $nonMwSite ),
array( 'allowedgroup' ),
array(),
'qqx',
'[]'
),
);
}
/**
* @dataProvider getDefinitionSummaryProvider
*/
public function testGetDefinitionSummary( array $workerLists ) {
$results = array();
// Verify the dataHash
/** @var SitesModuleWorker[] $workers */
foreach ( $workerLists as $name => $workers ) {
foreach ( $workers as $worker ) {
$summary = $worker->getDefinitionSummary();
$this->assertCount( 1, $summary );
$hash = $summary['dataHash'];
if ( isset( $results[ $name ] ) ) {
$this->assertEquals(
$results[ $name ], $hash, 'getDefinitionSummary should return the same data hash for equivalent settings'
);
} else {
$results[ $name ] = $hash;
}
}
}
$collidingValues = array_diff_key( $results, array_unique( $results ) );
$this->assertEmpty( $collidingValues, 'Different settings lead to same hash' );
}
public function getDefinitionSummaryProvider() {
$site = new MediaWikiSite();
$site->setGlobalId( 'siteid' );
$site->setGroup( 'allowedgroup' );
$site2 = new MediaWikiSite();
$site2->setGlobalId( 'site2id' );
$site2->setGroup( 'allowedgroup' );
$nonMwSite = new Site();
$nonMwSite->setGlobalId( 'siteid' );
$nonMwSite->setGroup( 'allowedgroup' );
return array(
array(
array(
'empty workers' => array(
$this->newSitesModuleWorker(),
$this->newSitesModuleWorker(),
// Should ignore non-MW-sites
// $this->newSitesModuleWorker( array( $nonMwSite ) ),
),
'single site' => array(
$this->newSitesModuleWorker( array( $site ) ),
$this->newSitesModuleWorker( array( $site ) ),
// Should ignore non-MW-sites
// $this->newSitesModuleWorker( array( $site, $nonMwSite ) ),
// $this->newSitesModuleWorker( array( $nonMwSite, $site ) )
),
'single site with configured group' => array(
$this->newSitesModuleWorker( array( $site ), array( 'allowedgroup' ) ),
$this->newSitesModuleWorker( array( $site ), array( 'allowedgroup' ) )
),
)
)
);
}
public function testGetDefinitionSummary_caching() {
$cacheKey = wfMemcKey( 'wikibase-sites-module-modified-hash' );
$cache = new HashBagOStuff();
$worker = $this->newSitesModuleWorker( array(), array( 'foo' ), array(), $cache );
// Make sure whatever hash is computed ends up in the cache
$summary = $worker->getDefinitionSummary();
$this->assertSame( $summary['dataHash'], $cache->get( $cacheKey ) );
$cache->set( $cacheKey, 'cache all the things!' );
// Verify that cached results are returned
$summary = $worker->getDefinitionSummary();
$this->assertSame( 'cache all the things!', $summary['dataHash'] );
}
}