File: LocalSettingsLoaderTest.php

package info (click to toggle)
mediawiki 1%3A1.43.3%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 417,464 kB
  • sloc: php: 1,062,949; javascript: 664,290; sql: 9,714; python: 5,458; xml: 3,489; sh: 1,131; makefile: 64
file content (103 lines) | stat: -rw-r--r-- 2,791 bytes parent folder | download
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 );
	}

}