wiki.techinc.nl/tests/phpunit/unit/includes/Settings/WikiFarmSettingsLoaderTest.php
Umherirrender 41f6d9eee4 tests: Add missing documentation to class properties
Add doc-typehints to class properties found by the PropertyDocumentation
sniff to improve the documentation.

Once the sniff is enabled it avoids that new code is missing type
declarations. This is focused on documentation and does not change code.

Change-Id: Ifc27750207edc09e94af030d882b6f1a5369cf98
2024-09-18 17:25:42 +00:00

159 lines
4 KiB
PHP

<?php
namespace MediaWiki\Tests\Unit\Settings;
use MediaWiki\Config\HashConfig;
use MediaWiki\MainConfigNames;
use MediaWiki\Registration\ExtensionRegistry;
use MediaWiki\Settings\Config\ArrayConfigBuilder;
use MediaWiki\Settings\Config\PhpIniSink;
use MediaWiki\Settings\SettingsBuilder;
use MediaWiki\Settings\WikiFarmSettingsLoader;
use MediaWikiUnitTestCase;
use PHPUnit\Framework\MockObject\MockObject;
/**
* @covers \MediaWiki\Settings\WikiFarmSettingsLoader
*/
class WikiFarmSettingsLoaderTest extends MediaWikiUnitTestCase {
/** @var array|null */
private $originalServerVars = null;
/**
* @before
*/
public function serverVarsSetUp() {
$this->originalServerVars = $_SERVER;
}
/**
* @after
*/
public function serverVarsTearDown() {
$_SERVER = $this->originalServerVars;
}
/**
* @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
);
}
/**
* @return SettingsBuilder|MockObject
*/
private function fakeSettingsBuilder(): SettingsBuilder {
$config = [
MainConfigNames::WikiFarmSettingsDirectory => 'test',
MainConfigNames::WikiFarmSettingsExtension => 'yaml',
];
$mock = $this->createMock( SettingsBuilder::class );
$mock->method( 'getConfig' )->willReturn( new HashConfig( $config ) );
$mock->method( 'fileExists' )->willReturn( true );
return $mock;
}
public static function provideWikiFarmSettings() {
yield [
[
'WikiFarmSettingsDirectory' => __DIR__ . '/fixtures/sites',
'WikiFarmSettingsExtension' => 'yaml',
],
'alpha',
[ 'SiteName' => 'Alpha Wiki' ]
];
yield [
[
'WikiFarmSettingsDirectory' => __DIR__ . '/fixtures/sites',
'WikiFarmSettingsExtension' => 'json',
],
'beta',
[ 'SiteName' => 'Beta Wiki' ]
];
}
/**
* @param array $config
* @param string $detect
* @param array $expected
*
* @dataProvider provideWikiFarmSettings
*/
public function testLoadWikiFarmSettings( $config, $detect, $expected ) {
$settings = $this->newSettingsBuilder();
$settings->putConfigValues( $config );
$_SERVER['MW_WIKI_NAME'] = $detect;
$loader = $this->newLoader( $settings );
$loader->loadWikiFarmSettings();
$config = $settings->getConfig();
foreach ( $expected as $name => $value ) {
$this->assertSame( $value, $config->get( $name ) );
}
}
public function testDetectSettingsFileFromConstant() {
$settings = $this->fakeSettingsBuilder();
$settings->expects( $this->once() )
->method( 'loadFile' )
->with( 'test/AcmeWiki123.yaml' );
$loader = $this->newLoader( $settings, 'AcmeWiki123' );
$loader->loadWikiFarmSettings();
}
public function testDetectSettingsFileFromLegacyVar() {
$settings = $this->fakeSettingsBuilder();
$_SERVER['WIKI_NAME'] = 'test/FooBarWiki.yaml';
$this->expectPHPError(
E_USER_NOTICE,
function () use ( $settings ) {
// TODO: Assert that the file is actually loaded after the notice is triggered
$loader = $this->newLoader( $settings );
$loader->loadWikiFarmSettings();
},
'The WIKI_NAME server variable has been deprecated'
);
}
/**
* @param SettingsBuilder $settings
* @param ?string $wikiNameConstantValue
*
* @return WikiFarmSettingsLoader
*/
private function newLoader( SettingsBuilder $settings, ?string $wikiNameConstantValue = null ) {
$loader = new class( $settings, $wikiNameConstantValue ) extends WikiFarmSettingsLoader {
private $wikiNameConstantValue;
public function __construct( $settings, $wikiNameConstantValue ) {
parent::__construct( $settings );
$this->wikiNameConstantValue = $wikiNameConstantValue;
}
protected function getWikiNameConstant() {
return $this->wikiNameConstantValue;
}
};
return $loader;
}
}