Skip to content

Commit a723f1d

Browse files
committed
Fix check of compatible parent type
1 parent 48da014 commit a723f1d

17 files changed

+222
-12
lines changed

src/GraphQL/CorrespondanceRule.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ private function listFieldResolvedValueTypes(
264264
$expectedParentType = $resolverClassType->getTemplateType(Vojtechdobes\GraphQL\FieldResolver::class, 'TObjectValue');
265265

266266
foreach ($this->listObjectTypeResolvedValueTypes($scope, $schemaServiceOraculum, $objectType) as $parentType) {
267-
if ($parentType->isSuperTypeOf($expectedParentType)->yes() === false) {
267+
if ($expectedParentType->isSuperTypeOf($parentType)->yes() === false) {
268268
$errors[] = sprintf(
269269
"Resolver %s of field %s expects parent to be %s, but parent is resolved to %s",
270270
$resolverClassType->describe(PHPStan\Type\VerbosityLevel::precise()),

tests-shared/AbstractCorrespondanceRuleTest.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,19 @@ final public function testRule(): void
4141
-1,
4242
],
4343
[
44-
"Resolver Vojtechdobes\TestsShared\Resolvers\InvalidParentTypeNameFieldResolver of field InvalidParentType.name expects parent to be Vojtechdobes\TestsShared\Resolvers\Person, but parent is resolved to array{}",
44+
"Resolver Vojtechdobes\TestsShared\Resolvers\PersonParentTypeNameFieldResolver of field PersonParentType.name expects parent to be Vojtechdobes\TestsShared\Resolvers\Person, but parent is resolved to array{}",
45+
-1,
46+
],
47+
[
48+
"Resolver Vojtechdobes\TestsShared\Resolvers\PersonParentTypeNameFieldResolver of field PersonParentType.name expects parent to be Vojtechdobes\TestsShared\Resolvers\Person, but parent is resolved to Vojtechdobes\TestsShared\Resolvers\Entity",
49+
-1,
50+
],
51+
[
52+
"Resolver Vojtechdobes\TestsShared\Resolvers\PersonParentTypeNameFieldResolver of field PersonParentType.name expects parent to be Vojtechdobes\TestsShared\Resolvers\Person, but parent is resolved to Vojtechdobes\TestsShared\Resolvers\Thing",
53+
-1,
54+
],
55+
[
56+
"Resolver Vojtechdobes\TestsShared\Resolvers\EntityParentTypeNameFieldResolver of field EntityParentType.name expects parent to be Vojtechdobes\TestsShared\Resolvers\Entity, but parent is resolved to array{}",
4557
-1,
4658
],
4759
]);

tests-shared/Resolvers/Entity.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Vojtechdobes\TestsShared\Resolvers;
4+
5+
6+
interface Entity
7+
{
8+
9+
public readonly string $name;
10+
11+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Vojtechdobes\TestsShared\Resolvers;
4+
5+
use Vojtechdobes;
6+
7+
8+
/**
9+
* @implements Vojtechdobes\GraphQL\FieldResolver<Entity, string>
10+
*/
11+
final class EntityParentTypeNameFieldResolver implements Vojtechdobes\GraphQL\FieldResolver
12+
{
13+
14+
public function resolveField(mixed $objectValue, Vojtechdobes\GraphQL\FieldSelection $field): mixed
15+
{
16+
return $objectValue->name;
17+
}
18+
19+
}

tests-shared/Resolvers/Person.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Vojtechdobes\TestsShared\Resolvers;
44

55

6-
final class Person
6+
final class Person implements Entity
77
{
88

99
public function __construct(

tests-shared/Resolvers/InvalidParentTypeNameFieldResolver.php renamed to tests-shared/Resolvers/PersonParentTypeNameFieldResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
/**
99
* @implements Vojtechdobes\GraphQL\FieldResolver<Person, string>
1010
*/
11-
final class InvalidParentTypeNameFieldResolver implements Vojtechdobes\GraphQL\FieldResolver
11+
final class PersonParentTypeNameFieldResolver implements Vojtechdobes\GraphQL\FieldResolver
1212
{
1313

1414
public function resolveField(mixed $objectValue, Vojtechdobes\GraphQL\FieldSelection $field): mixed

tests-shared/Resolvers/QueryProviderOfInvalidParentTypeFieldResolver.php renamed to tests-shared/Resolvers/QueryProviderOfInvalidEntityParentTypeArrayFieldResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
/**
99
* @implements Vojtechdobes\GraphQL\FieldResolver<null, array{}>
1010
*/
11-
final class QueryProviderOfInvalidParentTypeFieldResolver implements Vojtechdobes\GraphQL\FieldResolver
11+
final class QueryProviderOfInvalidEntityParentTypeArrayFieldResolver implements Vojtechdobes\GraphQL\FieldResolver
1212
{
1313

1414
public function resolveField(mixed $objectValue, Vojtechdobes\GraphQL\FieldSelection $field): mixed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Vojtechdobes\TestsShared\Resolvers;
4+
5+
use Vojtechdobes;
6+
7+
8+
/**
9+
* @implements Vojtechdobes\GraphQL\FieldResolver<null, array{}>
10+
*/
11+
final class QueryProviderOfInvalidPersonParentTypeArrayFieldResolver implements Vojtechdobes\GraphQL\FieldResolver
12+
{
13+
14+
public function resolveField(mixed $objectValue, Vojtechdobes\GraphQL\FieldSelection $field): mixed
15+
{
16+
return [];
17+
}
18+
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Vojtechdobes\TestsShared\Resolvers;
4+
5+
use Vojtechdobes;
6+
7+
8+
/**
9+
* @implements Vojtechdobes\GraphQL\FieldResolver<null, Entity>
10+
*/
11+
final class QueryProviderOfInvalidPersonParentTypeEntityFieldResolver implements Vojtechdobes\GraphQL\FieldResolver
12+
{
13+
14+
public function resolveField(mixed $objectValue, Vojtechdobes\GraphQL\FieldSelection $field): mixed
15+
{
16+
return new Person(name: 'Almond');
17+
}
18+
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Vojtechdobes\TestsShared\Resolvers;
4+
5+
use Vojtechdobes;
6+
7+
8+
/**
9+
* @implements Vojtechdobes\GraphQL\FieldResolver<null, Thing>
10+
*/
11+
final class QueryProviderOfInvalidPersonParentTypeThingFieldResolver implements Vojtechdobes\GraphQL\FieldResolver
12+
{
13+
14+
public function resolveField(mixed $objectValue, Vojtechdobes\GraphQL\FieldSelection $field): mixed
15+
{
16+
return new Thing(name: 'Almond');
17+
}
18+
19+
}

0 commit comments

Comments
 (0)