Files
iTop/tests/php-unit-tests/unitary-tests/datamodels/2.x/itop-config/ConfigPlaceholdersResolverTest.php

167 lines
5.2 KiB
PHP

<?php
/**
* Copyright (C) 2010-2024 Combodo SAS
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with iTop. If not, see <http: *www.gnu.org/licenses/>
*
*/
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',
],
];
}
}