* */ namespace Combodo\iTop\Test\UnitTest\Module\iTopConfig; use Combodo\iTop\Test\UnitTest\ItopTestCase; use ConfigPlaceholdersResolver; class ConfigPlaceholdersResolverTest extends ItopTestCase { protected function setUp(): void { parent::setUp(); $this->RequireOnceItopFile('core/config.class.inc.php'); } /** * @dataProvider providerResolve */ public function testResolve($aEnv, $aServer, $sValue, $sExpected, $sExpectedExceptionClass = null) { if ($sExpectedExceptionClass) { $this->expectException($sExpectedExceptionClass); } $oConfigPlaceholdersResolver = new ConfigPlaceholdersResolver($aEnv, $aServer); $sResult = $oConfigPlaceholdersResolver->Resolve($sValue); $this->assertEquals($sExpected, $sResult); } public function providerResolve() { $stdObj = (object) ['%env(HTTP_PORT)?:8080%', '%server(toto)?:8080%', '%foo(toto)?:8080%']; return [ 'basic behaviour' => [ 'aEnv' => ['ITOP_CONFIG_PLACEHOLDERS' => 1, 'HTTP_PORT' => '443'], 'aServer' => [], 'sValue' => '%env(HTTP_PORT)%', 'sExpected' => '443', ], 'disabled if no ITOP_CONFIG_PLACEHOLDERS' => [ 'aEnv' => ['HTTP_PORT' => '443'], 'aServer' => [], 'sValue' => '%env(HTTP_PORT)%', 'sExpected' => '%env(HTTP_PORT)%', ], 'basic with default not used' => [ 'aEnv' => ['ITOP_CONFIG_PLACEHOLDERS' => 1, 'HTTP_PORT' => '443'], 'aServer' => [], 'sValue' => '%env(HTTP_PORT)?:foo%', 'sExpected' => '443', ], 'basic with default used' => [ 'aEnv' => ['ITOP_CONFIG_PLACEHOLDERS' => 1, ], 'aServer' => [], 'sValue' => '%env(HTTP_PORT)?:foo%', 'sExpected' => 'foo', ], 'basic with default used and empty' => [ 'aEnv' => ['ITOP_CONFIG_PLACEHOLDERS' => 1, ], 'aServer' => [], 'sValue' => '%env(HTTP_PORT)?:%', 'sExpected' => '', ], 'mixed with static' => [ 'aEnv' => ['ITOP_CONFIG_PLACEHOLDERS' => 1, 'HTTP_PORT' => '443'], 'aServer' => ['toto' => 'tutu'], 'sValue' => 'http://localhost:%env(HTTP_PORT)?:8080%/', 'sExpected' => 'http://localhost:443/', ], 'multiple occurrences' => [ 'aEnv' => ['ITOP_CONFIG_PLACEHOLDERS' => 1, 'HTTP_PORT' => '443'], 'aServer' => ['SERVER_NAME' => 'localhost'], 'sValue' => 'http://%server(SERVER_NAME)%:%env(HTTP_PORT)%/', 'sExpected' => 'http://localhost:443/', ], 'array as source' => [ 'aEnv' => ['ITOP_CONFIG_PLACEHOLDERS' => 1, 'HTTP_PORT' => '443'], 'aServer' => ['toto' => 'tutu'], 'sValue' => ['http://localhost:%env(HTTP_PORT)?:8080%/', '%foo(HTTP_PORT)?:8080%', '%server(toto)?:8080%'], 'sExpected' => ['http://localhost:443/', '%foo(HTTP_PORT)?:8080%', 'tutu'], ], 'invalid source' => [ 'aEnv' => ['toto' => 'tutu'], 'aServer' => ['HTTP_PORT' => '443'], 'sValue' => '%foo(HTTP_PORT)?:8080%', 'sExpected' => '%foo(HTTP_PORT)?:8080%', ], 'ignored source' => [ 'aEnv' => ['ITOP_CONFIG_PLACEHOLDERS' => 1, 'HTTP_PORT' => '443'], 'aServer' => ['toto' => 'tutu'], 'sValue' => $stdObj, 'sExpected' => $stdObj, ], 'env matching port' => [ 'aEnv' => ['ITOP_CONFIG_PLACEHOLDERS' => 1, 'HTTP_PORT' => '443'], 'aServer' => ['toto' => 'tutu'], 'sValue' => '%env(HTTP_PORT)?:8080%', 'sExpected' => '443', ], 'env no matching port with default ' => [ 'aEnv' => ['ITOP_CONFIG_PLACEHOLDERS' => 1, 'foo' => 'bar'], 'aServer' => ['toto' => 'tutu'], 'sValue' => '%env(HTTP_PORT)?:8080%', 'sExpected' => '8080', ], 'env no matching port' => [ 'aEnv' => ['ITOP_CONFIG_PLACEHOLDERS' => 1, 'foo' => 'bar'], 'aServer' => ['toto' => 'tutu'], 'sValue' => '%env(HTTP_PORT)%', 'sExpected' => null, 'sExpectedExceptionClass' => 'ConfigException', ], 'server matching port' => [ 'aEnv' => ['ITOP_CONFIG_PLACEHOLDERS' => 1, 'toto' => 'tutu'], 'aServer' => ['HTTP_PORT' => '443'], 'sValue' => '%server(HTTP_PORT)?:8080%', 'sExpected' => '443', ], 'server no matching port with default ' => [ 'aEnv' => ['ITOP_CONFIG_PLACEHOLDERS' => 1, 'toto' => 'tutu'], 'aServer' => ['foo' => 'bar'], 'sValue' => '%server(HTTP_PORT)?:8080%', 'sExpected' => '8080', ], 'server no matching port' => [ 'aEnv' => ['ITOP_CONFIG_PLACEHOLDERS' => 1, 'toto' => 'tutu'], 'aServer' => ['foo' => 'bar'], 'sValue' => '%server(HTTP_PORT)%', 'sExpected' => null, 'sExpectedExceptionClass' => 'ConfigException', ], ]; } }