wiki.techinc.nl/tests/phpunit/unit/includes/Settings/LocalSettingsLoaderTest.php
Ebrahim Byagowi 697e19e461 Add MediaWiki\Registration namespace to registration classes
Bug: T353458
Change-Id: Ifa3b6a6e0353bb4ce21a3f4456f1fc696c8d377c
2024-08-10 10:08:22 +00:00

103 lines
2.7 KiB
PHP

<?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 );
}
}