|
5 | 5 | use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
|
6 | 6 | use GraphQL\Error\DebugFlag;
|
7 | 7 | use GraphQL\GraphQL;
|
| 8 | +use GraphQL\Language\Parser; |
8 | 9 | use GraphQL\Language\SourceLocation;
|
| 10 | +use GraphQL\Tests\Type\PhpEnumType\BackedPhpEnum; |
| 11 | +use GraphQL\Tests\Type\PhpEnumType\PhpEnum; |
9 | 12 | use GraphQL\Tests\Type\TestClasses\OtherEnumType;
|
10 | 13 | use GraphQL\Type\Definition\EnumType;
|
11 | 14 | use GraphQL\Type\Definition\EnumValueDefinition;
|
12 | 15 | use GraphQL\Type\Definition\ObjectType;
|
13 | 16 | use GraphQL\Type\Definition\Type;
|
14 | 17 | use GraphQL\Type\Introspection;
|
15 | 18 | use GraphQL\Type\Schema;
|
| 19 | +use GraphQL\Utils\BuildSchema; |
16 | 20 | use PHPUnit\Framework\TestCase;
|
17 | 21 |
|
18 | 22 | final class EnumTypeTest extends TestCase
|
@@ -661,4 +665,62 @@ public function testLazilyDefineValuesAsCallable(): void
|
661 | 665 | // @phpstan-ignore-next-line $called is mutated
|
662 | 666 | self::assertSame(1, $called, 'Should call enum values callable exactly once');
|
663 | 667 | }
|
| 668 | + |
| 669 | + public function testSerializesNativeBackedEnums(): void |
| 670 | + { |
| 671 | + if (version_compare(phpversion(), '8.1', '<')) { |
| 672 | + self::markTestSkipped('Native PHP enums are only available with PHP 8.1'); |
| 673 | + } |
| 674 | + |
| 675 | + $documentNode = Parser::parse(<<<'SDL' |
| 676 | + type Query { |
| 677 | + phpEnum(fromEnum: PhpEnum!): PhpEnum! |
| 678 | + } |
| 679 | + |
| 680 | + enum PhpEnum { |
| 681 | + A |
| 682 | + B |
| 683 | + C |
| 684 | + } |
| 685 | + SDL); |
| 686 | + |
| 687 | + $this->schema = BuildSchema::build($documentNode); |
| 688 | + $resolvers = [ |
| 689 | + 'phpEnum' => fn (): BackedPhpEnum => BackedPhpEnum::A, |
| 690 | + ]; |
| 691 | + |
| 692 | + self::assertSame( |
| 693 | + ['data' => ['phpEnum' => 'A']], |
| 694 | + GraphQL::executeQuery($this->schema, '{ phpEnum(fromEnum: A) }', $resolvers)->toArray() |
| 695 | + ); |
| 696 | + } |
| 697 | + |
| 698 | + public function testSerializesNativeUnitEnums(): void |
| 699 | + { |
| 700 | + if (version_compare(phpversion(), '8.1', '<')) { |
| 701 | + self::markTestSkipped('Native PHP enums are only available with PHP 8.1'); |
| 702 | + } |
| 703 | + |
| 704 | + $documentNode = Parser::parse(<<<'SDL' |
| 705 | + type Query { |
| 706 | + phpEnum(fromEnum: PhpEnum!): PhpEnum! |
| 707 | + } |
| 708 | + |
| 709 | + enum PhpEnum { |
| 710 | + A |
| 711 | + B |
| 712 | + C |
| 713 | + } |
| 714 | + SDL); |
| 715 | + |
| 716 | + $this->schema = BuildSchema::build($documentNode); |
| 717 | + $resolvers = [ |
| 718 | + 'phpEnum' => fn (): PhpEnum => PhpEnum::B, |
| 719 | + ]; |
| 720 | + |
| 721 | + self::assertSame( |
| 722 | + ['data' => ['phpEnum' => 'B']], |
| 723 | + GraphQL::executeQuery($this->schema, '{ phpEnum(fromEnum: B) }', $resolvers)->toArray() |
| 724 | + ); |
| 725 | + } |
664 | 726 | }
|
0 commit comments