From d683f069423a3ca2b89426610a4a952f85dcc25e Mon Sep 17 00:00:00 2001 From: Christian Nielsen Date: Mon, 24 Jul 2023 16:14:54 +0200 Subject: [PATCH] fix schema validation - resolve not allowed in input fields --- src/Support/Type.php | 7 +++--- tests/Unit/GraphQLTest.php | 50 ++++++++++++++++++++++++++++++-------- 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/Support/Type.php b/src/Support/Type.php index 92b2cbc7..0639c89e 100644 --- a/src/Support/Type.php +++ b/src/Support/Type.php @@ -3,10 +3,11 @@ declare(strict_types = 1); namespace Rebing\GraphQL\Support; -use GraphQL\Type\Definition\FieldDefinition; +use Illuminate\Support\Str; +use Rebing\GraphQL\Support\InputType; use GraphQL\Type\Definition\ObjectType; +use GraphQL\Type\Definition\FieldDefinition; use GraphQL\Type\Definition\Type as GraphqlType; -use Illuminate\Support\Str; use Rebing\GraphQL\Support\Contracts\TypeConvertible; /** @@ -59,7 +60,7 @@ protected function getFieldResolver(string $name, array $field): ?callable }; } - if (isset($field['alias']) && \is_string($field['alias'])) { + if (isset($field['alias']) && \is_string($field['alias']) && !($this instanceof InputType)) { $alias = $field['alias']; return function ($type) use ($alias) { diff --git a/tests/Unit/GraphQLTest.php b/tests/Unit/GraphQLTest.php index 9859ee6f..d63c17fd 100644 --- a/tests/Unit/GraphQLTest.php +++ b/tests/Unit/GraphQLTest.php @@ -4,23 +4,26 @@ namespace Rebing\GraphQL\Tests\Unit; use GraphQL\Error\Error; -use GraphQL\Type\Definition\ListOfType; +use GraphQL\Type\Schema; +use GraphQL\Type\Definition\Type; +use Rebing\GraphQL\Tests\TestCase; use GraphQL\Type\Definition\NonNull; +use GraphQL\Type\Definition\ListOfType; use GraphQL\Type\Definition\ObjectType; -use GraphQL\Type\Definition\Type; -use GraphQL\Type\Schema; -use Illuminate\Support\Facades\Validator; use Illuminate\Support\Traits\Macroable; +use Illuminate\Support\Facades\Validator; use Rebing\GraphQL\Error\ValidationError; -use Rebing\GraphQL\Exception\SchemaNotFound; use Rebing\GraphQL\Exception\TypeNotFound; use Rebing\GraphQL\Support\Facades\GraphQL; -use Rebing\GraphQL\Tests\Support\Directives\ExampleDirective; -use Rebing\GraphQL\Tests\Support\Objects\CustomExampleType; -use Rebing\GraphQL\Tests\Support\Objects\ExamplesQuery; +use Rebing\GraphQL\Exception\SchemaNotFound; use Rebing\GraphQL\Tests\Support\Objects\ExampleType; +use Rebing\GraphQL\Tests\Support\Objects\ExamplesQuery; +use Rebing\GraphQL\Tests\Support\Objects\CustomExampleType; +use Rebing\GraphQL\Tests\Support\Directives\ExampleDirective; use Rebing\GraphQL\Tests\Support\Objects\UpdateExampleMutation; -use Rebing\GraphQL\Tests\TestCase; +use Rebing\GraphQL\Tests\Unit\AliasArguments\Stubs\ExampleValidationInputObject; +use Rebing\GraphQL\Tests\Unit\AliasArguments\Stubs\ExampleType as ExampleAliasType; +use Rebing\GraphQL\Tests\Unit\AliasArguments\Stubs\ExampleNestedValidationInputObject; class GraphQLTest extends TestCase { @@ -32,6 +35,8 @@ public function testDefaultSchema(): void $this->assertGraphQLSchemaHasQuery($schema, 'examples'); $this->assertGraphQLSchemaHasMutation($schema, 'updateExample'); self::assertArrayHasKey('Example', $schema->getTypeMap()); + + $schema->assertValid(); } public function testSchemaWithName(): void @@ -40,10 +45,35 @@ public function testSchemaWithName(): void $this->assertGraphQLSchema($schema); $this->assertGraphQLSchemaHasQuery($schema, 'examplesCustom'); - $this->assertGraphQLSchemaHasMutation($schema, 'updateExampleCustom'); + $this->assertGraphQLSchemaHasMutation($schema, 'updateExampleCustom'); self::assertArrayHasKey('Example', $schema->getTypeMap()); } + /** + * @doesNotPerformAssertions + */ + public function testSchemaIsValidWithInputFieldAliases(): void + { + $schema = GraphQL::buildSchemaFromConfig([ + 'mutation' => [ + 'examplesCustom' => \Rebing\GraphQL\Tests\Unit\AliasArguments\Stubs\UpdateExampleMutation::class, + ], + 'query' => [ + 'examplesCustom' => ExamplesQuery::class, + ], + + 'types' => [ + CustomExampleType::class, + ExampleAliasType::class, + ExampleValidationInputObject::class, + ExampleNestedValidationInputObject::class, + ] + ]); + + $schema->assertValid(); + } + + public function testSchemaWithNameReferencingClass(): void { $schema = GraphQL::schema('class_based');