Allow one-liner shorthand for field definitions (#47)

This commit is contained in:
vladar 2016-10-20 19:09:48 +07:00
parent 09cc313072
commit 5148c3bf03
2 changed files with 37 additions and 0 deletions

View File

@ -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;
}

View File

@ -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);
}
}