| Current File : /home/jvzmxxx/wiki/extensions/Wikibase/lib/tests/phpunit/Sites/SiteMatrixParserTest.php |
<?php
namespace Wikibase\Test;
use MediaWikiSite;
use PHPUnit_Framework_TestCase;
use Wikibase\Lib\Sites\SiteMatrixParser;
/**
* @covers Wikibase\Lib\Sites\SiteMatrixParser
*
* @group Wikibase
*
* @license GPL-2.0+
* @author Katie Filbert < aude.wiki@gmail.com >
*/
class SiteMatrixParserTest extends PHPUnit_Framework_TestCase {
/**
* @dataProvider sitesFromJsonProvider
*/
public function testSitesFromJson( $scriptPath, $articlePath, $protocol, $expected ) {
$json = $this->getSiteMatrixJson();
$siteMatrixParser = new SiteMatrixParser(
$scriptPath,
$articlePath,
$protocol
);
$sites = $siteMatrixParser->sitesFromJson( $json );
ksort( $expected );
ksort( $sites );
$this->assertEquals( $expected, $sites );
}
public function sitesFromJsonProvider() {
$siteData = $this->getSiteData();
$data = array();
$data['Protocol relative'] = array(
'/w/$1',
'/wiki/$1',
false,
$this->getSites( $siteData, '/w/$1', '/wiki/$1' )
);
$data['Keep the protocol'] = array(
'/w/$1',
'/wiki/$1',
true,
$this->getSites( $siteData, '/w/$1', '/wiki/$1', 'http:' )
);
$data['Force a protocol'] = array(
'/w/$1',
'/wiki/$1',
'CompuGlobalHyperMegaNet',
$this->getSites( $siteData, '/w/$1', '/wiki/$1', 'CompuGlobalHyperMegaNet:' )
);
return $data;
}
protected function getSiteMatrixJson() {
$sites = array(
array(
'code' => 'en',
'name' => 'English',
'site' => array(
array(
'url' => 'http://en.wikipedia.org',
'dbname' => 'enwiki',
'code' => 'wiki',
'sitename' => 'Wikipedia'
),
array(
'url' => 'http://en.wikivoyage.org',
'dbname' => 'enwikivoyage',
'code' => 'wikivoyage',
'sitename' => 'Wikipedia'
),
array(
'url' => 'http://en.wikiquote.org',
'dbname' => 'enwikiquote',
'code' => 'wikiquote',
'sitename' => 'Wikipedia'
)
),
),
array(
'code' => 'fr',
'name' => 'français',
'site' => array(
array(
'url' => 'http://fr.wikipedia.org',
'dbname' => 'frwiki',
'code' => 'wiki',
'sitename' => 'Wikipedia'
),
array(
'url' => 'http://fr.wikivoyage.org',
'dbname' => 'frwikivoyage',
'code' => 'wikivoyage',
'sitename' => 'Wikipedia'
)
)
)
);
$specialSites = array();
$specialSites[] = array(
'url' => 'http://commons.wikimedia.org',
'dbname' => 'commonswiki',
'code' => 'commons'
);
$specialSites[] = array(
'url' => 'http://www.wikidata.org',
'dbname' => 'wikidatawiki',
'code' => 'wikidata'
);
$specials = array(
'specials' => $specialSites
);
$siteMatrix = array_merge(
array( 'count' => 879 ),
$sites,
$specials
);
$data = array(
'sitematrix' => $siteMatrix
);
return json_encode( $data );
}
protected function getSiteData() {
$siteData = array(
array(
'siteid' => 'enwiki',
'group' => 'wikipedia',
'url' => 'en.wikipedia.org',
'lang' => 'en'
),
array(
'siteid' => 'frwiki',
'group' => 'wikipedia',
'url' => 'fr.wikipedia.org',
'lang' => 'fr'
),
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 $siteData;
}
public function getSites( array $sitesData, $scriptPath, $articlePath, $protocol = '' ) {
$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' => $protocol . '//' . $siteData['url'] . $scriptPath,
'page_path' => $protocol . '//' . $siteData['url'] . $articlePath
)
),
'forward' => false,
'config' => array()
);
$site = new MediaWikiSite();
$site->unserialize( serialize( $fields ) );
$siteId = $siteData['siteid'];
$sites[$siteId] = $site;
}
return $sites;
}
}