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] > @@ -45,7 +47,7 @@ protected function setUp(): void
4547 /**
4648 * @dataProvider createNormalizationContextProvider
4749 */
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
50+ 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
4951 {
5052 $ resolverContext = [
5153 'is_mutation ' => $ isMutation ,
@@ -76,13 +78,21 @@ public function testCreateNormalizationContext(?string $resourceClass, string $o
7678 $ this ->expectExceptionMessage ($ expectedExceptionMessage );
7779 }
7880
79- $ context = $ this ->serializerContextBuilder ->create ($ resourceClass , $ operationName , $ resolverContext , true );
81+ $ serializerContextBuilder = $ this ->serializerContextBuilder ;
82+ if ($ advancedNameConverter ) {
83+ $ serializerContextBuilder = new SerializerContextBuilder ($ this ->resourceMetadataFactoryProphecy ->reveal (), $ advancedNameConverter );
84+ }
85+
86+ $ context = $ serializerContextBuilder ->create ($ resourceClass , $ operationName , $ resolverContext , true );
8087
8188 $ this ->assertSame ($ expectedContext , $ context );
8289 }
8390
8491 public function createNormalizationContextProvider (): array
8592 {
93+ $ advancedNameConverter = $ this ->prophesize (AdvancedNameConverterInterface::class);
94+ $ advancedNameConverter ->denormalize ('field ' , 'myResource ' , null , Argument::type ('array ' ))->willReturn ('denormalizedField ' );
95+
8696 return [
8797 'nominal ' => [
8898 $ resourceClass = 'myResource ' ,
@@ -95,13 +105,33 @@ public function createNormalizationContextProvider(): array
95105 'groups ' => ['normalization_group ' ],
96106 'resource_class ' => $ resourceClass ,
97107 'graphql_operation_name ' => $ operationName ,
108+ 'input ' => ['class ' => 'inputClass ' ],
109+ 'output ' => ['class ' => 'outputClass ' ],
98110 'attributes ' => [
99111 'id ' => 3 ,
100112 'field ' => 'foo ' ,
101113 ],
114+ ],
115+ ],
116+ 'nominal with advanced name converter ' => [
117+ $ resourceClass = 'myResource ' ,
118+ $ operationName = 'item_query ' ,
119+ ['_id ' => 3 , 'field ' => 'foo ' ],
120+ false ,
121+ false ,
122+ false ,
123+ [
124+ 'groups ' => ['normalization_group ' ],
125+ 'resource_class ' => $ resourceClass ,
126+ 'graphql_operation_name ' => $ operationName ,
102127 'input ' => ['class ' => 'inputClass ' ],
103128 'output ' => ['class ' => 'outputClass ' ],
129+ 'attributes ' => [
130+ 'id ' => 3 ,
131+ 'denormalizedField ' => 'foo ' ,
132+ ],
104133 ],
134+ $ advancedNameConverter ->reveal (),
105135 ],
106136 'nominal collection ' => [
107137 $ resourceClass = 'myResource ' ,
@@ -114,11 +144,11 @@ public function createNormalizationContextProvider(): array
114144 'groups ' => ['normalization_group ' ],
115145 'resource_class ' => $ resourceClass ,
116146 'graphql_operation_name ' => $ operationName ,
147+ 'input ' => ['class ' => 'inputClass ' ],
148+ 'output ' => ['class ' => 'outputClass ' ],
117149 'attributes ' => [
118150 'nodeField ' => 'baz ' ,
119151 ],
120- 'input ' => ['class ' => 'inputClass ' ],
121- 'output ' => ['class ' => 'outputClass ' ],
122152 ],
123153 ],
124154 'no resource class ' => [
@@ -147,12 +177,12 @@ public function createNormalizationContextProvider(): array
147177 'groups ' => ['normalization_group ' ],
148178 'resource_class ' => $ resourceClass ,
149179 'graphql_operation_name ' => $ operationName ,
180+ 'input ' => ['class ' => 'inputClass ' ],
181+ 'output ' => ['class ' => 'outputClass ' ],
150182 'attributes ' => [
151183 'id ' => 7 ,
152184 'related ' => ['field ' => 'bar ' ],
153185 ],
154- 'input ' => ['class ' => 'inputClass ' ],
155- 'output ' => ['class ' => 'outputClass ' ],
156186 ],
157187 ],
158188 'mutation without resource class ' => [
@@ -163,6 +193,7 @@ public function createNormalizationContextProvider(): array
163193 false ,
164194 false ,
165195 [],
196+ null ,
166197 \LogicException::class,
167198 'ResourceMetadata should always exist for a mutation or a subscription. ' ,
168199 ],
@@ -177,13 +208,13 @@ public function createNormalizationContextProvider(): array
177208 'groups ' => ['normalization_group ' ],
178209 'resource_class ' => $ resourceClass ,
179210 'graphql_operation_name ' => $ operationName ,
211+ 'no_resolver_data ' => true ,
212+ 'input ' => ['class ' => 'inputClass ' ],
213+ 'output ' => ['class ' => 'outputClass ' ],
180214 'attributes ' => [
181215 'id ' => 7 ,
182216 'related ' => ['field ' => 'bar ' ],
183217 ],
184- 'no_resolver_data ' => true ,
185- 'input ' => ['class ' => 'inputClass ' ],
186- 'output ' => ['class ' => 'outputClass ' ],
187218 ],
188219 ],
189220 ];
0 commit comments