1919use ApiPlatform \Core \Tests \Fixtures \TestBundle \Serializer \NameConverter \CustomConverter ;
2020use GraphQL \Type \Definition \ResolveInfo ;
2121use PHPUnit \Framework \TestCase ;
22+ use Prophecy \Argument ;
23+ use Symfony \Component \Serializer \NameConverter \AdvancedNameConverterInterface ;
2224
2325/**
2426 * @author Alan Poulain <[email protected] > @@ -36,16 +38,18 @@ protected function setUp(): void
3638 {
3739 $ this ->resourceMetadataFactoryProphecy = $ this ->prophesize (ResourceMetadataFactoryInterface::class);
3840
39- $ this ->serializerContextBuilder = new SerializerContextBuilder (
40- $ this ->resourceMetadataFactoryProphecy ->reveal (),
41- new CustomConverter ()
42- );
41+ $ this ->serializerContextBuilder = $ this ->buildSerializerContextBuilder ();
42+ }
43+
44+ private function buildSerializerContextBuilder (?AdvancedNameConverterInterface $ advancedNameConverter = null ): SerializerContextBuilder
45+ {
46+ return new SerializerContextBuilder ($ this ->resourceMetadataFactoryProphecy ->reveal (), $ advancedNameConverter ?? new CustomConverter ());
4347 }
4448
4549 /**
4650 * @dataProvider createNormalizationContextProvider
4751 */
48- public function testCreateNormalizationContext (?string $ resourceClass , string $ operationName , array $ fields , bool $ isMutation , bool $ isSubscription , bool $ noInfo , array $ expectedContext , ?string $ expectedExceptionClass = null , ?string $ expectedExceptionMessage = null ): void
52+ public function testCreateNormalizationContext (?string $ resourceClass , string $ operationName , array $ fields , bool $ isMutation , bool $ isSubscription , bool $ noInfo , array $ expectedContext , ?AdvancedNameConverterInterface $ advancedNameConverter = null , ? string $ expectedExceptionClass = null , ?string $ expectedExceptionMessage = null ): void
4953 {
5054 $ resolverContext = [
5155 'is_mutation ' => $ isMutation ,
@@ -76,13 +80,21 @@ public function testCreateNormalizationContext(?string $resourceClass, string $o
7680 $ this ->expectExceptionMessage ($ expectedExceptionMessage );
7781 }
7882
79- $ context = $ this ->serializerContextBuilder ->create ($ resourceClass , $ operationName , $ resolverContext , true );
83+ $ serializerContextBuilder = $ this ->serializerContextBuilder ;
84+ if ($ advancedNameConverter ) {
85+ $ serializerContextBuilder = $ this ->buildSerializerContextBuilder ($ advancedNameConverter );
86+ }
87+
88+ $ context = $ serializerContextBuilder ->create ($ resourceClass , $ operationName , $ resolverContext , true );
8089
8190 $ this ->assertSame ($ expectedContext , $ context );
8291 }
8392
8493 public function createNormalizationContextProvider (): array
8594 {
95+ $ advancedNameConverter = $ this ->prophesize (AdvancedNameConverterInterface::class);
96+ $ advancedNameConverter ->denormalize ('field ' , 'myResource ' , null , Argument::type ('array ' ))->willReturn ('denormalizedField ' );
97+
8698 return [
8799 'nominal ' => [
88100 $ resourceClass = 'myResource ' ,
@@ -95,13 +107,33 @@ public function createNormalizationContextProvider(): array
95107 'groups ' => ['normalization_group ' ],
96108 'resource_class ' => $ resourceClass ,
97109 'graphql_operation_name ' => $ operationName ,
110+ 'input ' => ['class ' => 'inputClass ' ],
111+ 'output ' => ['class ' => 'outputClass ' ],
98112 'attributes ' => [
99113 'id ' => 3 ,
100114 'field ' => 'foo ' ,
101115 ],
116+ ],
117+ ],
118+ 'nominal with advanced name converter ' => [
119+ $ resourceClass = 'myResource ' ,
120+ $ operationName = 'item_query ' ,
121+ ['_id ' => 3 , 'field ' => 'foo ' ],
122+ false ,
123+ false ,
124+ false ,
125+ [
126+ 'groups ' => ['normalization_group ' ],
127+ 'resource_class ' => $ resourceClass ,
128+ 'graphql_operation_name ' => $ operationName ,
102129 'input ' => ['class ' => 'inputClass ' ],
103130 'output ' => ['class ' => 'outputClass ' ],
131+ 'attributes ' => [
132+ 'id ' => 3 ,
133+ 'denormalizedField ' => 'foo ' ,
134+ ],
104135 ],
136+ $ advancedNameConverter ->reveal (),
105137 ],
106138 'nominal collection ' => [
107139 $ resourceClass = 'myResource ' ,
@@ -114,11 +146,11 @@ public function createNormalizationContextProvider(): array
114146 'groups ' => ['normalization_group ' ],
115147 'resource_class ' => $ resourceClass ,
116148 'graphql_operation_name ' => $ operationName ,
149+ 'input ' => ['class ' => 'inputClass ' ],
150+ 'output ' => ['class ' => 'outputClass ' ],
117151 'attributes ' => [
118152 'nodeField ' => 'baz ' ,
119153 ],
120- 'input ' => ['class ' => 'inputClass ' ],
121- 'output ' => ['class ' => 'outputClass ' ],
122154 ],
123155 ],
124156 'no resource class ' => [
@@ -147,12 +179,12 @@ public function createNormalizationContextProvider(): array
147179 'groups ' => ['normalization_group ' ],
148180 'resource_class ' => $ resourceClass ,
149181 'graphql_operation_name ' => $ operationName ,
182+ 'input ' => ['class ' => 'inputClass ' ],
183+ 'output ' => ['class ' => 'outputClass ' ],
150184 'attributes ' => [
151185 'id ' => 7 ,
152186 'related ' => ['field ' => 'bar ' ],
153187 ],
154- 'input ' => ['class ' => 'inputClass ' ],
155- 'output ' => ['class ' => 'outputClass ' ],
156188 ],
157189 ],
158190 'mutation without resource class ' => [
@@ -163,6 +195,7 @@ public function createNormalizationContextProvider(): array
163195 false ,
164196 false ,
165197 [],
198+ null ,
166199 \LogicException::class,
167200 'ResourceMetadata should always exist for a mutation or a subscription. ' ,
168201 ],
@@ -177,13 +210,13 @@ public function createNormalizationContextProvider(): array
177210 'groups ' => ['normalization_group ' ],
178211 'resource_class ' => $ resourceClass ,
179212 'graphql_operation_name ' => $ operationName ,
213+ 'no_resolver_data ' => true ,
214+ 'input ' => ['class ' => 'inputClass ' ],
215+ 'output ' => ['class ' => 'outputClass ' ],
180216 'attributes ' => [
181217 'id ' => 7 ,
182218 'related ' => ['field ' => 'bar ' ],
183219 ],
184- 'no_resolver_data ' => true ,
185- 'input ' => ['class ' => 'inputClass ' ],
186- 'output ' => ['class ' => 'outputClass ' ],
187220 ],
188221 ],
189222 ];
0 commit comments