Skip to content

Commit 0de0b75

Browse files
authored
Merge pull request #2709 from soyuka/fix-metadataawarenameconverter
Use the metadata aware name converter when available fix #2677
2 parents d806c72 + a4c59e8 commit 0de0b75

File tree

8 files changed

+107
-94
lines changed

8 files changed

+107
-94
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"symfony/http-kernel": "^3.4 || ^4.0",
2222
"symfony/property-access": "^3.4 || ^4.0",
2323
"symfony/property-info": "^3.4 || ^4.0",
24-
"symfony/serializer": "^4.2",
24+
"symfony/serializer": "^4.2.6",
2525
"symfony/web-link": "^4.1",
2626
"willdurand/negotiation": "^2.0.3"
2727
},

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

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

2021
/**
2122
* Injects the metadata aware name converter if available.
@@ -33,14 +34,20 @@ final class MetadataAwareNameConverterPass implements CompilerPassInterface
3334
*/
3435
public function process(ContainerBuilder $container)
3536
{
36-
if ($container->hasAlias('api_platform.name_converter') || !$container->hasDefinition('serializer.name_converter.metadata_aware')) {
37+
if (!$container->hasDefinition('serializer.name_converter.metadata_aware')) {
3738
return;
3839
}
3940

4041
$definition = $container->getDefinition('serializer.name_converter.metadata_aware');
41-
42-
if (1 >= \count($definition->getArguments()) || null === $definition->getArgument(1)) {
43-
return;
42+
$num = \count($definition->getArguments());
43+
44+
if ($container->hasAlias('api_platform.name_converter')) {
45+
$nameConverter = new Reference((string) $container->getAlias('api_platform.name_converter'));
46+
if (1 === $num) {
47+
$definition->addArgument($nameConverter);
48+
} elseif (1 < $num && null === $definition->getArgument(1)) {
49+
$definition->setArgument(1, $nameConverter);
50+
}
4451
}
4552

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

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

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
use ApiPlatform\Core\Bridge\Symfony\Bundle\DependencyInjection\Compiler\MetadataAwareNameConverterPass;
1717
use PHPUnit\Framework\TestCase;
18+
use Prophecy\Argument;
19+
use Symfony\Component\DependencyInjection\Alias;
1820
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
1921
use Symfony\Component\DependencyInjection\ContainerBuilder;
2022
use Symfony\Component\DependencyInjection\Definition;
@@ -30,18 +32,17 @@ public function testConstruct()
3032
$this->assertInstanceOf(CompilerPassInterface::class, new MetadataAwareNameConverterPass());
3133
}
3234

33-
public function testProcess()
35+
public function testProcessFirstArgumentConfigured()
3436
{
3537
$pass = new MetadataAwareNameConverterPass();
3638

37-
$arguments = [new Reference('serializer.mapping.class_metadata_factory'), new Reference('app.name_converter')];
38-
3939
$definition = $this->prophesize(Definition::class);
40-
$definition->getArguments()->willReturn($arguments)->shouldBeCalled();
41-
$definition->getArgument(1)->willReturn($arguments[1])->shouldBeCalled();
40+
$definition->getArguments()->willReturn([0, 1])->shouldBeCalled();
41+
$definition->getArgument(1)->willReturn(new Reference('app.name_converter'))->shouldBeCalled();
4242

4343
$containerBuilderProphecy = $this->prophesize(ContainerBuilder::class);
44-
$containerBuilderProphecy->hasAlias('api_platform.name_converter')->willReturn(false)->shouldBeCalled();
44+
$containerBuilderProphecy->hasAlias('api_platform.name_converter')->shouldBeCalled()->willReturn(true);
45+
$containerBuilderProphecy->getAlias('api_platform.name_converter')->shouldBeCalled()->willReturn(Argument::any());
4546
$containerBuilderProphecy->hasDefinition('serializer.name_converter.metadata_aware')->willReturn(true)->shouldBeCalled();
4647
$containerBuilderProphecy->getDefinition('serializer.name_converter.metadata_aware')->willReturn($definition)->shouldBeCalled();
4748
$containerBuilderProphecy->setAlias('api_platform.name_converter', 'serializer.name_converter.metadata_aware')->shouldBeCalled();
@@ -53,11 +54,19 @@ public function testProcessWithNameConverter()
5354
{
5455
$pass = new MetadataAwareNameConverterPass();
5556

57+
$reference = new Reference('app.name_converter');
58+
59+
$definition = $this->prophesize(Definition::class);
60+
$definition->getArguments()->willReturn([0, 1])->shouldBeCalled();
61+
$definition->getArgument(1)->willReturn(null)->shouldBeCalled();
62+
$definition->setArgument(1, $reference)->shouldBeCalled();
63+
5664
$containerBuilderProphecy = $this->prophesize(ContainerBuilder::class);
5765
$containerBuilderProphecy->hasAlias('api_platform.name_converter')->willReturn(true)->shouldBeCalled();
58-
$containerBuilderProphecy->hasDefinition('serializer.name_converter.metadata_aware')->shouldNotBeCalled();
59-
$containerBuilderProphecy->getDefinition('serializer.name_converter.metadata_aware')->shouldNotBeCalled();
60-
$containerBuilderProphecy->setAlias('api_platform.name_converter', 'serializer.name_converter.metadata_aware')->shouldNotBeCalled();
66+
$containerBuilderProphecy->getAlias('api_platform.name_converter')->shouldBeCalled()->willReturn(new Alias('app.name_converter'));
67+
$containerBuilderProphecy->hasDefinition('serializer.name_converter.metadata_aware')->shouldBeCalled()->willReturn(true);
68+
$containerBuilderProphecy->getDefinition('serializer.name_converter.metadata_aware')->shouldBeCalled()->willReturn($definition);
69+
$containerBuilderProphecy->setAlias('api_platform.name_converter', 'serializer.name_converter.metadata_aware')->shouldBeCalled();
6170

6271
$pass->process($containerBuilderProphecy->reveal());
6372
}
@@ -67,28 +76,26 @@ public function testProcessWithoutMetadataAwareDefinition()
6776
$pass = new MetadataAwareNameConverterPass();
6877

6978
$containerBuilderProphecy = $this->prophesize(ContainerBuilder::class);
70-
$containerBuilderProphecy->hasAlias('api_platform.name_converter')->willReturn(false)->shouldBeCalled();
7179
$containerBuilderProphecy->hasDefinition('serializer.name_converter.metadata_aware')->willReturn(false)->shouldBeCalled();
7280
$containerBuilderProphecy->setAlias('api_platform.name_converter', 'serializer.name_converter.metadata_aware')->shouldNotBeCalled();
7381

7482
$pass->process($containerBuilderProphecy->reveal());
7583
}
7684

77-
public function testProcessWithMetadataAwareDefinitionSecondArgumentNull()
85+
public function testProcessOnlyOneArg()
7886
{
7987
$pass = new MetadataAwareNameConverterPass();
8088

81-
$arguments = [new Reference('serializer.mapping.class_metadata_factory'), null];
82-
8389
$definition = $this->prophesize(Definition::class);
84-
$definition->getArguments()->willReturn($arguments)->shouldBeCalled();
85-
$definition->getArgument(1)->willReturn($arguments[1])->shouldBeCalled();
90+
$definition->getArguments()->willReturn([0])->shouldBeCalled();
91+
$definition->addArgument(new Reference('app.name_converter'))->shouldBeCalled();
8692

8793
$containerBuilderProphecy = $this->prophesize(ContainerBuilder::class);
88-
$containerBuilderProphecy->hasAlias('api_platform.name_converter')->willReturn(false)->shouldBeCalled();
8994
$containerBuilderProphecy->hasDefinition('serializer.name_converter.metadata_aware')->willReturn(true)->shouldBeCalled();
90-
$containerBuilderProphecy->getDefinition('serializer.name_converter.metadata_aware')->willReturn($definition)->shouldBeCalled();
91-
$containerBuilderProphecy->setAlias('api_platform.name_converter', 'serializer.name_converter.metadata_aware')->shouldNotBeCalled();
95+
$containerBuilderProphecy->hasAlias('api_platform.name_converter')->shouldBeCalled()->willReturn(true);
96+
$containerBuilderProphecy->getAlias('api_platform.name_converter')->shouldBeCalled()->willReturn(new Alias('app.name_converter'));
97+
$containerBuilderProphecy->setAlias('api_platform.name_converter', 'serializer.name_converter.metadata_aware')->shouldBeCalled();
98+
$containerBuilderProphecy->getDefinition('serializer.name_converter.metadata_aware')->shouldBeCalled()->willReturn($definition);
9299

93100
$pass->process($containerBuilderProphecy->reveal());
94101
}

tests/Fixtures/Elasticsearch/Fixtures/tweet.json

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
"id": "116b83f8-6c32-48d8-8e28-c5c247532d3f",
66
"gender": "male",
77
"age": 31,
8-
"first_name": "Kilian",
9-
"last_name": "Jornet"
8+
"firstName": "Kilian",
9+
"lastName": "Jornet"
1010
},
1111
"date": "2017-01-01 01:01:01",
1212
"message": "The north summit, Store Vengetind Thanks for t... These Top 10 Women of a fk... Francois is the field which."
@@ -17,8 +17,8 @@
1717
"id": "116b83f8-6c32-48d8-8e28-c5c247532d3f",
1818
"gender": "male",
1919
"age": 31,
20-
"first_name": "Kilian",
21-
"last_name": "Jornet"
20+
"firstName": "Kilian",
21+
"lastName": "Jornet"
2222
},
2323
"date": "2017-02-02 02:02:02",
2424
"message": "Great day in any endur... During the Himalayas were very talented skimo racer junior podiums, top 10."
@@ -29,8 +29,8 @@
2929
"id": "116b83f8-6c32-48d8-8e28-c5c247532d3f",
3030
"gender": "male",
3131
"age": 31,
32-
"first_name": "Kilian",
33-
"last_name": "Jornet"
32+
"firstName": "Kilian",
33+
"lastName": "Jornet"
3434
},
3535
"date": "2017-03-03 03:03:03",
3636
"message": "During the path and his Summits Of My Life project. Next Wednesday, Kilian Jornet..."
@@ -41,8 +41,8 @@
4141
"id": "8a8c5855-83fb-48a8-8fc9-f5c59151b2cd",
4242
"gender": "male",
4343
"age": 32,
44-
"first_name": "Francois",
45-
"last_name": "D'Haene"
44+
"firstName": "Francois",
45+
"lastName": "D'Haene"
4646
},
4747
"date": "2017-04-04 04:04:04",
4848
"message": "Quand on pourra laisser les ca... Plus que les jaime le => plus entre copains en parle depuis un sejour?"
@@ -53,8 +53,8 @@
5353
"id": "8a8c5855-83fb-48a8-8fc9-f5c59151b2cd",
5454
"gender": "male",
5555
"age": 32,
56-
"first_name": "Francois",
57-
"last_name": "D'Haene"
56+
"firstName": "Francois",
57+
"lastName": "D'Haene"
5858
},
5959
"date": "2017-05-05 05:05:05",
6060
"message": "Vous avez passe pour les nuages aujourdhui mais surtout diffe... Cetait sûrement le poids limite va pas!"
@@ -65,8 +65,8 @@
6565
"id": "f18eb7ab-6985-4e05-afd4-13a638c929d4",
6666
"gender": "male",
6767
"age": 30,
68-
"first_name": "Xavier",
69-
"last_name": "Thevenard"
68+
"firstName": "Xavier",
69+
"lastName": "Thevenard"
7070
},
7171
"date": "2017-06-06 06:06:06",
7272
"message": "L'entrainement sur les skis a commence depuis longtemps. Les apres-midi biathlon c'est le top!"
@@ -77,8 +77,8 @@
7777
"id": "c81d5151-0d28-4b06-baeb-150bd2b2bbf8",
7878
"gender": "male",
7979
"age": 35,
80-
"first_name": "Anton",
81-
"last_name": "Krupicka"
80+
"firstName": "Anton",
81+
"lastName": "Krupicka"
8282
},
8383
"date": "2017-07-07 07:07:07",
8484
"message": "I want to officially join Punks & Poets crew with the wildly distorted death fuzz of Mt. Saint Vrain?"
@@ -89,8 +89,8 @@
8989
"id": "c81d5151-0d28-4b06-baeb-150bd2b2bbf8",
9090
"gender": "male",
9191
"age": 35,
92-
"first_name": "Anton",
93-
"last_name": "Krupicka"
92+
"firstName": "Anton",
93+
"lastName": "Krupicka"
9494
},
9595
"date": "2017-08-08 08:08:08",
9696
"message": "Whoever curates the Marathon yesterday. Truly inspiring stuff. The new is straight. Such a couple!"
@@ -101,8 +101,8 @@
101101
"id": "15fce6f1-18fd-4ef6-acab-7e6a3333ec7f",
102102
"gender": "male",
103103
"age": 28,
104-
"first_name": "Jim",
105-
"last_name": "Walmsley"
104+
"firstName": "Jim",
105+
"lastName": "Walmsley"
106106
},
107107
"date": "2017-09-09 09:09:09",
108108
"message": "Thanks! Fun day with Next up one of our 2018 cover: One look into what races we'll be running that they!"
@@ -113,8 +113,8 @@
113113
"id": "fbf60054-004f-4d21-a178-cb364d1ef875",
114114
"gender": "male",
115115
"age": 30,
116-
"first_name": "Zach",
117-
"last_name": "Miller"
116+
"firstName": "Zach",
117+
"lastName": "Miller"
118118
},
119119
"date": "2017-10-10 10:10:10",
120120
"message": "Way to go for me I think it was great holiday season yourself!! I'm still working on the awesome as I."
@@ -125,8 +125,8 @@
125125
"id": "fbf60054-004f-4d21-a178-cb364d1ef875",
126126
"gender": "male",
127127
"age": 30,
128-
"first_name": "Zach",
129-
"last_name": "Miller"
128+
"firstName": "Zach",
129+
"lastName": "Miller"
130130
},
131131
"date": "2017-11-11 11:11:11",
132132
"message": "DES!!!!!!! For that in LA airport skills: chugging water, one-handed bathroom maneuvers, and the!"
@@ -137,8 +137,8 @@
137137
"id": "fbf60054-004f-4d21-a178-cb364d1ef875",
138138
"gender": "male",
139139
"age": 30,
140-
"first_name": "Zach",
141-
"last_name": "Miller"
140+
"firstName": "Zach",
141+
"lastName": "Miller"
142142
},
143143
"date": "2017-12-12 12:12:12",
144144
"message": "Thanks! Thanks Senseman! Good luck at again! Open air sleeps! 669 now. Message me. You bet Kyle! PT: Try."
@@ -149,8 +149,8 @@
149149
"id": "fa7d4578-6692-47ec-9346-a8ab25ca613c",
150150
"gender": "female",
151151
"age": 42,
152-
"first_name": "Caroline",
153-
"last_name": "Chaverot"
152+
"firstName": "Caroline",
153+
"lastName": "Chaverot"
154154
},
155155
"date": "2018-01-01 13:13:13",
156156
"message": "Prior to not run in paradise ! I should have listened to ! What a little more of hesitation, I?"
@@ -161,8 +161,8 @@
161161
"id": "fa7d4578-6692-47ec-9346-a8ab25ca613c",
162162
"gender": "female",
163163
"age": 42,
164-
"first_name": "Caroline",
165-
"last_name": "Chaverot"
164+
"firstName": "Caroline",
165+
"lastName": "Chaverot"
166166
},
167167
"date": "2018-02-02 14:14:14",
168168
"message": "Good job girls ! Chacun de publier un outil innovant repertoriant des prochains championnats du!"
@@ -173,8 +173,8 @@
173173
"id": "89d4ae3d-73bc-4382-b01c-adf038f893c2",
174174
"gender": "female",
175175
"age": 42,
176-
"first_name": "Nuria",
177-
"last_name": "Picas"
176+
"firstName": "Nuria",
177+
"lastName": "Picas"
178178
},
179179
"date": "2018-03-03 15:15:15",
180180
"message": "Avui fa que este año no iba a la izquierda... I have never felt so proud of Catalonia as on 1OCT. Perque?"
@@ -185,8 +185,8 @@
185185
"id": "89d4ae3d-73bc-4382-b01c-adf038f893c2",
186186
"gender": "female",
187187
"age": 42,
188-
"first_name": "Nuria",
189-
"last_name": "Picas"
188+
"firstName": "Nuria",
189+
"lastName": "Picas"
190190
},
191191
"date": "2018-04-04 16:16:16",
192192
"message": "Lactitud, la teva una cita, esteu tots i una camara com aquesta? Atents al proper sopar tertulia amb els?"
@@ -197,8 +197,8 @@
197197
"id": "cf875c95-41ab-48df-af66-38c74db18f72",
198198
"gender": "female",
199199
"age": 32,
200-
"first_name": "Emelie",
201-
"last_name": "Forsberg"
200+
"firstName": "Emelie",
201+
"lastName": "Forsberg"
202202
},
203203
"date": "2018-05-05 17:17:17",
204204
"message": "These time here! Ah such a thousand words then video Lets tune in! Join and enjoying winter baby! Just?"
@@ -209,8 +209,8 @@
209209
"id": "cf875c95-41ab-48df-af66-38c74db18f72",
210210
"gender": "female",
211211
"age": 32,
212-
"first_name": "Emelie",
213-
"last_name": "Forsberg"
212+
"firstName": "Emelie",
213+
"lastName": "Forsberg"
214214
},
215215
"date": "2018-06-06 18:18:18",
216216
"message": "This was chose... Tomorrow! Lets tune in! Skilde inte mycket till segern. Hursomhelst starkt lopp av Emelie."
@@ -221,8 +221,8 @@
221221
"id": "6a457188-d1ba-45e3-8509-81e5c66a5297",
222222
"gender": "female",
223223
"age": 37,
224-
"first_name": "Anna",
225-
"last_name": "Frost"
224+
"firstName": "Anna",
225+
"lastName": "Frost"
226226
},
227227
"date": "2018-07-07 19:19:19",
228228
"message": "In case you do! A humble beginning to traverse... Im so now until you can't tell how strong she run at!"
@@ -233,8 +233,8 @@
233233
"id": "6a457188-d1ba-45e3-8509-81e5c66a5297",
234234
"gender": "female",
235235
"age": 37,
236-
"first_name": "Anna",
237-
"last_name": "Frost"
236+
"firstName": "Anna",
237+
"lastName": "Frost"
238238
},
239239
"date": "2018-08-08 20:20:20",
240240
"message": "Way to go to see friends out to crush it but one of since I was a speed record... The race of FREE trip for."
@@ -245,8 +245,8 @@
245245
"id": "ff0e82ee-e8c9-40ec-82f3-122ef148d533",
246246
"gender": "female",
247247
"age": 29,
248-
"first_name": "Ruth",
249-
"last_name": "Croft"
248+
"firstName": "Ruth",
249+
"lastName": "Croft"
250250
},
251251
"date": "2018-09-09 21:21:21",
252252
"message": "An elcheapo alternative to Arrowtown with and you get the Routeburn debut & some of many lineups with."

0 commit comments

Comments
 (0)