Skip to content

Commit 8bd9120

Browse files
authored
Fix some issue with the separation of query (#3053)
1 parent f8678d4 commit 8bd9120

17 files changed

+66
-88
lines changed

features/graphql/input_output.feature

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ Feature: GraphQL DTO input and output
107107
{
108108
"errors": [
109109
{
110-
"message": "Cannot query field \"id\" on type \"DummyDtoNoOutput\".",
110+
"message": "Cannot query field \"id\" on type \"DummyDtoNoOutputItem\".",
111111
"extensions": {
112112
"category": "graphql"
113113
},

features/graphql/mutation.feature

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ Feature: GraphQL mutation support
6060
And the header "Content-Type" should be equal to "application/json"
6161
And the JSON node "data.createFoo.foo.id" should be equal to "/foos/1"
6262
And the JSON node "data.createFoo.foo._id" should be equal to 1
63-
And the JSON node "data.createFoo.foo.__typename" should be equal to "Foo"
63+
And the JSON node "data.createFoo.foo.__typename" should be equal to "FooItem"
6464
And the JSON node "data.createFoo.foo.name" should be equal to "A new one"
6565
And the JSON node "data.createFoo.foo.bar" should be equal to "new"
6666
And the JSON node "data.createFoo.clientMutationId" should be equal to "myId"
@@ -111,7 +111,7 @@ Feature: GraphQL mutation support
111111
And the JSON node "data.createDummy.dummy.name" should be equal to "A dummy"
112112
And the JSON node "data.createDummy.dummy.foo" should have 0 elements
113113
And the JSON node "data.createDummy.dummy.relatedDummy.name" should be equal to "RelatedDummy #1"
114-
And the JSON node "data.createDummy.dummy.relatedDummy.__typename" should be equal to "RelatedDummy"
114+
And the JSON node "data.createDummy.dummy.relatedDummy.__typename" should be equal to "RelatedDummyItem"
115115
And the JSON node "data.createDummy.clientMutationId" should be equal to "myId"
116116

117117
Scenario: Create an item with an iterable field

features/graphql/schema.feature

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,6 @@ Feature: GraphQL schema-related features
55
When I run the command "api:graphql:export"
66
Then the command output should contain:
77
"""
8-
###Dummy Friend.###
9-
type DummyFriend implements Node {
10-
id: ID!
11-
12-
###The id###
13-
_id: Int!
14-
15-
###The dummy name###
16-
name: String!
17-
}
18-
198
###Dummy Friend.###
209
type DummyFriendCollection implements Node {
2110
id: ID!
@@ -65,17 +54,6 @@ Feature: GraphQL schema-related features
6554
| --comment-descriptions | true |
6655
Then the command output should contain:
6756
"""
68-
# Dummy Friend.
69-
type DummyFriend implements Node {
70-
id: ID!
71-
72-
# The id
73-
_id: Int!
74-
75-
# The dummy name
76-
name: String!
77-
}
78-
7957
# Dummy Friend.
8058
type DummyFriendCollection implements Node {
8159
id: ID!

src/GraphQl/Type/FieldsBuilder.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ public function getResourceObjectTypeFields(?string $resourceClass, ResourceMeta
179179

180180
if (null !== $resourceClass) {
181181
foreach ($this->propertyNameCollectionFactory->create($resourceClass) as $property) {
182-
$propertyMetadata = $this->propertyMetadataFactory->create($resourceClass, $property, ['graphql_operation_name' => $mutationName ?? $queryName ?? 'item_query']);
182+
$propertyMetadata = $this->propertyMetadataFactory->create($resourceClass, $property, ['graphql_operation_name' => $mutationName ?? $queryName]);
183183
if (
184184
null === ($propertyType = $propertyMetadata->getType())
185185
|| (!$input && false === $propertyMetadata->isReadable())
@@ -299,7 +299,7 @@ private function getFilterArgs(array $args, ?string $resourceClass, ?ResourceMet
299299
return $args;
300300
}
301301

302-
foreach ($resourceMetadata->getGraphqlAttribute($queryName ?? 'query', 'filters', [], true) as $filterId) {
302+
foreach ($resourceMetadata->getGraphqlAttribute($queryName, 'filters', [], true) as $filterId) {
303303
if (null === $this->filterLocator || !$this->filterLocator->has($filterId)) {
304304
continue;
305305
}

src/GraphQl/Type/TypeBuilder.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public function getResourceObjectType(?string $resourceClass, ResourceMetadata $
8484
return $resourceObjectType;
8585
}
8686

87-
$ioMetadata = $resourceMetadata->getGraphqlAttribute($mutationName ?? 'query', $input ? 'input' : 'output', null, true);
87+
$ioMetadata = $resourceMetadata->getGraphqlAttribute($mutationName ?? $queryName, $input ? 'input' : 'output', null, true);
8888
if (null !== $ioMetadata && \array_key_exists('class', $ioMetadata) && null !== $ioMetadata['class']) {
8989
$resourceClass = $ioMetadata['class'];
9090
}
@@ -97,7 +97,7 @@ public function getResourceObjectType(?string $resourceClass, ResourceMetadata $
9797
'resolveField' => $this->defaultFieldResolver,
9898
'fields' => function () use ($resourceClass, $resourceMetadata, $input, $mutationName, $queryName, $wrapData, $depth, $ioMetadata) {
9999
if ($wrapData) {
100-
$queryNormalizationContext = $resourceMetadata->getGraphqlAttribute($queryName ?? 'query', 'normalization_context', [], true);
100+
$queryNormalizationContext = $resourceMetadata->getGraphqlAttribute($queryName ?? '', 'normalization_context', [], true);
101101
$mutationNormalizationContext = $resourceMetadata->getGraphqlAttribute($mutationName ?? '', 'normalization_context', [], true);
102102
// Use a new type for the wrapped object only if there is a specific normalization context for the mutation.
103103
// If not, use the query type in order to ensure the client cache could be used.
@@ -106,7 +106,7 @@ public function getResourceObjectType(?string $resourceClass, ResourceMetadata $
106106
return [
107107
lcfirst($resourceMetadata->getShortName()) => $useWrappedType ?
108108
$this->getResourceObjectType($resourceClass, $resourceMetadata, $input, $queryName, $mutationName, true, $depth) :
109-
$this->getResourceObjectType($resourceClass, $resourceMetadata, $input, $queryName, null, true, $depth),
109+
$this->getResourceObjectType($resourceClass, $resourceMetadata, $input, $queryName ?? 'item_query', null, true, $depth),
110110
'clientMutationId' => GraphQLType::string(),
111111
];
112112
}

tests/GraphQl/Resolver/Factory/CollectionResolverFactoryTest.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public function testResolve(): void
7070
{
7171
$resourceClass = 'stdClass';
7272
$rootClass = 'rootClass';
73-
$operationName = 'query';
73+
$operationName = 'collection_query';
7474
$source = ['source'];
7575
$args = ['args'];
7676
$info = $this->prophesize(ResolveInfo::class)->reveal();
@@ -110,7 +110,7 @@ public function testResolveNullResourceClass(): void
110110
{
111111
$resourceClass = null;
112112
$rootClass = 'rootClass';
113-
$operationName = 'query';
113+
$operationName = 'collection_query';
114114
$source = ['source'];
115115
$args = ['args'];
116116
$info = $this->prophesize(ResolveInfo::class)->reveal();
@@ -122,7 +122,7 @@ public function testResolveNullRootClass(): void
122122
{
123123
$resourceClass = 'stdClass';
124124
$rootClass = null;
125-
$operationName = 'query';
125+
$operationName = 'collection_query';
126126
$source = ['source'];
127127
$args = ['args'];
128128
$info = $this->prophesize(ResolveInfo::class)->reveal();
@@ -134,7 +134,7 @@ public function testResolveBadReadStageCollection(): void
134134
{
135135
$resourceClass = 'stdClass';
136136
$rootClass = 'rootClass';
137-
$operationName = 'query';
137+
$operationName = 'collection_query';
138138
$source = ['source'];
139139
$args = ['args'];
140140
$info = $this->prophesize(ResolveInfo::class)->reveal();
@@ -153,7 +153,7 @@ public function testResolveCustom(): void
153153
{
154154
$resourceClass = 'stdClass';
155155
$rootClass = 'rootClass';
156-
$operationName = 'query';
156+
$operationName = 'collection_query';
157157
$source = ['source'];
158158
$args = ['args'];
159159
$info = $this->prophesize(ResolveInfo::class)->reveal();

tests/GraphQl/Resolver/Factory/ItemResolverFactoryTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ protected function setUp(): void
7070
public function testResolve(?string $resourceClass, string $determinedResourceClass, $readStageItem): void
7171
{
7272
$rootClass = 'rootClass';
73-
$operationName = 'query';
73+
$operationName = 'item_query';
7474
$source = ['source'];
7575
$args = ['args'];
7676
$info = $this->prophesize(ResolveInfo::class)->reveal();
@@ -120,7 +120,7 @@ public function testResolveBadReadStageItem(): void
120120
{
121121
$resourceClass = 'stdClass';
122122
$rootClass = 'rootClass';
123-
$operationName = 'query';
123+
$operationName = 'item_query';
124124
$source = ['source'];
125125
$args = ['args'];
126126
$info = $this->prophesize(ResolveInfo::class)->reveal();
@@ -139,7 +139,7 @@ public function testResolveNoResourceNoItem(): void
139139
{
140140
$resourceClass = null;
141141
$rootClass = 'rootClass';
142-
$operationName = 'query';
142+
$operationName = 'item_query';
143143
$source = ['source'];
144144
$args = ['args'];
145145
$info = $this->prophesize(ResolveInfo::class)->reveal();
@@ -158,7 +158,7 @@ public function testResolveBadItem(): void
158158
{
159159
$resourceClass = Dummy::class;
160160
$rootClass = 'rootClass';
161-
$operationName = 'query';
161+
$operationName = 'item_query';
162162
$source = ['source'];
163163
$args = ['args'];
164164
$info = $this->prophesize(ResolveInfo::class)->reveal();

tests/GraphQl/Resolver/Stage/DeserializeStageTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ protected function setUp(): void
5555
*/
5656
public function testApplyDisabled($objectToPopulate): void
5757
{
58-
$operationName = 'query';
58+
$operationName = 'item_query';
5959
$resourceClass = 'myResource';
6060
$resourceMetadata = (new ResourceMetadata())->withGraphql([
6161
$operationName => ['deserialize' => false],
@@ -74,7 +74,7 @@ public function testApplyDisabled($objectToPopulate): void
7474
*/
7575
public function testApply($objectToPopulate, array $denormalizationContext): void
7676
{
77-
$operationName = 'query';
77+
$operationName = 'item_query';
7878
$resourceClass = 'myResource';
7979
$context = ['args' => ['input' => 'myInput']];
8080
$this->resourceMetadataFactoryProphecy->create($resourceClass)->willReturn(new ResourceMetadata());

tests/GraphQl/Resolver/Stage/ReadStageTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ protected function setUp(): void
6666
*/
6767
public function testApplyDisabled(array $context, $expectedResult): void
6868
{
69-
$operationName = 'query';
69+
$operationName = 'item_query';
7070
$resourceClass = 'myResource';
7171
$resourceMetadata = (new ResourceMetadata())->withGraphql([
7272
$operationName => ['read' => false],
@@ -94,7 +94,7 @@ public function contextProvider(): array
9494
*/
9595
public function testApplyItem(?string $identifier, $item, bool $throwNotFound, $expectedResult): void
9696
{
97-
$operationName = 'query';
97+
$operationName = 'item_query';
9898
$resourceClass = 'myResource';
9999
$info = $this->prophesize(ResolveInfo::class)->reveal();
100100
$context = [
@@ -184,7 +184,7 @@ public function itemMutationProvider(): array
184184
*/
185185
public function testApplyCollection(array $args, ?string $rootClass, ?array $source, array $expectedFilters, iterable $expectedResult): void
186186
{
187-
$operationName = 'query';
187+
$operationName = 'collection_query';
188188
$resourceClass = 'myResource';
189189
$info = $this->prophesize(ResolveInfo::class)->reveal();
190190
$fieldName = 'subresource';

tests/GraphQl/Resolver/Stage/SecurityPostDenormalizeStageTest.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ public function testNoSecurity(): void
5454

5555
$this->resourceAccessCheckerProphecy->isGranted(Argument::cetera())->shouldNotBeCalled();
5656

57-
($this->securityPostDenormalizeStage)($resourceClass, 'query', []);
57+
($this->securityPostDenormalizeStage)($resourceClass, 'item_query', []);
5858
}
5959

6060
public function testGranted(): void
6161
{
62-
$operationName = 'query';
62+
$operationName = 'item_query';
6363
$resourceClass = 'myResource';
6464
$isGranted = 'not_granted';
6565
$extraVariables = ['extra' => false];
@@ -70,15 +70,15 @@ public function testGranted(): void
7070

7171
$this->resourceAccessCheckerProphecy->isGranted($resourceClass, $isGranted, $extraVariables)->shouldBeCalled()->willReturn(true);
7272

73-
($this->securityPostDenormalizeStage)($resourceClass, 'query', ['extra_variables' => $extraVariables]);
73+
($this->securityPostDenormalizeStage)($resourceClass, 'item_query', ['extra_variables' => $extraVariables]);
7474
}
7575

7676
/**
7777
* @group legacy
7878
*/
7979
public function testGrantedLegacy(): void
8080
{
81-
$operationName = 'query';
81+
$operationName = 'item_query';
8282
$resourceClass = 'myResource';
8383
$isGranted = 'not_granted';
8484
$extraVariables = ['extra' => false];
@@ -89,12 +89,12 @@ public function testGrantedLegacy(): void
8989

9090
$this->resourceAccessCheckerProphecy->isGranted($resourceClass, $isGranted, $extraVariables)->shouldBeCalled()->willReturn(true);
9191

92-
($this->securityPostDenormalizeStage)($resourceClass, 'query', ['extra_variables' => $extraVariables]);
92+
($this->securityPostDenormalizeStage)($resourceClass, 'item_query', ['extra_variables' => $extraVariables]);
9393
}
9494

9595
public function testNotGranted(): void
9696
{
97-
$operationName = 'query';
97+
$operationName = 'item_query';
9898
$resourceClass = 'myResource';
9999
$isGranted = 'not_granted';
100100
$extraVariables = ['extra' => false];
@@ -110,7 +110,7 @@ public function testNotGranted(): void
110110
$this->expectException(Error::class);
111111
$this->expectExceptionMessage('Access Denied.');
112112

113-
($this->securityPostDenormalizeStage)($resourceClass, 'query', [
113+
($this->securityPostDenormalizeStage)($resourceClass, 'item_query', [
114114
'info' => $info,
115115
'extra_variables' => $extraVariables,
116116
]);

0 commit comments

Comments
 (0)