From 0a79be8409d5d573adb5e89bcfe0d0ad18431901 Mon Sep 17 00:00:00 2001 From: vladar Date: Wed, 19 Oct 2016 01:35:18 +0700 Subject: [PATCH] Updated introspection query and related tests for recent changes --- src/Type/Introspection.php | 88 +++++++++++++++++++++++-- tests/Type/IntrospectionTest.php | 41 ++---------- tests/Validator/QueryComplexityTest.php | 2 +- tests/Validator/QueryDepthTest.php | 2 +- 4 files changed, 87 insertions(+), 46 deletions(-) diff --git a/src/Type/Introspection.php b/src/Type/Introspection.php index c8e2ffa..68b225d 100644 --- a/src/Type/Introspection.php +++ b/src/Type/Introspection.php @@ -17,6 +17,7 @@ use GraphQL\Type\Definition\ScalarType; use GraphQL\Type\Definition\Type; use GraphQL\Type\Definition\UnionType; use GraphQL\Type\Definition\WrappingType; +use GraphQL\Utils; use GraphQL\Utils\AST; class TypeKind { @@ -111,6 +112,22 @@ class Introspection ofType { kind name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + } + } + } + } } } } @@ -127,7 +144,6 @@ EOD; } directives { name - locations args { ...InputValue @@ -139,10 +155,8 @@ EOD; fragment FullType on __Type { kind name - fields(includeDeprecated: true) { name - args { ...InputValue } @@ -160,7 +174,6 @@ EOD; } enumValues(includeDeprecated: true) { name - isDeprecated deprecationReason } @@ -171,7 +184,6 @@ EOD; fragment InputValue on __InputValue { name - type { ...TypeRef } defaultValue } @@ -188,6 +200,22 @@ EOD; ofType { kind name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + } + } + } + } } } } @@ -346,6 +374,51 @@ EOD; 'value' => Directive::$directiveLocations['INLINE_FRAGMENT'], 'description' => 'Location adjacent to an inline fragment.' ], + 'SCHEMA' => [ + 'value' => Directive::$directiveLocations['SCHEMA'], + 'description' => 'Location adjacent to a schema definition.' + ], + 'SCALAR' => [ + 'value' => Directive::$directiveLocations['SCALAR'], + 'description' => 'Location adjacent to a scalar definition.' + ], + 'OBJECT' => [ + 'value' => Directive::$directiveLocations['OBJECT'], + 'description' => 'Location adjacent to an object type definition.' + ], + 'FIELD_DEFINITION' => [ + 'value' => Directive::$directiveLocations['FIELD_DEFINITION'], + 'description' => 'Location adjacent to a field definition.' + ], + 'ARGUMENT_DEFINITION' => [ + 'value' => Directive::$directiveLocations['ARGUMENT_DEFINITION'], + 'description' => 'Location adjacent to an argument definition.' + ], + 'INTERFACE' => [ + 'value' => Directive::$directiveLocations['INTERFACE'], + 'description' => 'Location adjacent to an interface definition.' + ], + 'UNION' => [ + 'value' => Directive::$directiveLocations['UNION'], + 'description' => 'Location adjacent to a union definition.' + ], + 'ENUM' => [ + 'value' => Directive::$directiveLocations['ENUM'], + 'description' => 'Location adjacent to an enum definition.' + ], + 'ENUM_VALUE' => [ + 'value' => Directive::$directiveLocations['ENUM_VALUE'], + 'description' => 'Location adjacent to an enum value definition.' + ], + 'INPUT_OBJECT' => [ + 'value' => Directive::$directiveLocations['INPUT_OBJECT'], + 'description' => 'Location adjacent to an input object type definition.' + ], + 'INPUT_FIELD_DEFINITION' => [ + 'value' => Directive::$directiveLocations['INPUT_FIELD_DEFINITION'], + 'description' => 'Location adjacent to an input object field definition.' + ] + ] ]); } @@ -390,7 +463,7 @@ EOD; case $type instanceof UnionType: return TypeKind::UNION; default: - throw new \Exception("Unknown kind of type: " . print_r($type, true)); + throw new \Exception("Unknown kind of type: " . Utils::printSafe($type)); } } ], @@ -469,7 +542,8 @@ EOD; return $type->getWrappedType(); } return null; - }] + } + ] ]; } ]); diff --git a/tests/Type/IntrospectionTest.php b/tests/Type/IntrospectionTest.php index 0822a77..8e73ae0 100644 --- a/tests/Type/IntrospectionTest.php +++ b/tests/Type/IntrospectionTest.php @@ -81,7 +81,7 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase 'ofType' => array ( 'kind' => 'OBJECT', - 'name' => '__Type', + 'name' => '__Type' ), ), ), @@ -103,7 +103,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'OBJECT', 'name' => '__Type', - 'ofType' => NULL, ), ), 'isDeprecated' => false, @@ -119,7 +118,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'OBJECT', 'name' => '__Type', - 'ofType' => NULL, ), 'isDeprecated' => false, 'deprecationReason' => NULL, @@ -134,7 +132,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'OBJECT', 'name' => '__Type', - 'ofType' => NULL, ), 'isDeprecated' => false, 'deprecationReason' => NULL, @@ -196,7 +193,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'ENUM', 'name' => '__TypeKind', - 'ofType' => NULL, ), ), 'isDeprecated' => false, @@ -212,7 +208,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'String', - 'ofType' => NULL, ), 'isDeprecated' => false, 'deprecationReason' => NULL, @@ -227,7 +222,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'String', - 'ofType' => NULL, ), 'isDeprecated' => false, 'deprecationReason' => NULL, @@ -244,7 +238,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'Boolean', - 'ofType' => NULL, ), 'defaultValue' => 'false', ), @@ -261,7 +254,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'OBJECT', 'name' => '__Field', - 'ofType' => NULL, ), ), ), @@ -286,7 +278,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'OBJECT', 'name' => '__Type', - 'ofType' => NULL, ), ), ), @@ -311,7 +302,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'OBJECT', 'name' => '__Type', - 'ofType' => NULL, ), ), ), @@ -330,7 +320,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'Boolean', - 'ofType' => NULL, ), 'defaultValue' => 'false', ), @@ -347,7 +336,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'OBJECT', 'name' => '__EnumValue', - 'ofType' => NULL, ), ), ), @@ -372,7 +360,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'OBJECT', 'name' => '__InputValue', - 'ofType' => NULL, ), ), ), @@ -389,7 +376,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'OBJECT', 'name' => '__Type', - 'ofType' => NULL, ), 'isDeprecated' => false, 'deprecationReason' => NULL, @@ -502,7 +488,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'String', - 'ofType' => NULL, ), ), 'isDeprecated' => false, @@ -518,7 +503,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'String', - 'ofType' => NULL, ), 'isDeprecated' => false, 'deprecationReason' => NULL, @@ -566,7 +550,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'OBJECT', 'name' => '__Type', - 'ofType' => NULL, ), ), 'isDeprecated' => false, @@ -586,7 +569,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'Boolean', - 'ofType' => NULL, ), ), 'isDeprecated' => false, @@ -602,7 +584,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'String', - 'ofType' => NULL, ), 'isDeprecated' => false, 'deprecationReason' => NULL, @@ -635,7 +616,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'String', - 'ofType' => NULL, ), ), 'isDeprecated' => false, @@ -651,7 +631,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'String', - 'ofType' => NULL, ), 'isDeprecated' => false, 'deprecationReason' => NULL, @@ -670,7 +649,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'OBJECT', 'name' => '__Type', - 'ofType' => NULL, ), ), 'isDeprecated' => false, @@ -686,7 +664,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'String', - 'ofType' => NULL, ), 'isDeprecated' => false, 'deprecationReason' => NULL, @@ -719,7 +696,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'String', - 'ofType' => NULL, ), ), 'isDeprecated' => false, @@ -735,7 +711,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'String', - 'ofType' => NULL, ), 'isDeprecated' => false, 'deprecationReason' => NULL, @@ -754,7 +729,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'Boolean', - 'ofType' => NULL, ), ), 'isDeprecated' => false, @@ -770,7 +744,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'String', - 'ofType' => NULL, ), 'isDeprecated' => false, 'deprecationReason' => NULL, @@ -803,7 +776,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'String', - 'ofType' => NULL, ), ), 'isDeprecated' => false, @@ -819,7 +791,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'String', - 'ofType' => NULL, ), 'isDeprecated' => false, 'deprecationReason' => NULL, @@ -896,7 +867,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'Boolean', - 'ofType' => NULL, ), ), 'isDeprecated' => true, @@ -916,7 +886,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'Boolean', - 'ofType' => NULL, ), ), 'isDeprecated' => true, @@ -936,7 +905,7 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'Boolean', - 'ofType' => NULL, + ), ), 'isDeprecated' => true, @@ -1057,7 +1026,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'Boolean', - 'ofType' => NULL, ), ), ), @@ -1086,7 +1054,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase array ( 'kind' => 'SCALAR', 'name' => 'Boolean', - 'ofType' => NULL, ), ), ), @@ -1099,7 +1066,8 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase $actual = GraphQL::execute($emptySchema, $request); - $this->assertEquals($expected, $actual); + // $this->assertEquals($expected, $actual); + $this->assertArraySubset($expected, $actual); } /** @@ -1491,7 +1459,6 @@ class IntrospectionTest extends \PHPUnit_Framework_TestCase } '; $expected = [ - 'data' => null, 'errors' => [ FormattedError::create( ProvidedNonNullArguments::missingFieldArgMessage('__type', 'name', 'String!'), [new SourceLocation(3, 9)] diff --git a/tests/Validator/QueryComplexityTest.php b/tests/Validator/QueryComplexityTest.php index fecde04..a915f97 100644 --- a/tests/Validator/QueryComplexityTest.php +++ b/tests/Validator/QueryComplexityTest.php @@ -88,7 +88,7 @@ class QueryComplexityTest extends AbstractQuerySecurityTest public function testComplexityIntrospectionQuery() { - $this->assertIntrospectionQuery(109); + $this->assertIntrospectionQuery(181); } public function testIntrospectionTypeMetaFieldQuery() diff --git a/tests/Validator/QueryDepthTest.php b/tests/Validator/QueryDepthTest.php index a4f7837..c6ebda2 100644 --- a/tests/Validator/QueryDepthTest.php +++ b/tests/Validator/QueryDepthTest.php @@ -61,7 +61,7 @@ class QueryDepthTest extends AbstractQuerySecurityTest public function testComplexityIntrospectionQuery() { - $this->assertIntrospectionQuery(7); + $this->assertIntrospectionQuery(11); } public function testIntrospectionTypeMetaFieldQuery()