From 4f7e836508f0eb294f7872d6fb1fd5b67b0b6474 Mon Sep 17 00:00:00 2001 From: Steve Boyd Date: Wed, 13 Apr 2022 13:35:50 +1200 Subject: [PATCH] DEP Upgrade webonyx/graphql-php to v14 (#454) --- composer.json | 2 +- src/Scaffolding/Util/StringTypeParser.php | 2 +- tests/ConnectionTest.php | 4 +- tests/Fake/FakeResolveInfo.php | 42 +++++++++++++++++++ tests/QueryFilter/ReadTest.php | 6 +-- .../Scaffolders/CRUD/CreateTest.php | 6 +-- .../Scaffolders/CRUD/DeleteTest.php | 6 +-- .../Scaffolders/CRUD/ReadOneTest.php | 4 +- .../Scaffolding/Scaffolders/CRUD/ReadTest.php | 4 +- .../Scaffolders/CRUD/UpdateTest.php | 6 +-- .../Scaffolders/DataObjectScaffolderTest.php | 33 +++++++++++++-- .../Scaffolders/ItemQueryScaffolderTest.php | 4 +- .../Scaffolders/ListQueryScaffolderTest.php | 4 +- .../Scaffolders/UnionScaffolderTest.php | 12 +++--- 14 files changed, 102 insertions(+), 33 deletions(-) create mode 100644 tests/Fake/FakeResolveInfo.php diff --git a/composer.json b/composer.json index c3ce07c3c..1802cc617 100755 --- a/composer.json +++ b/composer.json @@ -6,7 +6,7 @@ "require": { "silverstripe/framework": "^4.10", "silverstripe/vendor-plugin": "^1.0", - "webonyx/graphql-php": "~0.12.6" + "webonyx/graphql-php": "^14" }, "conflict": { "silverstripe/versioned-admin": "<1.8", diff --git a/src/Scaffolding/Util/StringTypeParser.php b/src/Scaffolding/Util/StringTypeParser.php index c449c4874..1413dec1b 100644 --- a/src/Scaffolding/Util/StringTypeParser.php +++ b/src/Scaffolding/Util/StringTypeParser.php @@ -42,7 +42,7 @@ class StringTypeParser implements TypeParserInterface */ public static function isInternalType($type) { - $types = array_keys(Type::getInternalTypes()); + $types = array_keys(Type::getStandardTypes()); return in_array($type, $types); } diff --git a/tests/ConnectionTest.php b/tests/ConnectionTest.php index 1e6cb4e90..2b1811f9f 100644 --- a/tests/ConnectionTest.php +++ b/tests/ConnectionTest.php @@ -5,7 +5,6 @@ use GraphQL\Type\Definition\FieldDefinition; use GraphQL\Type\Definition\InputObjectField; use GraphQL\Type\Definition\ObjectType; -use GraphQL\Type\Definition\ResolveInfo; use GraphQL\Type\Definition\Type; use InvalidArgumentException; use SilverStripe\Dev\SapphireTest; @@ -13,6 +12,7 @@ use SilverStripe\GraphQL\Pagination\Connection; use SilverStripe\GraphQL\Pagination\SortInputTypeCreator; use SilverStripe\GraphQL\Tests\Fake\DataObjectFake; +use SilverStripe\GraphQL\Tests\Fake\FakeResolveInfo; use SilverStripe\GraphQL\Tests\Fake\PaginatedQueryFake; use SilverStripe\GraphQL\Tests\Fake\TypeCreatorFake; use SilverStripe\ORM\ArrayList; @@ -195,7 +195,7 @@ public function testGetEdgeTypeResolver() public function testCollectionResolves() { - $resolve = $this->connection->resolve(null, [], [], new ResolveInfo([])); + $resolve = $this->connection->resolve(null, [], [], new FakeResolveInfo()); $item = $resolve['edges']->first()->toMap(); $this->assertEquals('testMyValidResolverValue', $item['MyValue']); } diff --git a/tests/Fake/FakeResolveInfo.php b/tests/Fake/FakeResolveInfo.php new file mode 100644 index 000000000..680f31624 --- /dev/null +++ b/tests/Fake/FakeResolveInfo.php @@ -0,0 +1,42 @@ + $value) { + if ($key === 'name') { + $name = $value; + } + if ($key === 'type') { + if ($value === 'int') { + $type = Type::int(); + } + } + } + parent::__construct( + FieldDefinition::create(['name' => $name, 'type' => $type]), + [], + new ObjectType(['name' => 'abc', 'fields' => [$name => $type]]), + [], + new Schema([]), + [], + '', + null, + [] + ); + } +} diff --git a/tests/QueryFilter/ReadTest.php b/tests/QueryFilter/ReadTest.php index a9f9320f3..0c7f01f7e 100644 --- a/tests/QueryFilter/ReadTest.php +++ b/tests/QueryFilter/ReadTest.php @@ -4,7 +4,6 @@ use GraphQL\Type\Definition\InputObjectType; use GraphQL\Type\Definition\ObjectType; -use GraphQL\Type\Definition\ResolveInfo; use SilverStripe\Dev\SapphireTest; use SilverStripe\GraphQL\Manager; use SilverStripe\GraphQL\QueryFilter\DataObjectQueryFilter; @@ -12,6 +11,7 @@ use SilverStripe\GraphQL\Scaffolding\Scaffolders\CRUD\ReadOne; use SilverStripe\GraphQL\Scaffolding\Scaffolders\SchemaScaffolder; use SilverStripe\GraphQL\Tests\Fake\DataObjectFake; +use SilverStripe\GraphQL\Tests\Fake\FakeResolveInfo; use SilverStripe\GraphQL\Tests\Fake\FilterDataList; class ReadTest extends SapphireTest @@ -145,7 +145,7 @@ public function testQueryFilterResolve($classToTest) null, [], ['currentUser' => null], - new ResolveInfo([]) + new FakeResolveInfo() ); /* @var ReadOne|Read $read */ @@ -171,7 +171,7 @@ public function testQueryFilterResolve($classToTest) ] ], ['currentUser' => null], - new ResolveInfo([]) + new FakeResolveInfo() ); } diff --git a/tests/Scaffolding/Scaffolders/CRUD/CreateTest.php b/tests/Scaffolding/Scaffolders/CRUD/CreateTest.php index 3284ee8d7..cf9efeb95 100644 --- a/tests/Scaffolding/Scaffolders/CRUD/CreateTest.php +++ b/tests/Scaffolding/Scaffolders/CRUD/CreateTest.php @@ -7,7 +7,6 @@ use GraphQL\Type\Definition\IntType; use GraphQL\Type\Definition\NonNull; use GraphQL\Type\Definition\ObjectType; -use GraphQL\Type\Definition\ResolveInfo; use GraphQL\Type\Definition\StringType; use SilverStripe\Dev\SapphireTest; use SilverStripe\GraphQL\Manager; @@ -15,6 +14,7 @@ use SilverStripe\GraphQL\Scaffolding\StaticSchema; use SilverStripe\GraphQL\Tests\Fake\DataObjectFake; use SilverStripe\GraphQL\Tests\Fake\FakeCRUDExtension; +use SilverStripe\GraphQL\Tests\Fake\FakeResolveInfo; use SilverStripe\GraphQL\Tests\Fake\RestrictedDataObjectFake; use SilverStripe\Security\Member; @@ -76,7 +76,7 @@ public function testCreateOperationResolver($shouldExtend) [ 'currentUser' => Member::create(), ], - new ResolveInfo([]) + new FakeResolveInfo() ); if ($shouldExtend) { @@ -148,7 +148,7 @@ public function testCreateOperationPermissionCheck() null, [], ['currentUser' => Member::create()], - new ResolveInfo([]) + new FakeResolveInfo() ); } } diff --git a/tests/Scaffolding/Scaffolders/CRUD/DeleteTest.php b/tests/Scaffolding/Scaffolders/CRUD/DeleteTest.php index 6620e8744..d003405ce 100644 --- a/tests/Scaffolding/Scaffolders/CRUD/DeleteTest.php +++ b/tests/Scaffolding/Scaffolders/CRUD/DeleteTest.php @@ -7,13 +7,13 @@ use GraphQL\Type\Definition\ListOfType; use GraphQL\Type\Definition\NonNull; use GraphQL\Type\Definition\ObjectType; -use GraphQL\Type\Definition\ResolveInfo; use GraphQL\Type\Definition\StringType; use SilverStripe\Dev\SapphireTest; use SilverStripe\GraphQL\Manager; use SilverStripe\GraphQL\Scaffolding\Scaffolders\CRUD\Delete; use SilverStripe\GraphQL\Tests\Fake\DataObjectFake; use SilverStripe\GraphQL\Tests\Fake\FakeCRUDExtension; +use SilverStripe\GraphQL\Tests\Fake\FakeResolveInfo; use SilverStripe\GraphQL\Tests\Fake\RestrictedDataObjectFake; use SilverStripe\Security\Member; @@ -73,7 +73,7 @@ public function testDeleteOperationResolver($shouldExtend) [ 'currentUser' => Member::create(), ], - new ResolveInfo([]) + new FakeResolveInfo() ); if ($shouldExtend) { @@ -130,7 +130,7 @@ public function testDeleteOperationPermissionCheck() $restrictedDataobject, ['IDs' => [$ID]], ['currentUser' => Member::create()], - new ResolveInfo([]) + new FakeResolveInfo() ); } } diff --git a/tests/Scaffolding/Scaffolders/CRUD/ReadOneTest.php b/tests/Scaffolding/Scaffolders/CRUD/ReadOneTest.php index a430232b0..b9bfebdd3 100644 --- a/tests/Scaffolding/Scaffolders/CRUD/ReadOneTest.php +++ b/tests/Scaffolding/Scaffolders/CRUD/ReadOneTest.php @@ -5,12 +5,12 @@ use GraphQL\Type\Definition\IDType; use GraphQL\Type\Definition\NonNull; use GraphQL\Type\Definition\ObjectType; -use GraphQL\Type\Definition\ResolveInfo; use GraphQL\Type\Definition\StringType; use SilverStripe\Dev\SapphireTest; use SilverStripe\GraphQL\Manager; use SilverStripe\GraphQL\Scaffolding\Scaffolders\CRUD\ReadOne; use SilverStripe\GraphQL\Tests\Fake\DataObjectFake; +use SilverStripe\GraphQL\Tests\Fake\FakeResolveInfo; use SilverStripe\GraphQL\Tests\Fake\RestrictedDataObjectFake; use SilverStripe\Security\Member; @@ -51,7 +51,7 @@ public function testReadOneOperationResolver() [ 'currentUser' => Member::create(), ], - new ResolveInfo([]) + new FakeResolveInfo() ); $this->assertInstanceOf(DataObjectFake::class, $response); $this->assertEquals($ID, $response->ID); diff --git a/tests/Scaffolding/Scaffolders/CRUD/ReadTest.php b/tests/Scaffolding/Scaffolders/CRUD/ReadTest.php index e3d85463a..c5df2c4ae 100644 --- a/tests/Scaffolding/Scaffolders/CRUD/ReadTest.php +++ b/tests/Scaffolding/Scaffolders/CRUD/ReadTest.php @@ -3,12 +3,12 @@ namespace SilverStripe\GraphQL\Tests\Scaffolding\Scaffolders\CRUD; use GraphQL\Type\Definition\ObjectType; -use GraphQL\Type\Definition\ResolveInfo; use GraphQL\Type\Definition\StringType; use SilverStripe\Dev\SapphireTest; use SilverStripe\GraphQL\Manager; use SilverStripe\GraphQL\Scaffolding\Scaffolders\CRUD\Read; use SilverStripe\GraphQL\Tests\Fake\DataObjectFake; +use SilverStripe\GraphQL\Tests\Fake\FakeResolveInfo; use SilverStripe\GraphQL\Tests\Fake\RestrictedDataObjectFake; use SilverStripe\ORM\DataList; use SilverStripe\Security\Member; @@ -57,7 +57,7 @@ public function testReadOperationResolver() [ 'currentUser' => Member::create(), ], - new ResolveInfo([]) + new FakeResolveInfo() ); $this->assertArrayHasKey('edges', $response); diff --git a/tests/Scaffolding/Scaffolders/CRUD/UpdateTest.php b/tests/Scaffolding/Scaffolders/CRUD/UpdateTest.php index 74704c892..21d57e969 100644 --- a/tests/Scaffolding/Scaffolders/CRUD/UpdateTest.php +++ b/tests/Scaffolding/Scaffolders/CRUD/UpdateTest.php @@ -8,13 +8,13 @@ use GraphQL\Type\Definition\IntType; use GraphQL\Type\Definition\NonNull; use GraphQL\Type\Definition\ObjectType; -use GraphQL\Type\Definition\ResolveInfo; use GraphQL\Type\Definition\StringType; use SilverStripe\Dev\SapphireTest; use SilverStripe\GraphQL\Manager; use SilverStripe\GraphQL\Scaffolding\Scaffolders\CRUD\Update; use SilverStripe\GraphQL\Tests\Fake\DataObjectFake; use SilverStripe\GraphQL\Tests\Fake\FakeCRUDExtension; +use SilverStripe\GraphQL\Tests\Fake\FakeResolveInfo; use SilverStripe\GraphQL\Tests\Fake\RestrictedDataObjectFake; use SilverStripe\Security\Member; @@ -74,7 +74,7 @@ public function testUpdateOperationResolver($shouldExtend) [ 'currentUser' => Member::create(), ], - new ResolveInfo([]) + new FakeResolveInfo() ); /** @var DataObjectFake $updatedRecord */ @@ -148,7 +148,7 @@ public function testUpdateOperationPermissionCheck() ], ], ['currentUser' => Member::create()], - new ResolveInfo([]) + new FakeResolveInfo() ); } } diff --git a/tests/Scaffolding/Scaffolders/DataObjectScaffolderTest.php b/tests/Scaffolding/Scaffolders/DataObjectScaffolderTest.php index 0a96a7cd4..fdc6c9a78 100644 --- a/tests/Scaffolding/Scaffolders/DataObjectScaffolderTest.php +++ b/tests/Scaffolding/Scaffolders/DataObjectScaffolderTest.php @@ -4,7 +4,6 @@ use Exception; use GraphQL\Type\Definition\ObjectType; -use GraphQL\Type\Definition\ResolveInfo; use InvalidArgumentException; use SilverStripe\Core\Config\Config; use SilverStripe\Dev\SapphireTest; @@ -23,8 +22,10 @@ use SilverStripe\GraphQL\Tests\Fake\FakeFieldAccessor; use SilverStripe\GraphQL\Tests\Fake\FakePage; use SilverStripe\GraphQL\Tests\Fake\FakeRedirectorPage; +use SilverStripe\GraphQL\Tests\Fake\FakeResolveInfo; use SilverStripe\GraphQL\Tests\Fake\FakeSiteTree; use SilverStripe\ORM\FieldType\DBInt; +use SilverStripe\View\ViewableData; class DataObjectScaffolderTest extends SapphireTest { @@ -433,7 +434,11 @@ public function testDataObjectScaffolderSimpleFieldTypes() $fields = $result->config['fields'](); $myIntResolver = $fields['MyInt']['resolve']; $fake = new DataObjectFake(['MyInt' => 5]); - $value = $myIntResolver($fake, [], null, new ResolveInfo(['fieldName' => 'MyInt'])); + + $orig = StaticSchema::inst()->getFieldAccessor(); + StaticSchema::inst()->setFieldAccessor($this->getMyFieldAccessor()); + $value = $myIntResolver($fake, [], null, new FakeResolveInfo(['name' => 'MyInt', 'type' => 'int'])); + StaticSchema::inst()->setFieldAccessor($orig); $this->assertEquals(5, $value); Config::modify()->merge(DBInt::class, 'graphql_type', [ @@ -461,11 +466,33 @@ public function testDataObjectScaffolderComplexFieldTypes() $fields = $result->config['fields'](); $myIntResolver = $fields['MyInt']['resolve']; - $value = $myIntResolver($fake, [], null, new ResolveInfo(['fieldName' => 'MyInt'])); + $orig = StaticSchema::inst()->getFieldAccessor(); + StaticSchema::inst()->setFieldAccessor($this->getMyFieldAccessor()); + $value = $myIntResolver($fake, [], null, new FakeResolveInfo(['name' => 'MyInt', 'type' => 'int'])); + StaticSchema::inst()->setFieldAccessor($orig); $this->assertInstanceOf(DBInt::class, $value); } + private function getMyFieldAccessor() + { + // same as FakeFieldAccessor, though without $field = strrev($fieldName) + return new class extends FakeFieldAccessor + { + public function getObjectFieldName(ViewableData $object, $fieldName, $opts = []) + { + return $object->hasField($fieldName) ? $fieldName : null; + } + public function getValue(ViewableData $object, $fieldName, $opts = [], $asObject = false) + { + if ($object->hasField($fieldName)) { + return $object->obj($fieldName); + } + return $asObject ? $object->obj($fieldName): $object->$fieldName; + } + }; + } + public function testCloneTo() { $scaffolder = new DataObjectScaffolder(FakeRedirectorPage::class); diff --git a/tests/Scaffolding/Scaffolders/ItemQueryScaffolderTest.php b/tests/Scaffolding/Scaffolders/ItemQueryScaffolderTest.php index 86fe67886..c0b464450 100644 --- a/tests/Scaffolding/Scaffolders/ItemQueryScaffolderTest.php +++ b/tests/Scaffolding/Scaffolders/ItemQueryScaffolderTest.php @@ -3,11 +3,11 @@ namespace SilverStripe\GraphQL\Tests\Scaffolders\Scaffolding; use GraphQL\Type\Definition\ObjectType; -use GraphQL\Type\Definition\ResolveInfo; use SilverStripe\Dev\SapphireTest; use SilverStripe\GraphQL\Manager; use SilverStripe\GraphQL\Scaffolding\Scaffolders\ItemQueryScaffolder; use SilverStripe\GraphQL\Tests\Fake\FakeQueryPermissionChecker; +use SilverStripe\GraphQL\Tests\Fake\FakeResolveInfo; use SilverStripe\ORM\ArrayList; use SilverStripe\View\ArrayData; @@ -74,7 +74,7 @@ public function testPermissionCheck($allow) if ($allow === false) { $this->expectException('Exception'); } - $result = $arr['resolve'](null, [], ['currentUser' => null], new ResolveInfo([])); + $result = $arr['resolve'](null, [], ['currentUser' => null], new FakeResolveInfo()); if ($allow !== false) { $this->assertNotNull($result); $this->assertEquals('Bar', $result->Foo); diff --git a/tests/Scaffolding/Scaffolders/ListQueryScaffolderTest.php b/tests/Scaffolding/Scaffolders/ListQueryScaffolderTest.php index 344617a91..2327f1b53 100644 --- a/tests/Scaffolding/Scaffolders/ListQueryScaffolderTest.php +++ b/tests/Scaffolding/Scaffolders/ListQueryScaffolderTest.php @@ -3,12 +3,12 @@ namespace SilverStripe\GraphQL\Tests\Scaffolders\Scaffolding; use GraphQL\Type\Definition\ObjectType; -use GraphQL\Type\Definition\ResolveInfo; use InvalidArgumentException; use SilverStripe\Dev\SapphireTest; use SilverStripe\GraphQL\Manager; use SilverStripe\GraphQL\Scaffolding\Scaffolders\ListQueryScaffolder; use SilverStripe\GraphQL\Tests\Fake\FakeQueryPermissionChecker; +use SilverStripe\GraphQL\Tests\Fake\FakeResolveInfo; use SilverStripe\ORM\ArrayList; use SilverStripe\View\ArrayData; @@ -195,7 +195,7 @@ public function testPermissionCheck($allow) $scaffolder->addToManager($manager); $arr = $scaffolder->scaffold($manager); - $result = $arr['resolve'](null, [], ['currentUser' => null], new ResolveInfo([])); + $result = $arr['resolve'](null, [], ['currentUser' => null], new FakeResolveInfo()); $this->assertNotNull($result); $expected = $allow === false ? 0 : 1; $this->assertCount($expected, $result); diff --git a/tests/Scaffolding/Scaffolders/UnionScaffolderTest.php b/tests/Scaffolding/Scaffolders/UnionScaffolderTest.php index b0ef9771c..2cb87bed0 100644 --- a/tests/Scaffolding/Scaffolders/UnionScaffolderTest.php +++ b/tests/Scaffolding/Scaffolders/UnionScaffolderTest.php @@ -3,13 +3,13 @@ namespace SilverStripe\GraphQL\Tests\Scaffolders\Scaffolding; use Exception; -use GraphQL\Type\Definition\ResolveInfo; use SilverStripe\Dev\SapphireTest; use SilverStripe\GraphQL\Manager; use SilverStripe\GraphQL\Scaffolding\Scaffolders\DataObjectScaffolder; use SilverStripe\GraphQL\Scaffolding\Scaffolders\UnionScaffolder; use SilverStripe\GraphQL\Tests\Fake\FakePage; use SilverStripe\GraphQL\Tests\Fake\FakeRedirectorPage; +use SilverStripe\GraphQL\Tests\Fake\FakeResolveInfo; use SilverStripe\GraphQL\Tests\Fake\FakeSiteTree; use SilverStripe\GraphQL\Tests\Fake\RestrictedDataObjectFake; @@ -38,21 +38,21 @@ public function testUnionScaffolder() $this->assertEquals($scaffolder2->getTypeName(), $types[1]->config['name']); $fakeRedirector = new FakeRedirectorPage(); - $result = $unionType->resolveType($fakeRedirector, [], new ResolveInfo([])); + $result = $unionType->resolveType($fakeRedirector, [], new FakeResolveInfo()); //$result = $typeResolver(new FakeRedirectorPage()); $this->assertEquals($scaffolder1->getTypeName(), $result->config['name']); - $result = $unionType->resolveType(new FakeSiteTree(), [], new ResolveInfo([])); + $result = $unionType->resolveType(new FakeSiteTree(), [], new FakeResolveInfo()); $this->assertEquals($scaffolder2->getTypeName(), $result->config['name']); // FakePage was never added. Should fall back on the parent type (FakeSiteTree) - $result = $unionType->resolveType(new FakePage(), [], new ResolveInfo([])); + $result = $unionType->resolveType(new FakePage(), [], new FakeResolveInfo()); $this->assertEquals($scaffolder2->getTypeName(), $result->config['name']); $ex = null; try { - $unionType->resolveType(new Manager(), [], new ResolveInfo([])); + $unionType->resolveType(new Manager(), [], new FakeResolveInfo()); } catch (Exception $e) { $ex = $e->getMessage(); } @@ -61,7 +61,7 @@ public function testUnionScaffolder() $ex = null; try { - $unionType->resolveType(new RestrictedDataObjectFake(), [], new ResolveInfo([])); + $unionType->resolveType(new RestrictedDataObjectFake(), [], new FakeResolveInfo()); } catch (Exception $e) { $ex = $e->getMessage(); }