Skip to content

Commit 254cbdd

Browse files
authored
fix(symfony): only set name_converter for the default serializer (#6101) (#7365)
1 parent 8edbb25 commit 254cbdd

File tree

4 files changed

+15
-68
lines changed

4 files changed

+15
-68
lines changed

src/Symfony/Bundle/ApiPlatformBundle.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public function build(ContainerBuilder $container): void
4949
$container->addCompilerPass(new ElasticsearchClientPass());
5050
$container->addCompilerPass(new GraphQlTypePass());
5151
$container->addCompilerPass(new GraphQlResolverPass());
52-
$container->addCompilerPass(new MetadataAwareNameConverterPass());
52+
$container->addCompilerPass(new MetadataAwareNameConverterPass(), PassConfig::TYPE_BEFORE_OPTIMIZATION, 100);
5353
$container->addCompilerPass(new TestClientPass());
5454
$container->addCompilerPass(new TestMercureHubPass());
5555
$container->addCompilerPass(new AuthenticatorManagerPass());

src/Symfony/Bundle/DependencyInjection/Compiler/MetadataAwareNameConverterPass.php

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use ApiPlatform\Metadata\Exception\RuntimeException;
1717
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
1818
use Symfony\Component\DependencyInjection\ContainerBuilder;
19+
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
1920
use Symfony\Component\DependencyInjection\Reference;
2021

2122
/**
@@ -31,29 +32,19 @@ final class MetadataAwareNameConverterPass implements CompilerPassInterface
3132
* {@inheritdoc}
3233
*
3334
* @throws RuntimeException
35+
* @throws InvalidArgumentException
3436
*/
3537
public function process(ContainerBuilder $container): void
3638
{
3739
if (!$container->hasDefinition('serializer.name_converter.metadata_aware')) {
3840
return;
3941
}
4042

41-
$definition = $container->getDefinition('serializer.name_converter.metadata_aware');
42-
$key = '$fallbackNameConverter';
43-
$arguments = $definition->getArguments();
44-
if (false === \array_key_exists($key, $arguments)) {
45-
$key = 1;
46-
}
47-
4843
if ($container->hasAlias('api_platform.name_converter')) {
49-
$nameConverter = new Reference((string) $container->getAlias('api_platform.name_converter'));
50-
51-
// old symfony versions
52-
if (false === \array_key_exists($key, $arguments)) {
53-
$definition->addArgument($nameConverter);
54-
} elseif (null === $definition->getArgument($key)) {
55-
$definition->setArgument($key, $nameConverter);
56-
}
44+
$nameConverter = (string) $container->getAlias('api_platform.name_converter');
45+
46+
$container->setParameter('.serializer.name_converter', $nameConverter);
47+
$container->getDefinition('serializer.name_converter.metadata_aware')->setArgument(1, new Reference($nameConverter));
5748
}
5849

5950
$container->setAlias('api_platform.name_converter', 'serializer.name_converter.metadata_aware');

tests/Symfony/Bundle/ApiPlatformBundleTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public function testBuild(): void
4747
$containerProphecy->addCompilerPass(Argument::type(ElasticsearchClientPass::class))->willReturn($containerProphecy->reveal())->shouldBeCalled();
4848
$containerProphecy->addCompilerPass(Argument::type(GraphQlTypePass::class))->willReturn($containerProphecy->reveal())->shouldBeCalled();
4949
$containerProphecy->addCompilerPass(Argument::type(GraphQlResolverPass::class))->willReturn($containerProphecy->reveal())->shouldBeCalled();
50-
$containerProphecy->addCompilerPass(Argument::type(MetadataAwareNameConverterPass::class))->willReturn($containerProphecy->reveal())->shouldBeCalled();
50+
$containerProphecy->addCompilerPass(Argument::type(MetadataAwareNameConverterPass::class), PassConfig::TYPE_BEFORE_OPTIMIZATION, 100)->willReturn($containerProphecy->reveal())->shouldBeCalled();
5151
$containerProphecy->addCompilerPass(Argument::type(TestClientPass::class))->willReturn($containerProphecy->reveal())->shouldBeCalled();
5252
$containerProphecy->addCompilerPass(Argument::type(TestMercureHubPass::class))->willReturn($containerProphecy->reveal())->shouldBeCalled();
5353
$containerProphecy->addCompilerPass(Argument::type(AuthenticatorManagerPass::class))->willReturn($containerProphecy->reveal())->shouldBeCalled();

tests/Symfony/Bundle/DependencyInjection/Compiler/MetadataAwareNameConverterPassTest.php

Lines changed: 7 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -34,33 +34,13 @@ public function testConstruct(): void
3434
$this->assertInstanceOf(CompilerPassInterface::class, new MetadataAwareNameConverterPass());
3535
}
3636

37-
public function testProcessFirstArgumentConfigured(): void
38-
{
39-
$pass = new MetadataAwareNameConverterPass();
40-
41-
$definition = $this->prophesize(Definition::class);
42-
$definition->getArguments()->willReturn([0, 1])->shouldBeCalled();
43-
$definition->getArgument(1)->willReturn(new Reference('app.name_converter'))->shouldBeCalled();
44-
45-
$containerBuilderProphecy = $this->prophesize(ContainerBuilder::class);
46-
$containerBuilderProphecy->hasAlias('api_platform.name_converter')->shouldBeCalled()->willReturn(true);
47-
$containerBuilderProphecy->getAlias('api_platform.name_converter')->shouldBeCalled()->willReturn(new Alias('api_platform.name_converter'));
48-
$containerBuilderProphecy->hasDefinition('serializer.name_converter.metadata_aware')->willReturn(true)->shouldBeCalled();
49-
$containerBuilderProphecy->getDefinition('serializer.name_converter.metadata_aware')->willReturn($definition)->shouldBeCalled();
50-
$containerBuilderProphecy->setAlias('api_platform.name_converter', 'serializer.name_converter.metadata_aware')->shouldBeCalled();
51-
52-
$pass->process($containerBuilderProphecy->reveal());
53-
}
54-
5537
public function testProcessWithNameConverter(): void
5638
{
5739
$pass = new MetadataAwareNameConverterPass();
5840

5941
$reference = new Reference('app.name_converter');
6042

6143
$definition = $this->prophesize(Definition::class);
62-
$definition->getArguments()->willReturn([0, 1])->shouldBeCalled();
63-
$definition->getArgument(1)->willReturn(null)->shouldBeCalled();
6444
$definition->setArgument(1, $reference)->shouldBeCalled()->willReturn($definition);
6545

6646
$containerBuilderProphecy = $this->prophesize(ContainerBuilder::class);
@@ -69,54 +49,30 @@ public function testProcessWithNameConverter(): void
6949
$containerBuilderProphecy->hasDefinition('serializer.name_converter.metadata_aware')->shouldBeCalled()->willReturn(true);
7050
$containerBuilderProphecy->getDefinition('serializer.name_converter.metadata_aware')->shouldBeCalled()->willReturn($definition);
7151
$containerBuilderProphecy->setAlias('api_platform.name_converter', 'serializer.name_converter.metadata_aware')->shouldBeCalled();
52+
$containerBuilderProphecy->setParameter('.serializer.name_converter', 'app.name_converter')->shouldBeCalled();
7253

7354
$pass->process($containerBuilderProphecy->reveal());
7455
}
7556

76-
public function testProcessWithoutMetadataAwareDefinition(): void
57+
public function testProcessWithoutNameConverter(): void
7758
{
7859
$pass = new MetadataAwareNameConverterPass();
7960

8061
$containerBuilderProphecy = $this->prophesize(ContainerBuilder::class);
81-
$containerBuilderProphecy->hasDefinition('serializer.name_converter.metadata_aware')->willReturn(false)->shouldBeCalled();
82-
$containerBuilderProphecy->setAlias('api_platform.name_converter', 'serializer.name_converter.metadata_aware')->shouldNotBeCalled();
83-
84-
$pass->process($containerBuilderProphecy->reveal());
85-
}
86-
87-
public function testProcessOnlyOneArg(): void
88-
{
89-
$pass = new MetadataAwareNameConverterPass();
90-
91-
$definition = $this->prophesize(Definition::class);
92-
$definition->getArguments()->willReturn([0])->shouldBeCalled();
93-
$definition->addArgument(new Reference('app.name_converter'))->willReturn($definition)->shouldBeCalled();
94-
95-
$containerBuilderProphecy = $this->prophesize(ContainerBuilder::class);
96-
$containerBuilderProphecy->hasDefinition('serializer.name_converter.metadata_aware')->willReturn(true)->shouldBeCalled();
97-
$containerBuilderProphecy->hasAlias('api_platform.name_converter')->shouldBeCalled()->willReturn(true);
98-
$containerBuilderProphecy->getAlias('api_platform.name_converter')->shouldBeCalled()->willReturn(new Alias('app.name_converter'));
62+
$containerBuilderProphecy->hasAlias('api_platform.name_converter')->willReturn(false)->shouldBeCalled();
63+
$containerBuilderProphecy->hasDefinition('serializer.name_converter.metadata_aware')->shouldBeCalled()->willReturn(true);
9964
$containerBuilderProphecy->setAlias('api_platform.name_converter', 'serializer.name_converter.metadata_aware')->shouldBeCalled();
100-
$containerBuilderProphecy->getDefinition('serializer.name_converter.metadata_aware')->shouldBeCalled()->willReturn($definition);
10165

10266
$pass->process($containerBuilderProphecy->reveal());
10367
}
10468

105-
public function testProcessWithAbstractMetadataAware(): void
69+
public function testProcessWithoutMetadataAwareDefinition(): void
10670
{
10771
$pass = new MetadataAwareNameConverterPass();
10872

109-
$definition = $this->prophesize(Definition::class);
110-
$definition->getArguments()->willReturn(['$metadataFactory' => [], '$fallbackNameConverter' => null])->shouldBeCalled();
111-
$definition->getArgument('$fallbackNameConverter')->willReturn(null)->shouldBeCalled();
112-
$definition->setArgument('$fallbackNameConverter', new Reference('app.name_converter'))->willReturn($definition)->shouldBeCalled();
113-
11473
$containerBuilderProphecy = $this->prophesize(ContainerBuilder::class);
115-
$containerBuilderProphecy->hasDefinition('serializer.name_converter.metadata_aware')->willReturn(true)->shouldBeCalled();
116-
$containerBuilderProphecy->hasAlias('api_platform.name_converter')->shouldBeCalled()->willReturn(true);
117-
$containerBuilderProphecy->getAlias('api_platform.name_converter')->shouldBeCalled()->willReturn(new Alias('app.name_converter'));
118-
$containerBuilderProphecy->setAlias('api_platform.name_converter', 'serializer.name_converter.metadata_aware')->shouldBeCalled();
119-
$containerBuilderProphecy->getDefinition('serializer.name_converter.metadata_aware')->shouldBeCalled()->willReturn($definition);
74+
$containerBuilderProphecy->hasDefinition('serializer.name_converter.metadata_aware')->willReturn(false)->shouldBeCalled();
75+
$containerBuilderProphecy->setAlias('api_platform.name_converter', 'serializer.name_converter.metadata_aware')->shouldNotBeCalled();
12076

12177
$pass->process($containerBuilderProphecy->reveal());
12278
}

0 commit comments

Comments
 (0)