wiki.techinc.nl/tests/phpunit/maintenance/GetConfigurationTest.php

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

158 lines
5.9 KiB
PHP
Raw Normal View History

<?php
namespace MediaWiki\Tests\Maintenance;
use GetConfiguration;
use MediaWiki\Json\FormatJson;
use MediaWiki\MainConfigNames;
use NullJob;
/**
* @covers \GetConfiguration
* @author Dreamy Jazz
*/
class GetConfigurationTest extends MaintenanceBaseTestCase {
protected function getMaintenanceClass() {
return GetConfiguration::class;
}
/** @dataProvider provideExecuteForFatalError */
public function testExecuteForFatalError(
$options, $expectedOutputRegex, $configName = null, $configValue = null
) {
if ( $configName !== null ) {
$this->overrideConfigValue( $configName, $configValue );
}
foreach ( $options as $name => $value ) {
$this->maintenance->setOption( $name, $value );
}
$this->expectCallToFatalError();
// ::maybeShowHelp uses ->mName which is null unless we call this.
$this->maintenance->setName( 'getConfiguration.php' );
$this->maintenance->validateParamsAndArgs();
$this->maintenance->execute();
$this->expectOutputRegex( $expectedOutputRegex );
}
public static function provideExecuteForFatalError() {
return [
'Config could not be encoded as JSON' => [
[ 'format' => 'json' ], '/Failed to serialize the requested settings/',
MainConfigNames::AutoCreateTempUser, [ 'enabled' => true, 'expiryAfterDays' => INF ]
],
'Undefined format' => [ [ 'format' => 'invalid-format' ], '/--format set to an unrecognized format/' ],
'Using both iregex and regex' => [
[ 'iregex' => 'wgAuto', 'regex' => 'wgAuto' ],
'/Can only use either --regex or --iregex/',
],
'Setting does not begin with wg' => [
[ 'settings' => 'wgAutoCreateTempUser InvalidConfig' ],
'/Variable \'InvalidConfig\' does start with \'wg\'/'
],
'Setting is undefined' => [
[ 'settings' => 'wgAutoCreateTempUser wgInvalidConfigForGetConfigurationTest' ],
'/Variable \'wgInvalidConfigForGetConfigurationTest\' is not set/'
],
'Config that is referenced by --settings has non-array and non-scalar items' => [
[ 'settings' => 'wgAutoCreateTempUser' ],
'/Variable wgAutoCreateTempUser includes non-array, non-scalar, items/',
MainConfigNames::AutoCreateTempUser, [ 'enabled' => true, 'invalid' => new NullJob( [] ) ]
],
'Config referenced by --settings is an object' => [
[ 'settings' => 'wgTestConfig' ],
'/Variable wgTestConfig includes non-array, non-scalar, items/',
'TestConfig', new NullJob( [] ),
],
];
}
/** @dataProvider provideConfigVars */
public function testExecuteForJSONFormat( $configName, $configValue ) {
$this->overrideConfigValue( $configName, $configValue );
$this->maintenance->setOption( 'format', 'json' );
$this->maintenance->setOption( 'settings', 'wg' . $configName );
$this->maintenance->validateParamsAndArgs();
$this->maintenance->execute();
$this->expectOutputString( FormatJson::encode( [ 'wg' . $configName => $configValue ] ) . "\n" );
}
public static function provideConfigVars() {
return [
'Config var set to boolean value' => [ MainConfigNames::NewUserLog, true ],
'Config var set to an integer' => [ MainConfigNames::RCMaxAge, 12345 ],
'Config var set to a string' => [ MainConfigNames::ServerName, 'test' ],
'Config var set to an array' => [
MainConfigNames::AutoCreateTempUser,
[ 'enabled' => true, 'genPattern' => '~$1' ],
],
];
}
public function testExecuteForJSONFormatWithJSONPartialOutputOnError() {
$this->overrideConfigValue(
MainConfigNames::AutoCreateTempUser, [ 'enabled' => true, 'expireAfterDays' => INF ]
);
$this->maintenance->setOption( 'format', 'json' );
$this->maintenance->setOption( 'settings', 'wgAutoCreateTempUser' );
$this->maintenance->setOption( 'json-partial-output-on-error', 1 );
$this->maintenance->validateParamsAndArgs();
$this->maintenance->execute();
$expectedJson = FormatJson::encode( [
'wgAutoCreateTempUser' => [ 'enabled' => true, 'expireAfterDays' => 0 ],
'wgGetConfigurationJsonErrorOccurred' => true,
] );
$this->expectOutputString( $expectedJson . "\n" );
}
public function testExecuteForJSONFormatWithRegexOption() {
// Create three testing configuration values which will allow testing using regex.
$this->overrideConfigValue( 'GetConfigurationTestabc1', true );
$this->overrideConfigValue( 'GetconfigurationTestdef2', false );
$this->overrideConfigValue( 'GetConfigurationTestxzy3', "test" );
$this->maintenance->setOption( 'format', 'json' );
$this->maintenance->setOption( 'iregex', 'getconfigurationtest.*\d' );
$this->maintenance->validateParamsAndArgs();
$this->maintenance->execute();
// Validate that the JSON output is as expected.
$actualJson = $this->getActualOutputForAssertion();
$actualItems = FormatJson::decode( $actualJson, true );
$this->assertArrayEquals(
[
'wgGetConfigurationTestabc1' => true,
'wgGetConfigurationTestxzy3' => "test",
'wgGetconfigurationTestdef2' => false,
],
$actualItems,
false,
true
);
}
/** @dataProvider provideConfigVars */
public function testForPHPFormat( $configName, $configValue ) {
$this->overrideConfigValue( $configName, $configValue );
$this->maintenance->setOption( 'format', 'php' );
$this->maintenance->setOption( 'settings', 'wg' . $configName );
$this->maintenance->validateParamsAndArgs();
$this->maintenance->execute();
$this->expectOutputString( serialize( [ 'wg' . $configName => $configValue ] ) . "\n" );
}
/** @dataProvider provideConfigVars */
public function testForVarDumpFormat( $configName, $configValue ) {
$this->overrideConfigValue( $configName, $configValue );
$this->maintenance->setOption( 'format', 'vardump' );
$this->maintenance->setOption( 'settings', 'wg' . $configName );
$this->maintenance->validateParamsAndArgs();
$this->maintenance->execute();
$expectedOutputString = '$wg' . $configName . ' = ';
// Get the config value in var_dump format
ob_start();
var_dump( $configValue );
$expectedOutputString .= trim( ob_get_clean() );
$this->expectOutputString( $expectedOutputString . ";\n" );
}
}