-
-
Notifications
You must be signed in to change notification settings - Fork 575
Expand file tree
/
Copy pathTypeLoaderTestCaseBase.php
More file actions
98 lines (78 loc) · 2.56 KB
/
Copy pathTypeLoaderTestCaseBase.php
File metadata and controls
98 lines (78 loc) · 2.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?php declare(strict_types=1);
namespace GraphQL\Tests\Type;
use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
use GraphQL\Error\InvariantViolation;
use GraphQL\Tests\TestCaseBase;
use GraphQL\Type\Definition\NamedType;
use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;
use GraphQL\Type\Schema;
abstract class TypeLoaderTestCaseBase extends TestCaseBase
{
use ArraySubsetAsserts;
protected ObjectType $query;
protected ObjectType $mutation;
/** @var callable(string): ((Type&NamedType)|null) */
protected $typeLoader;
/** @var array<int, string> */
protected array $calls;
protected function setUp(): void
{
$this->calls = [];
}
public function testSchemaAcceptsTypeLoader(): void
{
new Schema([
'query' => new ObjectType([
'name' => 'Query',
'fields' => ['a' => Type::string()],
]),
'typeLoader' => static fn () => null,
]);
$this->assertDidNotCrash();
}
public function testSchemaRejectsNonCallableTypeLoader(): void
{
$this->expectException(\TypeError::class);
$this->expectExceptionMessageMatches('/callable.*, array given/');
// @phpstan-ignore-next-line intentionally wrong
new Schema([
'query' => new ObjectType([
'name' => 'Query',
'fields' => ['a' => Type::string()],
]),
'typeLoader' => [],
]);
}
public function testOnlyCallsLoaderOnce(): void
{
$schema = new Schema([
'query' => $this->query,
'typeLoader' => $this->typeLoader,
]);
$schema->getType('Node');
self::assertSame(['Node'], $this->calls);
$schema->getType('Node');
self::assertSame(['Node'], $this->calls);
}
public function testIgnoresNonExistentType(): void
{
$schema = new Schema([
'query' => $this->query,
'typeLoader' => static fn () => null,
]);
self::assertNull($schema->getType('NonExistingType'));
}
public function testFailsOnNonType(): void
{
$notType = new \stdClass();
// @phpstan-ignore-next-line intentionally wrong
$schema = new Schema([
'query' => $this->query,
'typeLoader' => static fn (): \stdClass => $notType,
]);
$this->expectException(InvariantViolation::class);
$this->expectExceptionMessage(Schema::typeLoaderNotType($notType));
$schema->getType('Node');
}
}