8000 [FrameworkBundle] Fix framework bundle lock configuration not working… · symfony/symfony@c7af2df · GitHub
[go: up one dir, main page]

Skip to content

Commit c7af2df

Browse files
HypeMCnicolas-grekas
authored andcommitted
[FrameworkBundle] Fix framework bundle lock configuration not working as expected
1 parent 287da8d commit c7af2df

File tree

2 files changed

+81
-2
lines changed

2 files changed

+81
-2
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -929,7 +929,11 @@ private function addLockSection(ArrayNodeDefinition $rootNode)
929929
->ifString()->then(function ($v) { return ['enabled' => true, 'resources' => $v]; })
930930
->end()
931931
->beforeNormalization()
932-
->ifTrue(function ($v) { return \is_array($v) && !isset($v['resources']); })
932+
->ifTrue(function ($v) { return \is_array($v) && !isset($v['enabled']); })
933+
->then(function ($v) { return $v + ['enabled' => true]; })
934+
->end()
935+
->beforeNormalization()
936+
->ifTrue(function ($v) { return \is_array($v) && !isset($v['resources']) && !isset($v['resource']); })
933937
->then(function ($v) {
934938
$e = $v['enabled'];
935939
unset($v['enabled']);
@@ -948,7 +952,19 @@ private function addLockSection(ArrayNodeDefinition $rootNode)
948952
->end()
949953
->beforeNormalization()
950954
->ifTrue(function ($v) { return \is_array($v) && array_keys($v) === range(0, \count($v) - 1); })
951-
->then(function ($v) { return ['default' => $v]; })
955+
->then(function ($v) {
956+
$resources = [];
957+
foreach ($v as $resource) {
958+
$resources = array_merge_recursive(
959+
$resources,
960+
\is_array($resource) && isset($resource['name'])
961+
? [$resource['name'] => $resource['value']]
962+
: ['default' => $resource]
963+
);
964+
}
965+
966+
return $resources;
967+
})
952968
->end()
953969
->prototype('array')
954970
->beforeNormalization()->ifString()->then(function ($v) { return [$v]; })->end()

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,69 @@ public function provideInvalidAssetConfigurationTests()
296296
yield [$createPackageConfig($config), 'You cannot use both "version" and "json_manifest_path" at the same time under "assets" packages.'];
297297
}
298298

299+
/**
300+
* @dataProvider provideValidLockConfigurationTests
301+
*/
302+
public function testValidLockConfiguration($lockConfig, $processedConfig)
303+
{
304+
$processor = new Processor();
305+
$configuration = new Configuration(true);
306+
$config = $processor->processConfiguration($configuration, [
307+
[
308+
'lock' => $lockConfig,
309+
],
310+
]);
311+
312+
$this->assertArrayHasKey('lock', $config);
313+
314+
$this->assertEquals($processedConfig, $config['lock']);
315+
}
316+
317+
public function provideValidLockConfigurationTests()
318+
{
319+
yield [null, ['enabled' => true, 'resources' => ['default' => [class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphore' : 'flock']]]];
320+
321+
yield ['flock', ['enabled' => true, 'resources' => ['default' => ['flock']]]];
322+
yield [['flock', 'semaphore'], ['enabled' => true, 'resources' => ['default' => ['flock', 'semaphore']]]];
323+
yield [['foo' => 'flock', 'bar' => 'semaphore'], ['enabled' => true, 'resources' => ['foo' => ['flock'], 'bar' => ['semaphore']]]];
324+
yield [['foo' => ['flock', 'semaphore'], 'bar' => 'semaphore'], ['enabled' => true, 'resources' => ['foo' => ['flock', 'semaphore'], 'bar' => ['semaphore']]]];
325+
yield [['default' => 'flock'], ['enabled' => true, 'resources' => ['default' => ['flock']]]];
326+
327+
yield [['enabled' => false, 'flock'], ['enabled' => false, 'resources' => ['default' => ['flock']]]];
328+
yield [['enabled' => false, ['flock', 'semaphore']], ['enabled' => false, 'resources' => ['default' => ['flock', 'semaphore']]]];
329+
yield [['enabled' => false, 'foo' => 'flock', 'bar' => 'semaphore'], ['enabled' => false, 'resources' => ['foo' => ['flock'], 'bar' => ['semaphore']]]];
330+
yield [['enabled' => false, 'foo' => ['flock', 'semaphore']], ['enabled' => false, 'resources' => ['foo' => ['flock', 'semaphore']]]];
331+
yield [['enabled' => false, 'default' => 'flock'], ['enabled' => false, 'resources' => ['default' => ['flock']]]];
332+
333+
yield [['resources' => 'flock'], ['enabled' => true, 'resources' => ['default' => ['flock']]]];
334+
yield [['resources' => ['flock', 'semaphore']], ['enabled' => true, 'resources' => ['default' => ['flock', 'semaphore']]]];
335+
yield [['resources' => ['foo' => 'flock', 'bar' => 'semaphore']], ['enabled' => true, 'resources' => ['foo' => ['flock'], 'bar' => ['semaphore']]]];
336+
yield [['resources' => ['foo' => ['flock', 'semaphore'], 'bar' => 'semaphore']], ['enabled' => true, 'resources' => ['foo' => ['flock', 'semaphore'], 'bar' => ['semaphore']]]];
337+
yield [['resources' => ['default' => 'flock']], ['enabled' => true, 'resources' => ['default' => ['flock']]]];
338+
339+
yield [['enabled' => false, 'resources' => 'flock'], ['enabled' => false, 'resources' => ['default' => ['flock']]]];
340+
yield [['enabled' => false, 'resources' => ['flock', 'semaphore']], ['enabled' => false, 'resources' => ['default' => ['flock', 'semaphore']]]];
341+
yield [['enabled' => false, 'resources' => ['foo' => 'flock', 'bar' => 'semaphore']], ['enabled' => false, 'resources' => ['foo' => ['flock'], 'bar' => ['semaphore']]]];
342+
yield [['enabled' => false, 'resources' => ['foo' => ['flock', 'semaphore'], 'bar' => 'semaphore']], ['enabled' => false, 'resources' => ['foo' => ['flock', 'semaphore'], 'bar' => ['semaphore']]]];
343+
yield [['enabled' => false, 'resources' => ['default' => 'flock']], ['enabled' => false, 'resources' => ['default' => ['flock']]]];
344+
345+
// xml
346+
347+
yield [['resource' => ['flock']], ['enabled' => true, 'resources' => ['default' => ['flock']]]];
348+
yield [['resource' => ['flock', ['name' => 'foo', 'value' => 'semaphore']]], ['enabled' => true, 'resources' => ['default' => ['flock'], 'foo' => ['semaphore']]]];
349+
yield [['resource' => [['name' => 'foo', 'value' => 'flock']]], ['enabled' => true, 'resources' => ['foo' => ['flock']]]];
350+
yield [['resource' => [['name' => 'foo', 'value' => 'flock'], ['name' => 'foo', 'value' => 'semaphore']]], ['enabled' => true, 'resources' => ['foo' => ['flock', 'semaphore']]]];
351+
yield [['resource' => [['name' => 'foo', 'value' => 'flock'], ['name' => 'bar', 'value' => 'semaphore']]], ['enabled' => true, 'resources' => ['foo' => ['flock'], 'bar' => ['semaphore']]]];
352+
yield [['resource' => [['name' => 'foo', 'value' => 'flock'], ['name' => 'foo', 'value' => 'semaphore'], ['name' => 'bar', 'value' => 'semaphore']]], ['enabled' => true, 'resources' => ['foo' => ['flock', 'semaphore'], 'bar' => ['semaphore']]]];
353+
354+
yield [['enabled' => false, 'resource' => ['flock']], ['enabled' => false, 'resources' => ['default' => ['flock']]]];
355+
yield [['enabled' => false, 'resource' => ['flock', ['name' => 'foo', 'value' => 'semaphore']]], ['enabled' => false, 'resources' => ['default' => ['flock'], 'foo' => ['semaphore']]]];
356+
yield [['enabled' => false, 'resource' => [['name' => 'foo', 'value' => 'flock']]], ['enabled' => false, 'resources' => ['foo' => ['flock']]]];
357+
yield [['enabled' => false, 'resource' => [['name' => 'foo', 'value' => 'flock'], ['name' => 'foo', 'value' => 'semaphore']]], ['enabled' => false, 'resources' => ['foo' => ['flock', 'semaphore']]]];
358+
yield [['enabled' => false, 'resource' => [['name' => 'foo', 'value' => 'flock'], ['name' => 'bar', 'value' => 'semaphore']]], ['enabled' => false, 'resources' => ['foo' => ['flock'], 'bar' => ['semaphore']]]];
359+
yield [['enabled' => false, 'resource' => [['name' => 'foo', 'value' => 'flock'], ['name' => 'foo', 'value' => 'semaphore'], ['name' => 'bar', 'value' => 'semaphore']]], ['enabled' => false, 'resources' => ['foo' => ['flock', 'semaphore'], 'bar' => ['semaphore']]]];
360+
}
361+
299362
protected static function getBundleDefaultConfig()
300363
{
301364
return [

0 commit comments

Comments
 (0)
0