Skip to content

Commit 4f78465

Browse files
authored
Merge pull request #12 from jorrit/enumquerymethod
Add enum fields as scalar fields to query objects
2 parents 628a0ba + 55cf60a commit 4f78465

File tree

4 files changed

+54
-6
lines changed

4 files changed

+54
-6
lines changed

src/SchemaGenerator/SchemaClassGenerator.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ private function appendQueryObjectFields(QueryObjectClassBuilder $queryObjectBui
9999

100100
if ($typeKind === FieldTypeKindEnum::SCALAR) {
101101
$queryObjectBuilder->addScalarField($name, $fieldArray['isDeprecated'], $fieldArray['deprecationReason']);
102+
} elseif ($typeKind === FieldTypeKindEnum::ENUM_OBJECT) {
103+
if (!array_key_exists($typeName, $this->generatedObjects)) {
104+
$this->generateEnumObject($typeName);
105+
}
106+
$queryObjectBuilder->addScalarField($name, $fieldArray['isDeprecated'], $fieldArray['deprecationReason']);
102107
} else {
103108

104109
// Generate nested type object if it wasn't generated

tests/QueryObjectClassBuilderTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ public function testAddMultipleSimpleSelectors()
8282
$objectName .= 'QueryObject';
8383
$classBuilder->addScalarField('first_name', false, null);
8484
$classBuilder->addScalarField('last_name', true, 'is deprecated');
85+
$classBuilder->addScalarField('gender', false, null);
8586
$classBuilder->build();
8687

8788
$this->assertFileEquals(

tests/SchemaClassGeneratorTest.php

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ public function testGenerateInputObjectWithNestedObjectValues()
414414
public function testGenerateArgumentsObjectWithScalarArgs()
415415
{
416416
$objectName = 'WithMultipleScalarArgs';
417-
$argsArray = [
417+
$argsArray = [
418418
[
419419
'name' => 'scalarProperty',
420420
'description' => null,
@@ -468,7 +468,7 @@ public function testGenerateArgumentsObjectWithListArgs()
468468
]
469469
]
470470
])));
471-
$argsArray = [
471+
$argsArray = [
472472
[
473473
'name' => 'listProperty',
474474
'description' => null,
@@ -542,7 +542,7 @@ public function testGenerateArgumentsObjectWithInputObjectArgs()
542542
])));
543543

544544
$objectName = 'WithMultipleInputObjectArgs';
545-
$argsArray = [
545+
$argsArray = [
546546
[
547547
'name' => 'objectProperty',
548548
'description' => null,
@@ -581,7 +581,7 @@ public function testGenerateArgumentsObjectWithInputObjectArgs()
581581
*/
582582
public function testGenerateQueryObjectWithScalarFields()
583583
{
584-
$objectName = 'MultipleSimpleSelectors';
584+
$objectName = 'MultipleSimpleSelectors';
585585
// Add mock responses
586586
$this->mockHandler->append(new Response(200, [], json_encode([
587587
'data' => [
@@ -613,11 +613,45 @@ public function testGenerateQueryObjectWithScalarFields()
613613
'ofType' => null,
614614
],
615615
'args' => null,
616+
], [
617+
'name' => 'gender',
618+
'description' => null,
619+
'isDeprecated' => false,
620+
'deprecationReason' => null,
621+
'type' => [
622+
'name' => 'Gender',
623+
'kind' => FieldTypeKindEnum::ENUM_OBJECT,
624+
'description' => null,
625+
'ofType' => null,
626+
],
627+
'args' => null,
616628
]
617629
]
618630
]
619631
]
620632
])));
633+
$this->mockHandler->append(new Response(200, [], json_encode([
634+
'data' => [
635+
'__type' => [
636+
'name' => 'Gender',
637+
'kind' => FieldTypeKindEnum::ENUM_OBJECT,
638+
'enumValues' => [
639+
[
640+
"name" => 'UNKNOWN',
641+
'description' => null
642+
],
643+
[
644+
'name' => 'FEMALE',
645+
'description' => null
646+
],
647+
[
648+
'name' => 'MALE',
649+
'description' => null
650+
],
651+
],
652+
],
653+
],
654+
])));
621655
$this->classGenerator->generateQueryObject($objectName);
622656

623657
$objectName .= 'QueryObject';
@@ -634,7 +668,7 @@ public function testGenerateQueryObjectWithScalarFields()
634668
*/
635669
public function testGenerateQueryObjectWithObjectFields()
636670
{
637-
$objectName = 'MultipleObjectSelectors';
671+
$objectName = 'MultipleObjectSelectors';
638672
// Add mock responses
639673
$this->mockHandler->append(new Response(200, [], json_encode([
640674
'data' => [
@@ -749,7 +783,8 @@ class TransparentSchemaClassGenerator extends SchemaClassGenerator
749783
public function __construct(
750784
Client $client,
751785
string $writeDir = ''
752-
) {
786+
)
787+
{
753788
parent::__construct($client, $writeDir, 'GraphQL\\Tests\\SchemaObject');
754789
}
755790

tests/files_expected/query_objects/MultipleSimpleSelectorsQueryObject.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,11 @@ public function selectLastName()
2424

2525
return $this;
2626
}
27+
28+
public function selectGender()
29+
{
30+
$this->selectField("gender");
31+
32+
return $this;
33+
}
2734
}

0 commit comments

Comments
 (0)