| Current File : /home/jvzmxxx/wiki/extensions/Wikibase/lib/tests/phpunit/Sites/SitesBuilderTest.php |
<?php
namespace Wikibase\Test;
use HashSiteStore;
use MediaWikiSite;
use PHPUnit_Framework_TestCase;
use SiteList;
use Wikibase\Lib\Sites\SitesBuilder;
/**
* @covers Wikibase\Lib\Sites\SitesBuilder
*
* @group Wikibase
*
* @license GPL-2.0+
* @author Katie Filbert < aude.wiki@gmail.com >
*/
class SitesBuilderTest extends PHPUnit_Framework_TestCase {
/**
* @dataProvider buildSitesProvider
*/
public function testBuildSites( array $sites, $group, $wikiId, array $expected ) {
$store = new HashSiteStore();
$validGroups = array( 'wikipedia', 'wikivoyage', 'wikiquote', 'wiktionary',
'wikibooks', 'wikisource', 'wikiversity', 'wikinews' );
$sitesBuilder = new SitesBuilder( $store, $validGroups );
$sitesBuilder->buildStore( $sites, $group, $wikiId );
$expectedSiteList = new SiteList( $expected );
$this->assertEquals( $expectedSiteList, $store->getSites() );
}
public function buildSitesProvider() {
$sitesData = $this->getSitesData();
$sites = $this->getSites( $sitesData );
$expectedSites = $sites;
foreach ( $expectedSites as $site ) {
if ( $site->getGroup() === 'wikipedia' ) {
$site->addInterwikiId( $site->getLanguageCode() );
$site->addNavigationId( $site->getLanguageCode() );
}
}
$data = array();
$data[] = array( $sites, 'wikidata', null, $expectedSites );
$data[] = array( $sites, 'commons', null, $expectedSites );
$data[] = array( $sites, 'wikipedia', null, $expectedSites );
$data[] = array( $sites, null, 'enwiki', $expectedSites );
$data[] = array( $sites, null, 'commonswiki', $expectedSites );
$expectedSites2 = $sites;
foreach ( $expectedSites2 as $site ) {
if ( $site->getGroup() === 'wikivoyage' ) {
$site->addInterwikiId( $site->getLanguageCode() );
$site->addNavigationId( $site->getLanguageCode() );
}
}
$data[] = array( $sites, 'wikivoyage', null, $expectedSites2 );
$data[] = array( $sites, null, 'enwikivoyage', $expectedSites2 );
$data[] = array( $sites, 'wikivoyage', 'enwiki', $expectedSites2 );
$data[] = array( $sites, 'kittens', null, $sites );
$data[] = array( $sites, 'kittens', 'enwiki', $sites );
$data[] = array( $sites, null, 'kittenswiki', $sites );
return $data;
}
private function getSitesData() {
$sitesData = array(
array(
'siteid' => 'enwiki',
'group' => 'wikipedia',
'url' => 'en.wikipedia.org',
'lang' => 'en'
),
array(
'siteid' => 'dewiki',
'group' => 'wikipedia',
'url' => 'de.wikipedia.org',
'lang' => 'de'
),
array(
'siteid' => 'enwikivoyage',
'group' => 'wikivoyage',
'url' => 'en.wikivoyage.org',
'lang' => 'en'
),
array(
'siteid' => 'frwikivoyage',
'group' => 'wikivoyage',
'url' => 'fr.wikivoyage.org',
'lang' => 'fr'
),
array(
'siteid' => 'enwikiquote',
'group' => 'wikiquote',
'url' => 'en.wikiquote.org',
'lang' => 'en'
),
array(
'siteid' => 'commonswiki',
'group' => 'commons',
'url' => 'commons.wikimedia.org',
'lang' => 'en'
),
array(
'siteid' => 'wikidatawiki',
'group' => 'wikidata',
'url' => 'www.wikidata.org',
'lang' => 'en'
),
);
return $sitesData;
}
/**
* @param array[] $sitesData
*
* @return MediaWikiSite[]
*/
private function getSites( array $sitesData ) {
$sites = array();
foreach ( $sitesData as $siteData ) {
$fields = array(
'globalid' => $siteData['siteid'],
'type' => 'mediawiki',
'group' => $siteData['group'],
'source' => 'local',
'language' => $siteData['lang'],
'localids' => array(),
'internalid' => null,
'data' => array(
'paths' => array(
'file_path' => '//' . $siteData['url'] . '/w/$1',
'page_path' => '//' . $siteData['url'] . '/wiki/$1'
)
),
'forward' => false,
'config' => array()
);
$site = new MediaWikiSite();
$site->unserialize( serialize( $fields ) );
$siteId = $siteData['siteid'];
$sites[$siteId] = $site;
}
return $sites;
}
}