-
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathInterfaceBuilderTest.php
More file actions
68 lines (56 loc) · 2.22 KB
/
InterfaceBuilderTest.php
File metadata and controls
68 lines (56 loc) · 2.22 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
<?php
declare(strict_types=1);
namespace SimPod\GraphQLUtils\Tests\Builder;
use GraphQL\Type\Definition\InterfaceType;
use GraphQL\Type\Definition\ResolveInfo;
use GraphQL\Type\Definition\Type;
use PHPUnit\Framework\TestCase;
use ReflectionClass;
use SimPod\GraphQLUtils\Builder\EnumBuilder;
use SimPod\GraphQLUtils\Builder\FieldBuilder;
use SimPod\GraphQLUtils\Builder\InterfaceBuilder;
use SimPod\GraphQLUtils\Exception\InvalidArgument;
final class InterfaceBuilderTest extends TestCase
{
public function testCreate(): void
{
$name = 'InterfaceA';
$description = 'Description';
$interfaceA = new class () extends InterfaceType {
public function __construct()
{
$builder = InterfaceBuilder::create('InterfaceA');
parent::__construct($builder->build());
}
};
$interface = InterfaceBuilder::create($name)
->addInterface($interfaceA)
->setDescription($description)
->setFields(
[
FieldBuilder::create('SomeField', Type::string())->build(),
],
)
->setResolveType(
static fn (mixed $value) => $value === true ? 'type' : null,
)
->build();
$resolveInfoReflection = new ReflectionClass(ResolveInfo::class);
$resolveInfo = $resolveInfoReflection->newInstanceWithoutConstructor();
self::assertArrayHasKey('name', $interface);
self::assertSame($name, $interface['name']);
self::assertArrayHasKey('description', $interface);
self::assertSame($description, $interface['description']);
self::assertIsArray($interface['fields']);
self::assertCount(1, $interface['fields']);
self::assertArrayHasKey('resolveType', $interface);
self::assertIsCallable($interface['resolveType']);
self::assertSame('type', $interface['resolveType'](true, null, $resolveInfo));
self::assertNull($interface['resolveType'](false, null, $resolveInfo));
}
public function testInvalidValue(): void
{
$this->expectException(InvalidArgument::class);
EnumBuilder::create('Enum')->addValue('invalid-value');
}
}