3b7226245fcd28ba443a166da9fdc941f0405f2e
3 class SiteConfigurationTest
extends MediaWikiTestCase
{
6 * @var SiteConfiguration
10 protected function setUp() {
13 $this->mConf
= new SiteConfiguration
;
15 $this->mConf
->suffixes
= [ 'wikipedia' => 'wiki' ];
16 $this->mConf
->wikis
= [ 'enwiki', 'dewiki', 'frwiki' ];
17 $this->mConf
->settings
= [
27 'default' => 'default',
35 'default' => '$lang $site $wiki',
64 'default' => 'default',
78 $GLOBALS['SomeGlobal'] = [ 'SomeGlobal' => 'SomeGlobal' ];
82 * This function is used as a callback within the tests below
84 public static function getSiteParamsCallback( $conf, $wiki ) {
87 foreach ( $conf->suffixes
as $suffix ) {
88 if ( substr( $wiki, -strlen( $suffix ) ) == $suffix ) {
90 $lang = substr( $wiki, 0, -strlen( $suffix ) );
108 * @covers SiteConfiguration::siteFromDB
110 public function testSiteFromDb() {
112 [ 'wikipedia', 'en' ],
113 $this->mConf
->siteFromDB( 'enwiki' ),
118 $this->mConf
->siteFromDB( 'wiki' ),
119 'siteFromDB() on a suffix'
123 $this->mConf
->siteFromDB( 'wikien' ),
124 'siteFromDB() on a non-existing wiki'
127 $this->mConf
->suffixes
= [ 'wiki', '' ];
130 $this->mConf
->siteFromDB( 'wikien' ),
131 'siteFromDB() on a non-existing wiki (2)'
136 * @covers SiteConfiguration::getLocalDatabases
138 public function testGetLocalDatabases() {
140 [ 'enwiki', 'dewiki', 'frwiki' ],
141 $this->mConf
->getLocalDatabases(),
142 'getLocalDatabases()'
147 * @covers SiteConfiguration::get
149 public function testGetConfVariables() {
153 $this->mConf
->get( 'SimpleKey', 'enwiki', 'wiki' ),
154 'get(): simple setting on an existing wiki'
158 $this->mConf
->get( 'SimpleKey', 'dewiki', 'wiki' ),
159 'get(): simple setting on an existing wiki (2)'
163 $this->mConf
->get( 'SimpleKey', 'frwiki', 'wiki' ),
164 'get(): simple setting on an existing wiki (3)'
168 $this->mConf
->get( 'SimpleKey', 'wiki', 'wiki' ),
169 'get(): simple setting on an suffix'
173 $this->mConf
->get( 'SimpleKey', 'eswiki', 'wiki' ),
174 'get(): simple setting on an non-existing wiki'
180 $this->mConf
->get( 'Fallback', 'enwiki', 'wiki' ),
181 'get(): fallback setting on an existing wiki'
185 $this->mConf
->get( 'Fallback', 'dewiki', 'wiki', [], [ 'tag' ] ),
186 'get(): fallback setting on an existing wiki (with wiki tag)'
190 $this->mConf
->get( 'Fallback', 'frwiki', 'wiki', [], [ 'tag' ] ),
191 'get(): no fallback if wiki has its own setting (matching tag)'
194 // Potential regression test for T192855
196 $this->mConf
->get( 'Fallback', 'null_wiki', 'wiki', [], [ 'tag' ] ),
197 'get(): no fallback if wiki has its own setting (matching tag and uses null)'
201 $this->mConf
->get( 'Fallback', 'wiki', 'wiki' ),
202 'get(): fallback setting on an suffix'
206 $this->mConf
->get( 'Fallback', 'wiki', 'wiki', [], [ 'tag' ] ),
207 'get(): fallback setting on an suffix (with wiki tag)'
211 $this->mConf
->get( 'Fallback', 'eswiki', 'wiki' ),
212 'get(): fallback setting on an non-existing wiki'
216 $this->mConf
->get( 'Fallback', 'eswiki', 'wiki', [], [ 'tag' ] ),
217 'get(): fallback setting on an non-existing wiki (with wiki tag)'
221 $common = [ 'wiki' => 'wiki', 'default' => 'default' ];
222 $commonTag = [ 'tag' => 'tag', 'wiki' => 'wiki', 'default' => 'default' ];
224 [ 'enwiki' => 'enwiki' ] +
$common,
225 $this->mConf
->get( 'MergeIt', 'enwiki', 'wiki' ),
226 'get(): merging setting on an existing wiki'
229 [ 'enwiki' => 'enwiki' ] +
$commonTag,
230 $this->mConf
->get( 'MergeIt', 'enwiki', 'wiki', [], [ 'tag' ] ),
231 'get(): merging setting on an existing wiki (with tag)'
234 [ 'dewiki' => 'dewiki' ] +
$common,
235 $this->mConf
->get( 'MergeIt', 'dewiki', 'wiki' ),
236 'get(): merging setting on an existing wiki (2)'
239 [ 'dewiki' => 'dewiki' ] +
$commonTag,
240 $this->mConf
->get( 'MergeIt', 'dewiki', 'wiki', [], [ 'tag' ] ),
241 'get(): merging setting on an existing wiki (2) (with tag)'
244 [ 'frwiki' => 'frwiki' ] +
$common,
245 $this->mConf
->get( 'MergeIt', 'frwiki', 'wiki' ),
246 'get(): merging setting on an existing wiki (3)'
249 [ 'frwiki' => 'frwiki' ] +
$commonTag,
250 $this->mConf
->get( 'MergeIt', 'frwiki', 'wiki', [], [ 'tag' ] ),
251 'get(): merging setting on an existing wiki (3) (with tag)'
254 [ 'wiki' => 'wiki' ] +
$common,
255 $this->mConf
->get( 'MergeIt', 'wiki', 'wiki' ),
256 'get(): merging setting on an suffix'
259 [ 'wiki' => 'wiki' ] +
$commonTag,
260 $this->mConf
->get( 'MergeIt', 'wiki', 'wiki', [], [ 'tag' ] ),
261 'get(): merging setting on an suffix (with tag)'
265 $this->mConf
->get( 'MergeIt', 'eswiki', 'wiki' ),
266 'get(): merging setting on an non-existing wiki'
270 $this->mConf
->get( 'MergeIt', 'eswiki', 'wiki', [], [ 'tag' ] ),
271 'get(): merging setting on an non-existing wiki (with tag)'
276 * @covers SiteConfiguration::siteFromDB
278 public function testSiteFromDbWithCallback() {
279 $this->mConf
->siteParamsCallback
= 'SiteConfigurationTest::getSiteParamsCallback';
283 $this->mConf
->siteFromDB( 'enwiki' ),
284 'siteFromDB() with callback'
288 $this->mConf
->siteFromDB( 'wiki' ),
289 'siteFromDB() with callback on a suffix'
293 $this->mConf
->siteFromDB( 'wikien' ),
294 'siteFromDB() with callback on a non-existing wiki'
299 * @covers SiteConfiguration::get
301 public function testParameterReplacement() {
302 $this->mConf
->siteParamsCallback
= 'SiteConfigurationTest::getSiteParamsCallback';
306 $this->mConf
->get( 'WithParams', 'enwiki', 'wiki' ),
307 'get(): parameter replacement on an existing wiki'
311 $this->mConf
->get( 'WithParams', 'dewiki', 'wiki' ),
312 'get(): parameter replacement on an existing wiki (2)'
316 $this->mConf
->get( 'WithParams', 'frwiki', 'wiki' ),
317 'get(): parameter replacement on an existing wiki (3)'
321 $this->mConf
->get( 'WithParams', 'wiki', 'wiki' ),
322 'get(): parameter replacement on an suffix'
326 $this->mConf
->get( 'WithParams', 'eswiki', 'wiki' ),
327 'get(): parameter replacement on an non-existing wiki'
332 * @covers SiteConfiguration::getAll
334 public function testGetAllGlobals() {
335 $this->mConf
->siteParamsCallback
= 'SiteConfigurationTest::getSiteParamsCallback';
338 'SimpleKey' => 'enwiki',
340 'WithParams' => 'en wiki enwiki',
341 'SomeGlobal' => [ 'enwiki' => 'enwiki' ] +
$GLOBALS['SomeGlobal'],
343 'enwiki' => 'enwiki',
346 'default' => 'default'
349 $this->assertEquals( $getall, $this->mConf
->getAll( 'enwiki' ), 'getAll()' );
351 $this->mConf
->extractAllGlobals( 'enwiki', 'wiki' );
354 $getall['SimpleKey'],
355 $GLOBALS['SimpleKey'],
356 'extractAllGlobals(): simple setting'
360 $GLOBALS['Fallback'],
361 'extractAllGlobals(): fallback setting'
364 $getall['WithParams'],
365 $GLOBALS['WithParams'],
366 'extractAllGlobals(): parameter replacement'
369 $getall['SomeGlobal'],
370 $GLOBALS['SomeGlobal'],
371 'extractAllGlobals(): merging with global'
376 'extractAllGlobals(): merging setting'