123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380 |
- <?php
- class SiteConfigurationTest extends MediaWikiTestCase {
- /**
- * @var SiteConfiguration
- */
- protected $mConf;
- protected function setUp() {
- parent::setUp();
- $this->mConf = new SiteConfiguration;
- $this->mConf->suffixes = [ 'wikipedia' => 'wiki' ];
- $this->mConf->wikis = [ 'enwiki', 'dewiki', 'frwiki' ];
- $this->mConf->settings = [
- 'SimpleKey' => [
- 'wiki' => 'wiki',
- 'tag' => 'tag',
- 'enwiki' => 'enwiki',
- 'dewiki' => 'dewiki',
- 'frwiki' => 'frwiki',
- ],
- 'Fallback' => [
- 'default' => 'default',
- 'wiki' => 'wiki',
- 'tag' => 'tag',
- 'frwiki' => 'frwiki',
- 'null_wiki' => null,
- ],
- 'WithParams' => [
- 'default' => '$lang $site $wiki',
- ],
- '+SomeGlobal' => [
- 'wiki' => [
- 'wiki' => 'wiki',
- ],
- 'tag' => [
- 'tag' => 'tag',
- ],
- 'enwiki' => [
- 'enwiki' => 'enwiki',
- ],
- 'dewiki' => [
- 'dewiki' => 'dewiki',
- ],
- 'frwiki' => [
- 'frwiki' => 'frwiki',
- ],
- ],
- 'MergeIt' => [
- '+wiki' => [
- 'wiki' => 'wiki',
- ],
- '+tag' => [
- 'tag' => 'tag',
- ],
- 'default' => [
- 'default' => 'default',
- ],
- '+enwiki' => [
- 'enwiki' => 'enwiki',
- ],
- '+dewiki' => [
- 'dewiki' => 'dewiki',
- ],
- '+frwiki' => [
- 'frwiki' => 'frwiki',
- ],
- ],
- ];
- $GLOBALS['SomeGlobal'] = [ 'SomeGlobal' => 'SomeGlobal' ];
- }
- /**
- * This function is used as a callback within the tests below
- */
- public static function getSiteParamsCallback( $conf, $wiki ) {
- $site = null;
- $lang = null;
- foreach ( $conf->suffixes as $suffix ) {
- if ( substr( $wiki, -strlen( $suffix ) ) == $suffix ) {
- $site = $suffix;
- $lang = substr( $wiki, 0, -strlen( $suffix ) );
- break;
- }
- }
- return [
- 'suffix' => $site,
- 'lang' => $lang,
- 'params' => [
- 'lang' => $lang,
- 'site' => $site,
- 'wiki' => $wiki,
- ],
- 'tags' => [ 'tag' ],
- ];
- }
- /**
- * @covers SiteConfiguration::siteFromDB
- */
- public function testSiteFromDb() {
- $this->assertEquals(
- [ 'wikipedia', 'en' ],
- $this->mConf->siteFromDB( 'enwiki' ),
- 'siteFromDB()'
- );
- $this->assertEquals(
- [ 'wikipedia', '' ],
- $this->mConf->siteFromDB( 'wiki' ),
- 'siteFromDB() on a suffix'
- );
- $this->assertEquals(
- [ null, null ],
- $this->mConf->siteFromDB( 'wikien' ),
- 'siteFromDB() on a non-existing wiki'
- );
- $this->mConf->suffixes = [ 'wiki', '' ];
- $this->assertEquals(
- [ '', 'wikien' ],
- $this->mConf->siteFromDB( 'wikien' ),
- 'siteFromDB() on a non-existing wiki (2)'
- );
- }
- /**
- * @covers SiteConfiguration::getLocalDatabases
- */
- public function testGetLocalDatabases() {
- $this->assertEquals(
- [ 'enwiki', 'dewiki', 'frwiki' ],
- $this->mConf->getLocalDatabases(),
- 'getLocalDatabases()'
- );
- }
- /**
- * @covers SiteConfiguration::get
- */
- public function testGetConfVariables() {
- // Simple
- $this->assertEquals(
- 'enwiki',
- $this->mConf->get( 'SimpleKey', 'enwiki', 'wiki' ),
- 'get(): simple setting on an existing wiki'
- );
- $this->assertEquals(
- 'dewiki',
- $this->mConf->get( 'SimpleKey', 'dewiki', 'wiki' ),
- 'get(): simple setting on an existing wiki (2)'
- );
- $this->assertEquals(
- 'frwiki',
- $this->mConf->get( 'SimpleKey', 'frwiki', 'wiki' ),
- 'get(): simple setting on an existing wiki (3)'
- );
- $this->assertEquals(
- 'wiki',
- $this->mConf->get( 'SimpleKey', 'wiki', 'wiki' ),
- 'get(): simple setting on an suffix'
- );
- $this->assertEquals(
- 'wiki',
- $this->mConf->get( 'SimpleKey', 'eswiki', 'wiki' ),
- 'get(): simple setting on an non-existing wiki'
- );
- // Fallback
- $this->assertEquals(
- 'wiki',
- $this->mConf->get( 'Fallback', 'enwiki', 'wiki' ),
- 'get(): fallback setting on an existing wiki'
- );
- $this->assertEquals(
- 'tag',
- $this->mConf->get( 'Fallback', 'dewiki', 'wiki', [], [ 'tag' ] ),
- 'get(): fallback setting on an existing wiki (with wiki tag)'
- );
- $this->assertEquals(
- 'frwiki',
- $this->mConf->get( 'Fallback', 'frwiki', 'wiki', [], [ 'tag' ] ),
- 'get(): no fallback if wiki has its own setting (matching tag)'
- );
- $this->assertSame(
- // Potential regression test for T192855
- null,
- $this->mConf->get( 'Fallback', 'null_wiki', 'wiki', [], [ 'tag' ] ),
- 'get(): no fallback if wiki has its own setting (matching tag and uses null)'
- );
- $this->assertEquals(
- 'wiki',
- $this->mConf->get( 'Fallback', 'wiki', 'wiki' ),
- 'get(): fallback setting on an suffix'
- );
- $this->assertEquals(
- 'wiki',
- $this->mConf->get( 'Fallback', 'wiki', 'wiki', [], [ 'tag' ] ),
- 'get(): fallback setting on an suffix (with wiki tag)'
- );
- $this->assertEquals(
- 'wiki',
- $this->mConf->get( 'Fallback', 'eswiki', 'wiki' ),
- 'get(): fallback setting on an non-existing wiki'
- );
- $this->assertEquals(
- 'tag',
- $this->mConf->get( 'Fallback', 'eswiki', 'wiki', [], [ 'tag' ] ),
- 'get(): fallback setting on an non-existing wiki (with wiki tag)'
- );
- // Merging
- $common = [ 'wiki' => 'wiki', 'default' => 'default' ];
- $commonTag = [ 'tag' => 'tag', 'wiki' => 'wiki', 'default' => 'default' ];
- $this->assertEquals(
- [ 'enwiki' => 'enwiki' ] + $common,
- $this->mConf->get( 'MergeIt', 'enwiki', 'wiki' ),
- 'get(): merging setting on an existing wiki'
- );
- $this->assertEquals(
- [ 'enwiki' => 'enwiki' ] + $commonTag,
- $this->mConf->get( 'MergeIt', 'enwiki', 'wiki', [], [ 'tag' ] ),
- 'get(): merging setting on an existing wiki (with tag)'
- );
- $this->assertEquals(
- [ 'dewiki' => 'dewiki' ] + $common,
- $this->mConf->get( 'MergeIt', 'dewiki', 'wiki' ),
- 'get(): merging setting on an existing wiki (2)'
- );
- $this->assertEquals(
- [ 'dewiki' => 'dewiki' ] + $commonTag,
- $this->mConf->get( 'MergeIt', 'dewiki', 'wiki', [], [ 'tag' ] ),
- 'get(): merging setting on an existing wiki (2) (with tag)'
- );
- $this->assertEquals(
- [ 'frwiki' => 'frwiki' ] + $common,
- $this->mConf->get( 'MergeIt', 'frwiki', 'wiki' ),
- 'get(): merging setting on an existing wiki (3)'
- );
- $this->assertEquals(
- [ 'frwiki' => 'frwiki' ] + $commonTag,
- $this->mConf->get( 'MergeIt', 'frwiki', 'wiki', [], [ 'tag' ] ),
- 'get(): merging setting on an existing wiki (3) (with tag)'
- );
- $this->assertEquals(
- [ 'wiki' => 'wiki' ] + $common,
- $this->mConf->get( 'MergeIt', 'wiki', 'wiki' ),
- 'get(): merging setting on an suffix'
- );
- $this->assertEquals(
- [ 'wiki' => 'wiki' ] + $commonTag,
- $this->mConf->get( 'MergeIt', 'wiki', 'wiki', [], [ 'tag' ] ),
- 'get(): merging setting on an suffix (with tag)'
- );
- $this->assertEquals(
- $common,
- $this->mConf->get( 'MergeIt', 'eswiki', 'wiki' ),
- 'get(): merging setting on an non-existing wiki'
- );
- $this->assertEquals(
- $commonTag,
- $this->mConf->get( 'MergeIt', 'eswiki', 'wiki', [], [ 'tag' ] ),
- 'get(): merging setting on an non-existing wiki (with tag)'
- );
- }
- /**
- * @covers SiteConfiguration::siteFromDB
- */
- public function testSiteFromDbWithCallback() {
- $this->mConf->siteParamsCallback = 'SiteConfigurationTest::getSiteParamsCallback';
- $this->assertEquals(
- [ 'wiki', 'en' ],
- $this->mConf->siteFromDB( 'enwiki' ),
- 'siteFromDB() with callback'
- );
- $this->assertEquals(
- [ 'wiki', '' ],
- $this->mConf->siteFromDB( 'wiki' ),
- 'siteFromDB() with callback on a suffix'
- );
- $this->assertEquals(
- [ null, null ],
- $this->mConf->siteFromDB( 'wikien' ),
- 'siteFromDB() with callback on a non-existing wiki'
- );
- }
- /**
- * @covers SiteConfiguration::get
- */
- public function testParameterReplacement() {
- $this->mConf->siteParamsCallback = 'SiteConfigurationTest::getSiteParamsCallback';
- $this->assertEquals(
- 'en wiki enwiki',
- $this->mConf->get( 'WithParams', 'enwiki', 'wiki' ),
- 'get(): parameter replacement on an existing wiki'
- );
- $this->assertEquals(
- 'de wiki dewiki',
- $this->mConf->get( 'WithParams', 'dewiki', 'wiki' ),
- 'get(): parameter replacement on an existing wiki (2)'
- );
- $this->assertEquals(
- 'fr wiki frwiki',
- $this->mConf->get( 'WithParams', 'frwiki', 'wiki' ),
- 'get(): parameter replacement on an existing wiki (3)'
- );
- $this->assertEquals(
- ' wiki wiki',
- $this->mConf->get( 'WithParams', 'wiki', 'wiki' ),
- 'get(): parameter replacement on an suffix'
- );
- $this->assertEquals(
- 'es wiki eswiki',
- $this->mConf->get( 'WithParams', 'eswiki', 'wiki' ),
- 'get(): parameter replacement on an non-existing wiki'
- );
- }
- /**
- * @covers SiteConfiguration::getAll
- */
- public function testGetAllGlobals() {
- $this->mConf->siteParamsCallback = 'SiteConfigurationTest::getSiteParamsCallback';
- $getall = [
- 'SimpleKey' => 'enwiki',
- 'Fallback' => 'tag',
- 'WithParams' => 'en wiki enwiki',
- 'SomeGlobal' => [ 'enwiki' => 'enwiki' ] + $GLOBALS['SomeGlobal'],
- 'MergeIt' => [
- 'enwiki' => 'enwiki',
- 'tag' => 'tag',
- 'wiki' => 'wiki',
- 'default' => 'default'
- ],
- ];
- $this->assertEquals( $getall, $this->mConf->getAll( 'enwiki' ), 'getAll()' );
- $this->mConf->extractAllGlobals( 'enwiki', 'wiki' );
- $this->assertEquals(
- $getall['SimpleKey'],
- $GLOBALS['SimpleKey'],
- 'extractAllGlobals(): simple setting'
- );
- $this->assertEquals(
- $getall['Fallback'],
- $GLOBALS['Fallback'],
- 'extractAllGlobals(): fallback setting'
- );
- $this->assertEquals(
- $getall['WithParams'],
- $GLOBALS['WithParams'],
- 'extractAllGlobals(): parameter replacement'
- );
- $this->assertEquals(
- $getall['SomeGlobal'],
- $GLOBALS['SomeGlobal'],
- 'extractAllGlobals(): merging with global'
- );
- $this->assertEquals(
- $getall['MergeIt'],
- $GLOBALS['MergeIt'],
- 'extractAllGlobals(): merging setting'
- );
- }
- }
|