From 5148c3bf03973c6643f55361b52c739e3bf0bce8 Mon Sep 17 00:00:00 2001 From: vladar Date: Thu, 20 Oct 2016 19:09:48 +0700 Subject: [PATCH] Allow one-liner shorthand for field definitions (#47) --- src/Type/Definition/FieldDefinition.php | 3 +++ tests/Type/DefinitionTest.php | 34 +++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/Type/Definition/FieldDefinition.php b/src/Type/Definition/FieldDefinition.php index 44c380b..479f802 100644 --- a/src/Type/Definition/FieldDefinition.php +++ b/src/Type/Definition/FieldDefinition.php @@ -95,6 +95,9 @@ class FieldDefinition { $map = []; foreach ($fields as $name => $field) { + if ($field instanceof Type) { + $field = ['type' => $field]; + } if (!isset($field['name'])) { $field['name'] = $name; } diff --git a/tests/Type/DefinitionTest.php b/tests/Type/DefinitionTest.php index 5257e88..0a1c3b3 100644 --- a/tests/Type/DefinitionTest.php +++ b/tests/Type/DefinitionTest.php @@ -617,4 +617,38 @@ class DefinitionTest extends \PHPUnit_Framework_TestCase $this->assertSame($interface->getField('nested')->getType(), $interface); $this->assertSame($interface->getField('value')->getType(), Type::string()); } + + public function testAllowsShorthandFieldDefinition() + { + $interface = new InterfaceType([ + 'name' => 'SomeInterface', + 'fields' => function() use (&$interface) { + return [ + 'value' => Type::string(), + 'nested' => $interface + ]; + } + ]); + + $query = new ObjectType([ + 'name' => 'Query', + 'fields' => [ + 'test' => $interface + ] + ]); + + $schema = new Schema([ + 'query' => $query + ]); + + $valueField = $schema->getType('SomeInterface')->getField('value'); + $nestedField = $schema->getType('SomeInterface')->getField('nested'); + + $this->assertEquals(Type::string(), $valueField->getType()); + $this->assertEquals($interface, $nestedField->getType()); + + $testField = $schema->getType('Query')->getField('test'); + $this->assertEquals($interface, $testField->getType()); + $this->assertEquals('test', $testField->name); + } }