diff --git a/Command/SecretsDecryptToLocalCommand.php b/Command/SecretsDecryptToLocalCommand.php index f76e1d05a..cd8b26cf9 100644 --- a/Command/SecretsDecryptToLocalCommand.php +++ b/Command/SecretsDecryptToLocalCommand.php @@ -44,7 +44,7 @@ protected function configure(): void %command.full_name% -When the option --force is provided, secrets that already exist in the local vault are overriden. +When the --force option is provided, secrets that already exist in the local vault are overridden. %command.full_name% --force EOF diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 92c20d139..1094c14d3 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -1118,7 +1118,8 @@ private function addSerializerSection(ArrayNodeDefinition $rootNode, callable $e ->end() ->arrayNode('default_context') ->normalizeKeys(false) - ->beforeNormalization() + ->useAttributeAsKey('name') + ->validate() ->ifTrue(fn () => $this->debug && class_exists(JsonParser::class)) ->then(fn (array $v) => $v + [JsonDecode::DETAILED_ERROR_MESSAGES => true]) ->end() diff --git a/DependencyInjection/FrameworkExtension.php b/DependencyInjection/FrameworkExtension.php index fd57cc95e..1114246cc 100644 --- a/DependencyInjection/FrameworkExtension.php +++ b/DependencyInjection/FrameworkExtension.php @@ -1295,6 +1295,10 @@ private function registerAssetMapperConfiguration(array $config, ContainerBuilde { $loader->load('asset_mapper.php'); + if (!$assetEnabled) { + $container->removeDefinition('asset_mapper.asset_package'); + } + if (!$httpClientEnabled) { $container->register('asset_mapper.http_client', HttpClientInterface::class) ->addTag('container.error') diff --git a/Tests/CacheWarmer/ConfigBuilderCacheWarmerTest.php b/Tests/CacheWarmer/ConfigBuilderCacheWarmerTest.php index 294a3cd25..66cf6b8d7 100644 --- a/Tests/CacheWarmer/ConfigBuilderCacheWarmerTest.php +++ b/Tests/CacheWarmer/ConfigBuilderCacheWarmerTest.php @@ -37,7 +37,7 @@ class ConfigBuilderCacheWarmerTest extends TestCase protected function setUp(): void { - $this->varDir = sys_get_temp_dir().'/'.uniqid(); + $this->varDir = sys_get_temp_dir().'/'.uniqid('', true); $fs = new Filesystem(); $fs->mkdir($this->varDir); } diff --git a/Tests/DependencyInjection/ConfigurationTest.php b/Tests/DependencyInjection/ConfigurationTest.php index b32d8681b..086d57aea 100644 --- a/Tests/DependencyInjection/ConfigurationTest.php +++ b/Tests/DependencyInjection/ConfigurationTest.php @@ -13,6 +13,7 @@ use Doctrine\DBAL\Connection; use PHPUnit\Framework\TestCase; +use Seld\JsonLint\JsonParser; use Symfony\Bundle\FrameworkBundle\DependencyInjection\Configuration; use Symfony\Bundle\FullStack; use Symfony\Component\Cache\Adapter\DoctrineAdapter; @@ -567,6 +568,72 @@ public function testEnabledLockNeedsResources() ]); } + public function testSerializerJsonDetailedErrorMessagesEnabledWhenDefaultContextIsConfigured() + { + $processor = new Processor(); + $config = $processor->processConfiguration(new Configuration(true), [ + [ + 'http_method_override' => false, + 'handle_all_throwables' => true, + 'php_errors' => ['log' => true], + 'serializer' => [ + 'default_context' => [ + 'foo' => 'bar', + ], + ], + ], + ]); + + $this->assertSame(['foo' => 'bar', JsonDecode::DETAILED_ERROR_MESSAGES => true], $config['serializer']['default_context'] ?? []); + } + + public function testSerializerJsonDetailedErrorMessagesInDefaultContextCanBeDisabled() + { + $processor = new Processor(); + $config = $processor->processConfiguration(new Configuration(true), [ + [ + 'http_method_override' => false, + 'handle_all_throwables' => true, + 'php_errors' => ['log' => true], + 'serializer' => [ + 'default_context' => [ + 'foo' => 'bar', + JsonDecode::DETAILED_ERROR_MESSAGES => false, + ], + ], + ], + ]); + + $this->assertSame(['foo' => 'bar', JsonDecode::DETAILED_ERROR_MESSAGES => false], $config['serializer']['default_context'] ?? []); + } + + public function testSerializerJsonDetailedErrorMessagesInDefaultContextCanBeDisabledWithSeveralConfigsBeingMerged() + { + $processor = new Processor(); + $config = $processor->processConfiguration(new Configuration(true), [ + [ + 'http_method_override' => false, + 'handle_all_throwables' => true, + 'php_errors' => ['log' => true], + 'serializer' => [ + 'default_context' => [ + 'foo' => 'bar', + JsonDecode::DETAILED_ERROR_MESSAGES => false, + ], + ], + ], + [ + 'serializer' => [ + 'default_context' => [ + 'foobar' => 'baz', + ], + ], + ], + ]); + + $this->assertSame(['foo' => 'bar', JsonDecode::DETAILED_ERROR_MESSAGES => false, 'foobar' => 'baz'], $config['serializer']['default_context'] ?? []); + } + public function testScopedHttpClientsInheritRateLimiterAndRetryFailedConfiguration() { $processor = new Processor(); diff --git a/Tests/DependencyInjection/Fixtures/php/asset_mapper_without_assets.php b/Tests/DependencyInjection/Fixtures/php/asset_mapper_without_assets.php new file mode 100644 index 000000000..8a74333b1 --- /dev/null +++ b/Tests/DependencyInjection/Fixtures/php/asset_mapper_without_assets.php @@ -0,0 +1,10 @@ +loadFromExtension('framework', [ + 'annotations' => false, + 'asset_mapper' => null, + 'assets' => false, + 'handle_all_throwables' => true, + 'http_method_override' => false, + 'php_errors' => ['log' => true], +]); diff --git a/Tests/DependencyInjection/Fixtures/xml/asset_mapper_without_assets.xml b/Tests/DependencyInjection/Fixtures/xml/asset_mapper_without_assets.xml new file mode 100644 index 000000000..3976b1064 --- /dev/null +++ b/Tests/DependencyInjection/Fixtures/xml/asset_mapper_without_assets.xml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/Tests/DependencyInjection/Fixtures/yml/asset_mapper_without_assets.yml b/Tests/DependencyInjection/Fixtures/yml/asset_mapper_without_assets.yml new file mode 100644 index 000000000..51f302b66 --- /dev/null +++ b/Tests/DependencyInjection/Fixtures/yml/asset_mapper_without_assets.yml @@ -0,0 +1,8 @@ +framework: + annotations: false + asset_mapper: ~ + assets: false + handle_all_throwables: true + http_method_override: false + php_errors: + log: true diff --git a/Tests/DependencyInjection/FrameworkExtensionTestCase.php b/Tests/DependencyInjection/FrameworkExtensionTestCase.php index cb97f2a47..ef9fc0f20 100644 --- a/Tests/DependencyInjection/FrameworkExtensionTestCase.php +++ b/Tests/DependencyInjection/FrameworkExtensionTestCase.php @@ -2376,6 +2376,16 @@ public function testWebhookWithoutSerializer() ); } + public function testAssetMapperWithoutAssets() + { + $container = $this->createContainerFromFile('asset_mapper_without_assets'); + + $this->assertTrue($container->has('asset_mapper')); + $this->assertFalse($container->has('asset_mapper.asset_package')); + $this->assertFalse($container->has('assets.packages')); + $this->assertFalse($container->has('assets._default_package')); + } + protected function createContainer(array $data = []) { return new ContainerBuilder(new EnvPlaceholderParameterBag(array_merge([