1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
<?php
namespace MediaWiki\Tests\Unit\Settings;
use MediaWiki\Registration\ExtensionRegistry;
use MediaWiki\Settings\Config\ArrayConfigBuilder;
use MediaWiki\Settings\Config\PhpIniSink;
use MediaWiki\Settings\LocalSettingsLoader;
use MediaWiki\Settings\SettingsBuilder;
use PHPUnit\Framework\TestCase;
/**
* @covers \MediaWiki\Settings\LocalSettingsLoader
*/
class LocalSettingsLoaderTest extends TestCase {
/**
* @param array $params
* @return SettingsBuilder
*/
private function newSettingsBuilder( $params = [] ): SettingsBuilder {
return new SettingsBuilder(
__DIR__,
$params['extensionRegistry'] ?? $this->createMock( ExtensionRegistry::class ),
$params['configBuilder'] ?? new ArrayConfigBuilder(),
$params['phpIniSink'] ?? $this->createMock( PhpIniSink::class ),
$params['cache'] ?? null
);
}
public static function provideLoadingFromFile() {
$expected = [
'SiteName' => 'TestSite',
'HttpsPort' => 443,
'Something' => 'TEST',
'StyleDirectory' => '/test/skins',
'ExtensionDirectory' => '/test/extensions',
'ForeignUploadTargets' => [ 'local', 'acme' ],
'ExtraLanguageCodes' => [ 'no' => 'nb', 'simple' => 'en' ],
'Extra' => 'extra',
];
yield 'JSON' => [
'fixtures/settings.json',
$expected
];
yield 'PHP with variables' => [
'fixtures/settings-with-variables.php',
$expected
];
}
/**
* @dataProvider provideLoadingFromFile
*
* @param string $file
* @param array $expected
*/
public function testLoadingFromFile( $file, $expected ) {
$settings = $this->newSettingsBuilder();
$settings->loadFile( 'fixtures/default-schema.json' );
$loader = new LocalSettingsLoader( $settings, __DIR__ );
$loader->loadLocalSettingsFile( $file );
$config = $settings->getConfig();
$this->assertFalse( $config->has( 'SillyStuff' ) );
foreach ( $expected as $key => $value ) {
$actual = $config->get( $key );
if ( is_array( $value ) ) {
ksort( $value );
ksort( $actual );
}
$this->assertSame( $value, $actual, 'Setting: ' . $key );
}
}
public function testLoadingTheSamePhpFileTwice() {
$settings = $this->newSettingsBuilder();
$settings->loadFile( 'fixtures/default-schema.json' );
$loader = new LocalSettingsLoader( $settings, __DIR__ );
$loader->loadLocalSettingsFile( 'fixtures/settings-with-variables.php' );
$config1 = $settings->getConfig();
// Now, do it again.
$settings = $this->newSettingsBuilder();
$settings->loadFile( 'fixtures/default-schema.json' );
$loader = new LocalSettingsLoader( $settings, __DIR__ );
$loader->loadLocalSettingsFile( 'fixtures/settings-with-variables.php' );
$config2 = $settings->getConfig();
// This would fail if require_once was used inside.
$this->assertEquals( $config1, $config2 );
}
}
|