Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion features/graphql/input_output.feature
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ Feature: GraphQL DTO input and output
{
"errors": [
{
"message": "Cannot query field \"id\" on type \"DummyDtoNoOutput\".",
"message": "Cannot query field \"id\" on type \"DummyDtoNoOutputItem\".",
"extensions": {
"category": "graphql"
},
Expand Down
4 changes: 2 additions & 2 deletions features/graphql/mutation.feature
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ Feature: GraphQL mutation support
And the header "Content-Type" should be equal to "application/json"
And the JSON node "data.createFoo.foo.id" should be equal to "/foos/1"
And the JSON node "data.createFoo.foo._id" should be equal to 1
And the JSON node "data.createFoo.foo.__typename" should be equal to "Foo"
And the JSON node "data.createFoo.foo.__typename" should be equal to "FooItem"
And the JSON node "data.createFoo.foo.name" should be equal to "A new one"
And the JSON node "data.createFoo.foo.bar" should be equal to "new"
And the JSON node "data.createFoo.clientMutationId" should be equal to "myId"
Expand Down Expand Up @@ -111,7 +111,7 @@ Feature: GraphQL mutation support
And the JSON node "data.createDummy.dummy.name" should be equal to "A dummy"
And the JSON node "data.createDummy.dummy.foo" should have 0 elements
And the JSON node "data.createDummy.dummy.relatedDummy.name" should be equal to "RelatedDummy #1"
And the JSON node "data.createDummy.dummy.relatedDummy.__typename" should be equal to "RelatedDummy"
And the JSON node "data.createDummy.dummy.relatedDummy.__typename" should be equal to "RelatedDummyItem"
And the JSON node "data.createDummy.clientMutationId" should be equal to "myId"

Scenario: Create an item with an iterable field
Expand Down
22 changes: 0 additions & 22 deletions features/graphql/schema.feature
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,6 @@ Feature: GraphQL schema-related features
When I run the command "api:graphql:export"
Then the command output should contain:
"""
###Dummy Friend.###
type DummyFriend implements Node {
id: ID!

###The id###
_id: Int!

###The dummy name###
name: String!
}

###Dummy Friend.###
type DummyFriendCollection implements Node {
id: ID!
Expand Down Expand Up @@ -65,17 +54,6 @@ Feature: GraphQL schema-related features
| --comment-descriptions | true |
Then the command output should contain:
"""
# Dummy Friend.
type DummyFriend implements Node {
id: ID!

# The id
_id: Int!

# The dummy name
name: String!
}

# Dummy Friend.
type DummyFriendCollection implements Node {
id: ID!
Expand Down
4 changes: 2 additions & 2 deletions src/GraphQl/Type/FieldsBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ public function getResourceObjectTypeFields(?string $resourceClass, ResourceMeta

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

foreach ($resourceMetadata->getGraphqlAttribute($queryName ?? 'query', 'filters', [], true) as $filterId) {
foreach ($resourceMetadata->getGraphqlAttribute($queryName, 'filters', [], true) as $filterId) {
if (null === $this->filterLocator || !$this->filterLocator->has($filterId)) {
continue;
}
Expand Down
6 changes: 3 additions & 3 deletions src/GraphQl/Type/TypeBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public function getResourceObjectType(?string $resourceClass, ResourceMetadata $
return $resourceObjectType;
}

$ioMetadata = $resourceMetadata->getGraphqlAttribute($mutationName ?? 'query', $input ? 'input' : 'output', null, true);
$ioMetadata = $resourceMetadata->getGraphqlAttribute($mutationName ?? $queryName, $input ? 'input' : 'output', null, true);
if (null !== $ioMetadata && \array_key_exists('class', $ioMetadata) && null !== $ioMetadata['class']) {
$resourceClass = $ioMetadata['class'];
}
Expand All @@ -97,7 +97,7 @@ public function getResourceObjectType(?string $resourceClass, ResourceMetadata $
'resolveField' => $this->defaultFieldResolver,
'fields' => function () use ($resourceClass, $resourceMetadata, $input, $mutationName, $queryName, $wrapData, $depth, $ioMetadata) {
if ($wrapData) {
$queryNormalizationContext = $resourceMetadata->getGraphqlAttribute($queryName ?? 'query', 'normalization_context', [], true);
$queryNormalizationContext = $resourceMetadata->getGraphqlAttribute($queryName ?? '', 'normalization_context', [], true);
$mutationNormalizationContext = $resourceMetadata->getGraphqlAttribute($mutationName ?? '', 'normalization_context', [], true);
// Use a new type for the wrapped object only if there is a specific normalization context for the mutation.
// If not, use the query type in order to ensure the client cache could be used.
Expand All @@ -106,7 +106,7 @@ public function getResourceObjectType(?string $resourceClass, ResourceMetadata $
return [
lcfirst($resourceMetadata->getShortName()) => $useWrappedType ?
$this->getResourceObjectType($resourceClass, $resourceMetadata, $input, $queryName, $mutationName, true, $depth) :
$this->getResourceObjectType($resourceClass, $resourceMetadata, $input, $queryName, null, true, $depth),
$this->getResourceObjectType($resourceClass, $resourceMetadata, $input, $queryName ?? 'item_query', null, true, $depth),
'clientMutationId' => GraphQLType::string(),
];
}
Expand Down
10 changes: 5 additions & 5 deletions tests/GraphQl/Resolver/Factory/CollectionResolverFactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public function testResolve(): void
{
$resourceClass = 'stdClass';
$rootClass = 'rootClass';
$operationName = 'query';
$operationName = 'collection_query';
$source = ['source'];
$args = ['args'];
$info = $this->prophesize(ResolveInfo::class)->reveal();
Expand Down Expand Up @@ -110,7 +110,7 @@ public function testResolveNullResourceClass(): void
{
$resourceClass = null;
$rootClass = 'rootClass';
$operationName = 'query';
$operationName = 'collection_query';
$source = ['source'];
$args = ['args'];
$info = $this->prophesize(ResolveInfo::class)->reveal();
Expand All @@ -122,7 +122,7 @@ public function testResolveNullRootClass(): void
{
$resourceClass = 'stdClass';
$rootClass = null;
$operationName = 'query';
$operationName = 'collection_query';
$source = ['source'];
$args = ['args'];
$info = $this->prophesize(ResolveInfo::class)->reveal();
Expand All @@ -134,7 +134,7 @@ public function testResolveBadReadStageCollection(): void
{
$resourceClass = 'stdClass';
$rootClass = 'rootClass';
$operationName = 'query';
$operationName = 'collection_query';
$source = ['source'];
$args = ['args'];
$info = $this->prophesize(ResolveInfo::class)->reveal();
Expand All @@ -153,7 +153,7 @@ public function testResolveCustom(): void
{
$resourceClass = 'stdClass';
$rootClass = 'rootClass';
$operationName = 'query';
$operationName = 'collection_query';
$source = ['source'];
$args = ['args'];
$info = $this->prophesize(ResolveInfo::class)->reveal();
Expand Down
8 changes: 4 additions & 4 deletions tests/GraphQl/Resolver/Factory/ItemResolverFactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ protected function setUp(): void
public function testResolve(?string $resourceClass, string $determinedResourceClass, $readStageItem): void
{
$rootClass = 'rootClass';
$operationName = 'query';
$operationName = 'item_query';
$source = ['source'];
$args = ['args'];
$info = $this->prophesize(ResolveInfo::class)->reveal();
Expand Down Expand Up @@ -120,7 +120,7 @@ public function testResolveBadReadStageItem(): void
{
$resourceClass = 'stdClass';
$rootClass = 'rootClass';
$operationName = 'query';
$operationName = 'item_query';
$source = ['source'];
$args = ['args'];
$info = $this->prophesize(ResolveInfo::class)->reveal();
Expand All @@ -139,7 +139,7 @@ public function testResolveNoResourceNoItem(): void
{
$resourceClass = null;
$rootClass = 'rootClass';
$operationName = 'query';
$operationName = 'item_query';
$source = ['source'];
$args = ['args'];
$info = $this->prophesize(ResolveInfo::class)->reveal();
Expand All @@ -158,7 +158,7 @@ public function testResolveBadItem(): void
{
$resourceClass = Dummy::class;
$rootClass = 'rootClass';
$operationName = 'query';
$operationName = 'item_query';
$source = ['source'];
$args = ['args'];
$info = $this->prophesize(ResolveInfo::class)->reveal();
Expand Down
4 changes: 2 additions & 2 deletions tests/GraphQl/Resolver/Stage/DeserializeStageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ protected function setUp(): void
*/
public function testApplyDisabled($objectToPopulate): void
{
$operationName = 'query';
$operationName = 'item_query';
$resourceClass = 'myResource';
$resourceMetadata = (new ResourceMetadata())->withGraphql([
$operationName => ['deserialize' => false],
Expand All @@ -74,7 +74,7 @@ public function testApplyDisabled($objectToPopulate): void
*/
public function testApply($objectToPopulate, array $denormalizationContext): void
{
$operationName = 'query';
$operationName = 'item_query';
$resourceClass = 'myResource';
$context = ['args' => ['input' => 'myInput']];
$this->resourceMetadataFactoryProphecy->create($resourceClass)->willReturn(new ResourceMetadata());
Expand Down
6 changes: 3 additions & 3 deletions tests/GraphQl/Resolver/Stage/ReadStageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ protected function setUp(): void
*/
public function testApplyDisabled(array $context, $expectedResult): void
{
$operationName = 'query';
$operationName = 'item_query';
$resourceClass = 'myResource';
$resourceMetadata = (new ResourceMetadata())->withGraphql([
$operationName => ['read' => false],
Expand Down Expand Up @@ -94,7 +94,7 @@ public function contextProvider(): array
*/
public function testApplyItem(?string $identifier, $item, bool $throwNotFound, $expectedResult): void
{
$operationName = 'query';
$operationName = 'item_query';
$resourceClass = 'myResource';
$info = $this->prophesize(ResolveInfo::class)->reveal();
$context = [
Expand Down Expand Up @@ -184,7 +184,7 @@ public function itemMutationProvider(): array
*/
public function testApplyCollection(array $args, ?string $rootClass, ?array $source, array $expectedFilters, iterable $expectedResult): void
{
$operationName = 'query';
$operationName = 'collection_query';
$resourceClass = 'myResource';
$info = $this->prophesize(ResolveInfo::class)->reveal();
$fieldName = 'subresource';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,12 @@ public function testNoSecurity(): void

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

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

public function testGranted(): void
{
$operationName = 'query';
$operationName = 'item_query';
$resourceClass = 'myResource';
$isGranted = 'not_granted';
$extraVariables = ['extra' => false];
Expand All @@ -70,15 +70,15 @@ public function testGranted(): void

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

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

/**
* @group legacy
*/
public function testGrantedLegacy(): void
{
$operationName = 'query';
$operationName = 'item_query';
$resourceClass = 'myResource';
$isGranted = 'not_granted';
$extraVariables = ['extra' => false];
Expand All @@ -89,12 +89,12 @@ public function testGrantedLegacy(): void

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

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

public function testNotGranted(): void
{
$operationName = 'query';
$operationName = 'item_query';
$resourceClass = 'myResource';
$isGranted = 'not_granted';
$extraVariables = ['extra' => false];
Expand All @@ -110,7 +110,7 @@ public function testNotGranted(): void
$this->expectException(Error::class);
$this->expectExceptionMessage('Access Denied.');

($this->securityPostDenormalizeStage)($resourceClass, 'query', [
($this->securityPostDenormalizeStage)($resourceClass, 'item_query', [
'info' => $info,
'extra_variables' => $extraVariables,
]);
Expand Down
10 changes: 5 additions & 5 deletions tests/GraphQl/Resolver/Stage/SecurityStageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,12 @@ public function testNoSecurity(): void

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

($this->securityStage)($resourceClass, 'query', []);
($this->securityStage)($resourceClass, 'item_query', []);
}

public function testGranted(): void
{
$operationName = 'query';
$operationName = 'item_query';
$resourceClass = 'myResource';
$isGranted = 'not_granted';
$extraVariables = ['extra' => false];
Expand All @@ -70,12 +70,12 @@ public function testGranted(): void

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

($this->securityStage)($resourceClass, 'query', ['extra_variables' => $extraVariables]);
($this->securityStage)($resourceClass, 'item_query', ['extra_variables' => $extraVariables]);
}

public function testNotGranted(): void
{
$operationName = 'query';
$operationName = 'item_query';
$resourceClass = 'myResource';
$isGranted = 'not_granted';
$extraVariables = ['extra' => false];
Expand All @@ -91,7 +91,7 @@ public function testNotGranted(): void
$this->expectException(Error::class);
$this->expectExceptionMessage('Access Denied.');

($this->securityStage)($resourceClass, 'query', [
($this->securityStage)($resourceClass, 'item_query', [
'info' => $info,
'extra_variables' => $extraVariables,
]);
Expand Down
10 changes: 5 additions & 5 deletions tests/GraphQl/Resolver/Stage/SerializeStageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ protected function setUp(): void
*/
public function testApplyDisabled(array $context, bool $paginationEnabled, ?array $expectedResult): void
{
$operationName = 'query';
$operationName = 'item_query';
$resourceClass = 'myResource';
$resourceMetadata = (new ResourceMetadata())->withGraphql([
$operationName => ['serialize' => false],
Expand Down Expand Up @@ -99,8 +99,8 @@ public function applyProvider(): array
];

return [
'item' => [new \stdClass(), 'query', $defaultContext + ['is_collection' => false, 'is_mutation' => false], false, ['normalized_item']],
'collection without pagination' => [[new \stdClass(), new \stdClass()], 'query', $defaultContext + ['is_collection' => true, 'is_mutation' => false], false, [['normalized_item'], ['normalized_item']]],
'item' => [new \stdClass(), 'item_query', $defaultContext + ['is_collection' => false, 'is_mutation' => false], false, ['normalized_item']],
'collection without pagination' => [[new \stdClass(), new \stdClass()], 'collection_query', $defaultContext + ['is_collection' => true, 'is_mutation' => false], false, [['normalized_item'], ['normalized_item']]],
'mutation' => [new \stdClass(), 'create', array_merge($defaultContext, ['args' => ['input' => ['clientMutationId' => 'clientMutationId']], 'is_collection' => false, 'is_mutation' => true]), false, ['shortName' => ['normalized_item'], 'clientMutationId' => 'clientMutationId']],
'delete mutation' => [new \stdClass(), 'delete', array_merge($defaultContext, ['args' => ['input' => ['id' => 4]], 'is_collection' => false, 'is_mutation' => true]), false, ['shortName' => ['id' => 4], 'clientMutationId' => null]],
];
Expand All @@ -111,7 +111,7 @@ public function applyProvider(): array
*/
public function testApplyCollectionWithPagination(iterable $collection, array $args, ?array $expectedResult, ?string $expectedExceptionClass = null, ?string $expectedExceptionMessage = null): void
{
$operationName = 'query';
$operationName = 'collection_query';
$resourceClass = 'myResource';
$context = [
'is_collection' => true,
Expand Down Expand Up @@ -152,7 +152,7 @@ public function applyCollectionWithPaginationProvider(): array

public function testApplyBadNormalizedData(): void
{
$operationName = 'query';
$operationName = 'item_query';
$resourceClass = 'myResource';
$context = ['is_collection' => false, 'is_mutation' => false, 'args' => [], 'info' => $this->prophesize(ResolveInfo::class)->reveal()];
$this->resourceMetadataFactoryProphecy->create($resourceClass)->willReturn(new ResourceMetadata());
Expand Down
6 changes: 3 additions & 3 deletions tests/GraphQl/Resolver/Stage/ValidateStageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ protected function setUp(): void

public function testApplyDisabled(): void
{
$operationName = 'query';
$operationName = 'item_query';
$resourceClass = 'myResource';
$resourceMetadata = (new ResourceMetadata())->withGraphql([
$operationName => ['validate' => false],
Expand All @@ -63,7 +63,7 @@ public function testApplyDisabled(): void

public function testApply(): void
{
$operationName = 'query';
$operationName = 'item_query';
$resourceClass = 'myResource';
$validationGroups = ['group'];
$resourceMetadata = (new ResourceMetadata())->withGraphql([
Expand All @@ -79,7 +79,7 @@ public function testApply(): void

public function testApplyNotValidated(): void
{
$operationName = 'query';
$operationName = 'item_query';
$resourceClass = 'myResource';
$validationGroups = ['group'];
$resourceMetadata = (new ResourceMetadata())->withGraphql([
Expand Down
Loading