Skip to content

Commit 5be031f

Browse files
committed
Transfer config in schema extender.
1 parent 1cebf29 commit 5be031f

File tree

1 file changed

+48
-7
lines changed

1 file changed

+48
-7
lines changed

tests/Utils/SchemaExtenderTest.php

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
use GraphQL\Language\AST\DocumentNode;
1212
use GraphQL\Language\AST\FieldDefinitionNode;
1313
use GraphQL\Language\AST\IntValueNode;
14+
use GraphQL\Language\AST\Node;
1415
use GraphQL\Language\AST\NodeList;
16+
use GraphQL\Language\AST\ObjectTypeDefinitionNode;
17+
use GraphQL\Language\AST\ObjectTypeExtensionNode;
1518
use GraphQL\Language\AST\SchemaDefinitionNode;
1619
use GraphQL\Language\Parser;
1720
use 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

Comments
 (0)