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)
|
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()
|
public function testMergeWillNotDuplicateIdenticalParameters()
|
||||||
{
|
{
|
||||||
$originalPlaceholders = array('database_host' => array('localhost'));
|
$envVariableName = 'DB_HOST';
|
||||||
$firstBag = new EnvPlaceholderParameterBag($originalPlaceholders);
|
$parameter = sprintf('env(%s)', $envVariableName);
|
||||||
|
$firstBag = new EnvPlaceholderParameterBag();
|
||||||
|
|
||||||
// initialize placeholders
|
// initialize placeholders
|
||||||
$firstBag->get('env(database_host)');
|
$firstBag->get($parameter);
|
||||||
$secondBag = clone $firstBag;
|
$secondBag = clone $firstBag;
|
||||||
|
|
||||||
$firstBag->mergeEnvPlaceholders($secondBag);
|
$firstBag->mergeEnvPlaceholders($secondBag);
|
||||||
$mergedPlaceholders = $firstBag->getEnvPlaceholders();
|
$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