Skip to content

Commit 263915c

Browse files
committed
Issue-5: Fix issue in generating enum value setters for input objects
- Fixed the bug in generating the enum value setters in input objects - Added a test case to capture the issue fixed
1 parent 2d3b7a0 commit 263915c

File tree

3 files changed

+75
-1
lines changed

3 files changed

+75
-1
lines changed

src/SchemaGenerator/SchemaClassGenerator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ protected function generateInputObject(string $objectName): bool
185185
if (in_array(FieldTypeKindEnum::LIST, $typeKindWrappers)) {
186186
$objectBuilder->addListValue($name, $typeName);
187187
} else {
188-
if ($typeKind === FieldTypeKindEnum::SCALAR) {
188+
if ($typeKind === FieldTypeKindEnum::SCALAR || $typeKind === FieldTypeKindEnum::ENUM_OBJECT) {
189189
$objectBuilder->addScalarValue($name);
190190
} else {
191191
$objectBuilder->addInputObjectValue($name, $typeName);

tests/SchemaClassGeneratorTest.php

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,63 @@ public function testGenerateInputObjectWithScalarValues()
221221
);
222222
}
223223

224+
/**
225+
* @covers \GraphQL\SchemaGenerator\SchemaClassGenerator::generateInputObject
226+
* @covers \GraphQL\SchemaGenerator\SchemaClassGenerator::generateObject
227+
*/
228+
public function testGenerateInputObjectWithEnumValue()
229+
{
230+
$objectName = 'WithEnumValue';
231+
// Add mock responses
232+
$this->mockHandler->append(new Response(200, [], json_encode([
233+
'data' => [
234+
'__type' => [
235+
'name' => $objectName,
236+
'kind' => FieldTypeKindEnum::INPUT_OBJECT,
237+
'inputFields' => [
238+
[
239+
'name' => 'enumVal',
240+
'description' => null,
241+
'defaultValue' => null,
242+
'type' => [
243+
'name' => null,
244+
'kind' => FieldTypeKindEnum::NON_NULL,
245+
'description' => null,
246+
'ofType' => [
247+
'name' => 'Some',
248+
'kind' => FieldTypeKindEnum::ENUM_OBJECT,
249+
'description' => null,
250+
'ofType' => null,
251+
]
252+
]
253+
],
254+
]
255+
]
256+
]
257+
])));
258+
$this->mockHandler->append(new Response(200, [], json_encode([
259+
'data' => [
260+
'__type' => [
261+
'name' => 'Some',
262+
'kind' => FieldTypeKindEnum::ENUM_OBJECT,
263+
'enumValues' => [
264+
[
265+
'name' => 'some_value',
266+
'description' => null,
267+
]
268+
]
269+
]
270+
]
271+
])));
272+
$this->classGenerator->generateInputObject($objectName);
273+
274+
$objectName .= 'InputObject';
275+
$this->assertFileEquals(
276+
static::getExpectedFilesDir() . "/input_objects/$objectName.php",
277+
static::getGeneratedFilesDir() . "/$objectName.php"
278+
);
279+
}
280+
224281
/**
225282
* @covers \GraphQL\SchemaGenerator\SchemaClassGenerator::generateInputObject
226283
* @covers \GraphQL\SchemaGenerator\SchemaClassGenerator::generateObject
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace GraphQL\Tests\SchemaObject;
4+
5+
use GraphQL\SchemaObject\InputObject;
6+
7+
class WithEnumValueInputObject extends InputObject
8+
{
9+
protected $enumVal;
10+
11+
public function setEnumVal($enumVal)
12+
{
13+
$this->enumVal = $enumVal;
14+
15+
return $this;
16+
}
17+
}

0 commit comments

Comments
 (0)