Fix/broken merging of parameter bag env placeholders
This commit is contained in:
parent
f065095db7
commit
b53e0de8f0
@ -71,6 +71,12 @@ class EnvPlaceholderParameterBag extends ParameterBag
|
||||
*/
|
||||
public function mergeEnvPlaceholders(self $bag)
|
||||
{
|
||||
$this->envPlaceholders = array_merge_recursive($this->envPlaceholders, $bag->getEnvPlaceholders());
|
||||
if ($newPlaceholders = $bag->getEnvPlaceholders()) {
|
||||
$this->envPlaceholders += $newPlaceholders;
|
||||
|
||||
foreach ($newPlaceholders as $env => $placeholders) {
|
||||
$this->envPlaceholders[$env] += $placeholders;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26,16 +26,87 @@ class EnvPlaceholderParameterBagTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
public function testMergeWillNotDuplicateIdenticalParameters()
|
||||
{
|
||||
$originalPlaceholders = array('database_host' => array('localhost'));
|
||||
$firstBag = new EnvPlaceholderParameterBag($originalPlaceholders);
|
||||
$envVariableName = 'DB_HOST';
|
||||
$parameter = sprintf('env(%s)', $envVariableName);
|
||||
$firstBag = new EnvPlaceholderParameterBag();
|
||||
|
||||
// initialize placeholders
|
||||
$firstBag->get('env(database_host)');
|
||||
$firstBag->get($parameter);
|
||||
$secondBag = clone $firstBag;
|
||||
|
||||
$firstBag->mergeEnvPlaceholders($secondBag);
|
||||
$mergedPlaceholders = $firstBag->getEnvPlaceholders();
|
||||
|
||||
$this->assertCount(1, $mergedPlaceholders['database_host']);
|
||||
$placeholderForVariable = $mergedPlaceholders[$envVariableName];
|
||||
$placeholder = array_values($placeholderForVariable)[0];
|
||||
|
||||
$this->assertCount(1, $placeholderForVariable);
|
||||
$this->assertInternalType('string', $placeholder);
|
||||
$this->assertContains($envVariableName, $placeholder);
|
||||
}
|
||||
|
||||
public function testMergeWhereFirstBagIsEmptyWillWork()
|
||||
{
|
||||
$envVariableName = 'DB_HOST';
|
||||
$parameter = sprintf('env(%s)', $envVariableName);
|
||||
$firstBag = new EnvPlaceholderParameterBag();
|
||||
$secondBag = new EnvPlaceholderParameterBag();
|
||||
|
||||
// initialize placeholder only in second bag
|
||||
$secondBag->get($parameter);
|
||||
|
||||
$this->assertEmpty($firstBag->getEnvPlaceholders());
|
||||
|
||||
$firstBag->mergeEnvPlaceholders($secondBag);
|
||||
$mergedPlaceholders = $firstBag->getEnvPlaceholders();
|
||||
|
||||
$placeholderForVariable = $mergedPlaceholders[$envVariableName];
|
||||
$placeholder = array_values($placeholderForVariable)[0];
|
||||
|
||||
$this->assertCount(1, $placeholderForVariable);
|
||||
$this->assertInternalType('string', $placeholder);
|
||||
$this->assertContains($envVariableName, $placeholder);
|
||||
}
|
||||
|
||||
public function testMergeWherePlaceholderOnlyExistsInSecond()
|
||||
{
|
||||
$uniqueEnvName = 'DB_HOST';
|
||||
$commonEnvName = 'DB_USER';
|
||||
|
||||
$uniqueParamName = sprintf('env(%s)', $uniqueEnvName);
|
||||
$commonParamName = sprintf('env(%s)', $commonEnvName);
|
||||
|
||||
$firstBag = new EnvPlaceholderParameterBag();
|
||||
// initialize common placeholder
|
||||
$firstBag->get($commonParamName);
|
||||
$secondBag = clone $firstBag;
|
||||
|
||||
// initialize unique placeholder
|
||||
$secondBag->get($uniqueParamName);
|
||||
|
||||
$firstBag->mergeEnvPlaceholders($secondBag);
|
||||
$merged = $firstBag->getEnvPlaceholders();
|
||||
|
||||
$this->assertCount(1, $merged[$uniqueEnvName]);
|
||||
// second bag has same placeholder for commonEnvName
|
||||
$this->assertCount(1, $merged[$commonEnvName]);
|
||||
}
|
||||
|
||||
public function testMergeWithDifferentIdentifiersForPlaceholders()
|
||||
{
|
||||
$envName = 'DB_USER';
|
||||
$paramName = sprintf('env(%s)', $envName);
|
||||
|
||||
$firstBag = new EnvPlaceholderParameterBag();
|
||||
$secondBag = new EnvPlaceholderParameterBag();
|
||||
// initialize placeholders
|
||||
$firstPlaceholder = $firstBag->get($paramName);
|
||||
$secondPlaceholder = $secondBag->get($paramName);
|
||||
|
||||
$firstBag->mergeEnvPlaceholders($secondBag);
|
||||
$merged = $firstBag->getEnvPlaceholders();
|
||||
|
||||
$this->assertNotEquals($firstPlaceholder, $secondPlaceholder);
|
||||
$this->assertCount(2, $merged[$envName]);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user