SiteConfiguration: Clean up test cases
[lhc/web/wiklou.git] / tests / phpunit / includes / SiteConfigurationTest.php
1 <?php
2
3 class SiteConfigurationTest extends MediaWikiTestCase {
4
5 /**
6 * @var SiteConfiguration
7 */
8 protected $mConf;
9
10 protected function setUp() {
11 parent::setUp();
12
13 $this->mConf = new SiteConfiguration;
14
15 $this->mConf->suffixes = [ 'wikipedia' => 'wiki' ];
16 $this->mConf->wikis = [ 'enwiki', 'dewiki', 'frwiki' ];
17 $this->mConf->settings = [
18 'SimpleKey' => [
19 'wiki' => 'wiki',
20 'tag' => 'tag',
21 'enwiki' => 'enwiki',
22 'dewiki' => 'dewiki',
23 'frwiki' => 'frwiki',
24 ],
25
26 'Fallback' => [
27 'default' => 'default',
28 'wiki' => 'wiki',
29 'tag' => 'tag',
30 ],
31
32 'WithParams' => [
33 'default' => '$lang $site $wiki',
34 ],
35
36 '+SomeGlobal' => [
37 'wiki' => [
38 'wiki' => 'wiki',
39 ],
40 'tag' => [
41 'tag' => 'tag',
42 ],
43 'enwiki' => [
44 'enwiki' => 'enwiki',
45 ],
46 'dewiki' => [
47 'dewiki' => 'dewiki',
48 ],
49 'frwiki' => [
50 'frwiki' => 'frwiki',
51 ],
52 ],
53
54 'MergeIt' => [
55 '+wiki' => [
56 'wiki' => 'wiki',
57 ],
58 '+tag' => [
59 'tag' => 'tag',
60 ],
61 'default' => [
62 'default' => 'default',
63 ],
64 '+enwiki' => [
65 'enwiki' => 'enwiki',
66 ],
67 '+dewiki' => [
68 'dewiki' => 'dewiki',
69 ],
70 '+frwiki' => [
71 'frwiki' => 'frwiki',
72 ],
73 ],
74 ];
75
76 $GLOBALS['SomeGlobal'] = [ 'SomeGlobal' => 'SomeGlobal' ];
77 }
78
79 /**
80 * This function is used as a callback within the tests below
81 */
82 public static function getSiteParamsCallback( $conf, $wiki ) {
83 $site = null;
84 $lang = null;
85 foreach ( $conf->suffixes as $suffix ) {
86 if ( substr( $wiki, -strlen( $suffix ) ) == $suffix ) {
87 $site = $suffix;
88 $lang = substr( $wiki, 0, -strlen( $suffix ) );
89 break;
90 }
91 }
92
93 return [
94 'suffix' => $site,
95 'lang' => $lang,
96 'params' => [
97 'lang' => $lang,
98 'site' => $site,
99 'wiki' => $wiki,
100 ],
101 'tags' => [ 'tag' ],
102 ];
103 }
104
105 /**
106 * @covers SiteConfiguration::siteFromDB
107 */
108 public function testSiteFromDb() {
109 $this->assertEquals(
110 [ 'wikipedia', 'en' ],
111 $this->mConf->siteFromDB( 'enwiki' ),
112 'siteFromDB()'
113 );
114 $this->assertEquals(
115 [ 'wikipedia', '' ],
116 $this->mConf->siteFromDB( 'wiki' ),
117 'siteFromDB() on a suffix'
118 );
119 $this->assertEquals(
120 [ null, null ],
121 $this->mConf->siteFromDB( 'wikien' ),
122 'siteFromDB() on a non-existing wiki'
123 );
124
125 $this->mConf->suffixes = [ 'wiki', '' ];
126 $this->assertEquals(
127 [ '', 'wikien' ],
128 $this->mConf->siteFromDB( 'wikien' ),
129 'siteFromDB() on a non-existing wiki (2)'
130 );
131 }
132
133 /**
134 * @covers SiteConfiguration::getLocalDatabases
135 */
136 public function testGetLocalDatabases() {
137 $this->assertEquals(
138 [ 'enwiki', 'dewiki', 'frwiki' ],
139 $this->mConf->getLocalDatabases(),
140 'getLocalDatabases()'
141 );
142 }
143
144 /**
145 * @covers SiteConfiguration::get
146 */
147 public function testGetConfVariables() {
148 // Simple
149 $this->assertEquals(
150 'enwiki',
151 $this->mConf->get( 'SimpleKey', 'enwiki', 'wiki' ),
152 'get(): simple setting on an existing wiki'
153 );
154 $this->assertEquals(
155 'dewiki',
156 $this->mConf->get( 'SimpleKey', 'dewiki', 'wiki' ),
157 'get(): simple setting on an existing wiki (2)'
158 );
159 $this->assertEquals(
160 'frwiki',
161 $this->mConf->get( 'SimpleKey', 'frwiki', 'wiki' ),
162 'get(): simple setting on an existing wiki (3)'
163 );
164 $this->assertEquals(
165 'wiki',
166 $this->mConf->get( 'SimpleKey', 'wiki', 'wiki' ),
167 'get(): simple setting on an suffix'
168 );
169 $this->assertEquals(
170 'wiki',
171 $this->mConf->get( 'SimpleKey', 'eswiki', 'wiki' ),
172 'get(): simple setting on an non-existing wiki'
173 );
174
175 // Fallback
176 $this->assertEquals(
177 'wiki',
178 $this->mConf->get( 'Fallback', 'enwiki', 'wiki' ),
179 'get(): fallback setting on an existing wiki'
180 );
181 $this->assertEquals(
182 'tag',
183 $this->mConf->get( 'Fallback', 'dewiki', 'wiki', [], [ 'tag' ] ),
184 'get(): fallback setting on an existing wiki (with wiki tag)'
185 );
186 $this->assertEquals(
187 'wiki',
188 $this->mConf->get( 'Fallback', 'wiki', 'wiki' ),
189 'get(): fallback setting on an suffix'
190 );
191 $this->assertEquals(
192 'wiki',
193 $this->mConf->get( 'Fallback', 'wiki', 'wiki', [], [ 'tag' ] ),
194 'get(): fallback setting on an suffix (with wiki tag)'
195 );
196 $this->assertEquals(
197 'wiki',
198 $this->mConf->get( 'Fallback', 'eswiki', 'wiki' ),
199 'get(): fallback setting on an non-existing wiki'
200 );
201 $this->assertEquals(
202 'tag',
203 $this->mConf->get( 'Fallback', 'eswiki', 'wiki', [], [ 'tag' ] ),
204 'get(): fallback setting on an non-existing wiki (with wiki tag)'
205 );
206
207 // Merging
208 $common = [ 'wiki' => 'wiki', 'default' => 'default' ];
209 $commonTag = [ 'tag' => 'tag', 'wiki' => 'wiki', 'default' => 'default' ];
210 $this->assertEquals(
211 [ 'enwiki' => 'enwiki' ] + $common,
212 $this->mConf->get( 'MergeIt', 'enwiki', 'wiki' ),
213 'get(): merging setting on an existing wiki'
214 );
215 $this->assertEquals(
216 [ 'enwiki' => 'enwiki' ] + $commonTag,
217 $this->mConf->get( 'MergeIt', 'enwiki', 'wiki', [], [ 'tag' ] ),
218 'get(): merging setting on an existing wiki (with tag)'
219 );
220 $this->assertEquals(
221 [ 'dewiki' => 'dewiki' ] + $common,
222 $this->mConf->get( 'MergeIt', 'dewiki', 'wiki' ),
223 'get(): merging setting on an existing wiki (2)'
224 );
225 $this->assertEquals(
226 [ 'dewiki' => 'dewiki' ] + $commonTag,
227 $this->mConf->get( 'MergeIt', 'dewiki', 'wiki', [], [ 'tag' ] ),
228 'get(): merging setting on an existing wiki (2) (with tag)'
229 );
230 $this->assertEquals(
231 [ 'frwiki' => 'frwiki' ] + $common,
232 $this->mConf->get( 'MergeIt', 'frwiki', 'wiki' ),
233 'get(): merging setting on an existing wiki (3)'
234 );
235 $this->assertEquals(
236 [ 'frwiki' => 'frwiki' ] + $commonTag,
237 $this->mConf->get( 'MergeIt', 'frwiki', 'wiki', [], [ 'tag' ] ),
238 'get(): merging setting on an existing wiki (3) (with tag)'
239 );
240 $this->assertEquals(
241 [ 'wiki' => 'wiki' ] + $common,
242 $this->mConf->get( 'MergeIt', 'wiki', 'wiki' ),
243 'get(): merging setting on an suffix'
244 );
245 $this->assertEquals(
246 [ 'wiki' => 'wiki' ] + $commonTag,
247 $this->mConf->get( 'MergeIt', 'wiki', 'wiki', [], [ 'tag' ] ),
248 'get(): merging setting on an suffix (with tag)'
249 );
250 $this->assertEquals(
251 $common,
252 $this->mConf->get( 'MergeIt', 'eswiki', 'wiki' ),
253 'get(): merging setting on an non-existing wiki'
254 );
255 $this->assertEquals(
256 $commonTag,
257 $this->mConf->get( 'MergeIt', 'eswiki', 'wiki', [], [ 'tag' ] ),
258 'get(): merging setting on an non-existing wiki (with tag)'
259 );
260 }
261
262 /**
263 * @covers SiteConfiguration::siteFromDB
264 */
265 public function testSiteFromDbWithCallback() {
266 $this->mConf->siteParamsCallback = 'SiteConfigurationTest::getSiteParamsCallback';
267
268 $this->assertEquals(
269 [ 'wiki', 'en' ],
270 $this->mConf->siteFromDB( 'enwiki' ),
271 'siteFromDB() with callback'
272 );
273 $this->assertEquals(
274 [ 'wiki', '' ],
275 $this->mConf->siteFromDB( 'wiki' ),
276 'siteFromDB() with callback on a suffix'
277 );
278 $this->assertEquals(
279 [ null, null ],
280 $this->mConf->siteFromDB( 'wikien' ),
281 'siteFromDB() with callback on a non-existing wiki'
282 );
283 }
284
285 /**
286 * @covers SiteConfiguration::get
287 */
288 public function testParameterReplacement() {
289 $this->mConf->siteParamsCallback = 'SiteConfigurationTest::getSiteParamsCallback';
290
291 $this->assertEquals(
292 'en wiki enwiki',
293 $this->mConf->get( 'WithParams', 'enwiki', 'wiki' ),
294 'get(): parameter replacement on an existing wiki'
295 );
296 $this->assertEquals(
297 'de wiki dewiki',
298 $this->mConf->get( 'WithParams', 'dewiki', 'wiki' ),
299 'get(): parameter replacement on an existing wiki (2)'
300 );
301 $this->assertEquals(
302 'fr wiki frwiki',
303 $this->mConf->get( 'WithParams', 'frwiki', 'wiki' ),
304 'get(): parameter replacement on an existing wiki (3)'
305 );
306 $this->assertEquals(
307 ' wiki wiki',
308 $this->mConf->get( 'WithParams', 'wiki', 'wiki' ),
309 'get(): parameter replacement on an suffix'
310 );
311 $this->assertEquals(
312 'es wiki eswiki',
313 $this->mConf->get( 'WithParams', 'eswiki', 'wiki' ),
314 'get(): parameter replacement on an non-existing wiki'
315 );
316 }
317
318 /**
319 * @covers SiteConfiguration::getAll
320 */
321 public function testGetAllGlobals() {
322 $this->mConf->siteParamsCallback = 'SiteConfigurationTest::getSiteParamsCallback';
323
324 $getall = [
325 'SimpleKey' => 'enwiki',
326 'Fallback' => 'tag',
327 'WithParams' => 'en wiki enwiki',
328 'SomeGlobal' => [ 'enwiki' => 'enwiki' ] + $GLOBALS['SomeGlobal'],
329 'MergeIt' => [
330 'enwiki' => 'enwiki',
331 'tag' => 'tag',
332 'wiki' => 'wiki',
333 'default' => 'default'
334 ],
335 ];
336 $this->assertEquals( $getall, $this->mConf->getAll( 'enwiki' ), 'getAll()' );
337
338 $this->mConf->extractAllGlobals( 'enwiki', 'wiki' );
339
340 $this->assertEquals(
341 $getall['SimpleKey'],
342 $GLOBALS['SimpleKey'],
343 'extractAllGlobals(): simple setting'
344 );
345 $this->assertEquals(
346 $getall['Fallback'],
347 $GLOBALS['Fallback'],
348 'extractAllGlobals(): fallback setting'
349 );
350 $this->assertEquals(
351 $getall['WithParams'],
352 $GLOBALS['WithParams'],
353 'extractAllGlobals(): parameter replacement'
354 );
355 $this->assertEquals(
356 $getall['SomeGlobal'],
357 $GLOBALS['SomeGlobal'],
358 'extractAllGlobals(): merging with global'
359 );
360 $this->assertEquals(
361 $getall['MergeIt'],
362 $GLOBALS['MergeIt'],
363 'extractAllGlobals(): merging setting'
364 );
365 }
366 }