1111use GraphQL \Language \AST \DocumentNode ;
1212use GraphQL \Language \AST \FieldDefinitionNode ;
1313use GraphQL \Language \AST \IntValueNode ;
14+ use GraphQL \Language \AST \Node ;
1415use GraphQL \Language \AST \NodeList ;
16+ use GraphQL \Language \AST \ObjectTypeDefinitionNode ;
17+ use GraphQL \Language \AST \ObjectTypeExtensionNode ;
1518use GraphQL \Language \AST \SchemaDefinitionNode ;
1619use GraphQL \Language \Parser ;
1720use GraphQL \Language \Printer ;
@@ -1663,7 +1666,8 @@ public function testOriginalResolversArePreserved(): void
16631666 $ helloResolveFn = $ extendedQueryType ->getField ('hello ' )->resolveFn ;
16641667 self ::assertIsCallable ($ helloResolveFn );
16651668
1666- $ query = /** @lang GraphQL */ '{ hello } ' ;
1669+ $ query /** @lang GraphQL */
1670+ = '{ hello } ' ;
16671671 $ result = GraphQL::executeQuery ($ extendedSchema , $ query );
16681672 self ::assertSame (['data ' => ['hello ' => $ value ]], $ result ->toArray ());
16691673 }
@@ -1697,15 +1701,17 @@ public function testOriginalResolveFieldIsPreserved(): void
16971701 $ queryResolveFieldFn = $ extendedQueryType ->resolveFieldFn ;
16981702 self ::assertIsCallable ($ queryResolveFieldFn );
16991703
1700- $ query = /** @lang GraphQL */ '{ hello } ' ;
1704+ $ query /** @lang GraphQL */
1705+ = '{ hello } ' ;
17011706 $ result = GraphQL::executeQuery ($ extendedSchema , $ query );
17021707 self ::assertSame (['data ' => ['hello ' => $ value ]], $ result ->toArray ());
17031708 }
17041709
17051710 /** @see https://github.com/webonyx/graphql-php/issues/180 */
17061711 public function testShouldBeAbleToIntroduceNewTypesThroughExtension (): void
17071712 {
1708- $ sdl = /** @lang GraphQL */ '
1713+ $ sdl /** @lang GraphQL */
1714+ = '
17091715 type Query {
17101716 defaultValue: String
17111717 }
@@ -1718,7 +1724,8 @@ public function testShouldBeAbleToIntroduceNewTypesThroughExtension(): void
17181724 $ documentNode = Parser::parse ($ sdl );
17191725 $ schema = BuildSchema::build ($ documentNode );
17201726
1721- $ extensionSdl = /** @lang GraphQL */ '
1727+ $ extensionSdl /** @lang GraphQL */
1728+ = '
17221729 type Bar {
17231730 foo: Foo
17241731 }
@@ -1766,6 +1773,37 @@ public function testPreservesRepeatableInDirective(): void
17661773 self ::assertTrue ($ extendedDirective ->isRepeatable );
17671774 }
17681775
1776+ public function testCustomConfigIsTransferred (): void
1777+ {
1778+ $ fieldConfigDecorator = function (
1779+ array $ typeConfig ,
1780+ FieldDefinitionNode $ fieldDefinitionNode ,
1781+ Node $ node
1782+ ) {
1783+ if (($ node instanceof ObjectTypeDefinitionNode || $ node instanceof ObjectTypeExtensionNode) && $ node ->name ->value === 'Test ' && $ fieldDefinitionNode ->name ->value === 'field1 ' ) {
1784+ $ typeConfig ['customAttr ' ] = true ;
1785+ }
1786+
1787+ return $ typeConfig ;
1788+ };
1789+ $ schema = BuildSchema::build (/** @lang GraphQL */ '
1790+ type Test {
1791+ field1: String!
1792+ }
1793+ ' , null , [], $ fieldConfigDecorator );
1794+
1795+ $ type = $ schema ->getType ('Test ' );
1796+ assert ($ type instanceof ObjectType);
1797+ $ field1 = $ type ->getField ('field1 ' );
1798+ self ::assertArrayHasKey ('customAttr ' , $ field1 ->config );
1799+
1800+ $ extendedSchema = SchemaExtender::extend ($ schema , Parser::parse ('scalar Foo ' ), [], null , $ fieldConfigDecorator );
1801+ $ type = $ extendedSchema ->getType ('Test ' );
1802+ assert ($ type instanceof ObjectType);
1803+ $ field1 = $ type ->getField ('field1 ' );
1804+ self ::assertArrayHasKey ('customAttr ' , $ field1 ->config );
1805+ }
1806+
17691807 public function testSupportsTypeConfigDecorator (): void
17701808 {
17711809 $ helloValue = 'Hello World! ' ;
@@ -1814,7 +1852,8 @@ public function testSupportsTypeConfigDecorator(): void
18141852
18151853 $ extendedSchema = SchemaExtender::extend ($ schema , $ documentNode , [], $ typeConfigDecorator , $ fieldConfigDecorator );
18161854
1817- $ query = /** @lang GraphQL */ '
1855+ $ query /** @lang GraphQL */
1856+ = '
18181857 {
18191858 hello
18201859 foo {
@@ -1918,7 +1957,8 @@ public function testPreservesResolveTypeMethod(): void
19181957 $ SomeInterfaceClassType ->concrete = $ ExtendedFooType ;
19191958 $ SomeUnionClassType ->concrete = $ ExtendedFooType ;
19201959
1921- $ query = /** @lang GraphQL */ '
1960+ $ query /** @lang GraphQL */
1961+ = '
19221962 {
19231963 someUnion {
19241964 __typename
@@ -1976,7 +2016,8 @@ public function testPreservesIsTypeOfMethod(): void
19762016
19772017 $ extendedSchema = SchemaExtender::extend ($ schema , $ documentNode );
19782018
1979- $ query = /** @lang GraphQL */ '
2019+ $ query /** @lang GraphQL */
2020+ = '
19802021 {
19812022 someInterface {
19822023 __typename
0 commit comments