mirror of
https://github.com/retailcrm/graphql-php.git
synced 2024-11-29 08:26:02 +03:00
More star wars tests
This commit is contained in:
parent
04b2e409eb
commit
1b2f74f115
@ -118,6 +118,20 @@ class StarWarsData
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $episode
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
static function getHero($episode)
|
||||||
|
{
|
||||||
|
if ($episode === 5) {
|
||||||
|
// Luke is the hero of Episode V.
|
||||||
|
return self::luke();
|
||||||
|
}
|
||||||
|
// Artoo is the hero otherwise.
|
||||||
|
return self::artoo();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows us to query for a character's friends.
|
* Allows us to query for a character's friends.
|
||||||
*/
|
*/
|
||||||
|
@ -22,10 +22,10 @@ class StarWarsIntrospectionTest extends \PHPUnit_Framework_TestCase
|
|||||||
'__schema' => [
|
'__schema' => [
|
||||||
'types' => [
|
'types' => [
|
||||||
['name' => 'Query'],
|
['name' => 'Query'],
|
||||||
|
['name' => 'Episode'],
|
||||||
['name' => 'Character'],
|
['name' => 'Character'],
|
||||||
['name' => 'Human'],
|
['name' => 'Human'],
|
||||||
['name' => 'String'],
|
['name' => 'String'],
|
||||||
['name' => 'Episode'],
|
|
||||||
['name' => 'Droid'],
|
['name' => 'Droid'],
|
||||||
['name' => '__Schema'],
|
['name' => '__Schema'],
|
||||||
['name' => '__Type'],
|
['name' => '__Type'],
|
||||||
@ -266,6 +266,97 @@ class StarWarsIntrospectionTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertValidQuery($query, $expected);
|
$this->assertValidQuery($query, $expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testAllowsQueryingTheSchemaForFieldArgs()
|
||||||
|
{
|
||||||
|
$query = '
|
||||||
|
query IntrospectionQueryTypeQuery {
|
||||||
|
__schema {
|
||||||
|
queryType {
|
||||||
|
fields {
|
||||||
|
name
|
||||||
|
args {
|
||||||
|
name
|
||||||
|
description
|
||||||
|
type {
|
||||||
|
name
|
||||||
|
kind
|
||||||
|
ofType {
|
||||||
|
name
|
||||||
|
kind
|
||||||
|
}
|
||||||
|
}
|
||||||
|
defaultValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
';
|
||||||
|
|
||||||
|
$expected = array(
|
||||||
|
'__schema' => [
|
||||||
|
'queryType' => [
|
||||||
|
'fields' => [
|
||||||
|
[
|
||||||
|
'name' => 'hero',
|
||||||
|
'args' => [
|
||||||
|
[
|
||||||
|
'defaultValue' => NULL,
|
||||||
|
'description' => 'If omitted, returns the hero of the whole saga. If provided, returns the hero of that particular episode.',
|
||||||
|
'name' => 'episode',
|
||||||
|
'type' => [
|
||||||
|
'kind' => 'ENUM',
|
||||||
|
'name' => 'Episode',
|
||||||
|
'ofType' => NULL,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'human',
|
||||||
|
'args' => [
|
||||||
|
[
|
||||||
|
'name' => 'id',
|
||||||
|
'description' => 'id of the human',
|
||||||
|
'type' => [
|
||||||
|
'kind' => 'NON_NULL',
|
||||||
|
'name' => NULL,
|
||||||
|
'ofType' => [
|
||||||
|
'kind' => 'SCALAR',
|
||||||
|
'name' => 'String',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'defaultValue' => NULL,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'droid',
|
||||||
|
'args' => [
|
||||||
|
[
|
||||||
|
'name' => 'id',
|
||||||
|
'description' => 'id of the droid',
|
||||||
|
'type' => [
|
||||||
|
'kind' => 'NON_NULL',
|
||||||
|
'name' => NULL,
|
||||||
|
'ofType' =>
|
||||||
|
[
|
||||||
|
'kind' => 'SCALAR',
|
||||||
|
'name' => 'String',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'defaultValue' => NULL,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertValidQuery($query, $expected);
|
||||||
|
}
|
||||||
|
|
||||||
// it('Allows querying the schema for documentation')
|
// it('Allows querying the schema for documentation')
|
||||||
public function testAllowsQueryingTheSchemaForDocumentation()
|
public function testAllowsQueryingTheSchemaForDocumentation()
|
||||||
{
|
{
|
||||||
|
@ -320,6 +320,27 @@ class StarWarsQueryTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertValidQuery($query, $expected);
|
$this->assertValidQuery($query, $expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testVerifyThatLukeIsHuman()
|
||||||
|
{
|
||||||
|
$query = '
|
||||||
|
query CheckTypeOfLuke {
|
||||||
|
hero(episode: EMPIRE) {
|
||||||
|
__typename
|
||||||
|
name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
';
|
||||||
|
|
||||||
|
$expected = [
|
||||||
|
'hero' => [
|
||||||
|
'__typename' => 'Human',
|
||||||
|
'name' => 'Luke Skywalker'
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->assertValidQuery($query, $expected);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper function to test a query and the expected response.
|
* Helper function to test a query and the expected response.
|
||||||
*/
|
*/
|
||||||
|
@ -47,7 +47,7 @@ use GraphQL\Type\Definition\Type;
|
|||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* type Query {
|
* type Query {
|
||||||
* hero: Character
|
* hero(episode: Episode): Character
|
||||||
* human(id: String!): Human
|
* human(id: String!): Human
|
||||||
* droid(id: String!): Droid
|
* droid(id: String!): Droid
|
||||||
* }
|
* }
|
||||||
@ -227,7 +227,7 @@ class StarWarsSchema
|
|||||||
*
|
*
|
||||||
* This implements the following type system shorthand:
|
* This implements the following type system shorthand:
|
||||||
* type Query {
|
* type Query {
|
||||||
* hero: Character
|
* hero(episode: Episode): Character
|
||||||
* human(id: String!): Human
|
* human(id: String!): Human
|
||||||
* droid(id: String!): Droid
|
* droid(id: String!): Droid
|
||||||
* }
|
* }
|
||||||
@ -238,13 +238,25 @@ class StarWarsSchema
|
|||||||
'fields' => [
|
'fields' => [
|
||||||
'hero' => [
|
'hero' => [
|
||||||
'type' => $characterInterface,
|
'type' => $characterInterface,
|
||||||
'resolve' => function () {
|
'args' => [
|
||||||
return StarWarsData::artoo();
|
'episode' => [
|
||||||
|
'description' => 'If omitted, returns the hero of the whole saga. If provided, returns the hero of that particular episode.',
|
||||||
|
'type' => $episodeEnum
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'resolve' => function ($root, $args) {
|
||||||
|
return StarWarsData::getHero($args['episode']);
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
'human' => [
|
'human' => [
|
||||||
'type' => $humanType,
|
'type' => $humanType,
|
||||||
'args' => ['id' => ['name' => 'id', 'type' => Type::nonNull(Type::string())]],
|
'args' => [
|
||||||
|
'id' => [
|
||||||
|
'name' => 'id',
|
||||||
|
'description' => 'id of the human',
|
||||||
|
'type' => Type::nonNull(Type::string())
|
||||||
|
]
|
||||||
|
],
|
||||||
'resolve' => function ($root, $args) {
|
'resolve' => function ($root, $args) {
|
||||||
$humans = StarWarsData::humans();
|
$humans = StarWarsData::humans();
|
||||||
return isset($humans[$args['id']]) ? $humans[$args['id']] : null;
|
return isset($humans[$args['id']]) ? $humans[$args['id']] : null;
|
||||||
@ -252,7 +264,13 @@ class StarWarsSchema
|
|||||||
],
|
],
|
||||||
'droid' => [
|
'droid' => [
|
||||||
'type' => $droidType,
|
'type' => $droidType,
|
||||||
'args' => ['id' => ['name' => 'id', 'type' => Type::nonNull(Type::string())]],
|
'args' => [
|
||||||
|
'id' => [
|
||||||
|
'name' => 'id',
|
||||||
|
'description' => 'id of the droid',
|
||||||
|
'type' => Type::nonNull(Type::string())
|
||||||
|
]
|
||||||
|
],
|
||||||
'resolve' => function ($root, $args) {
|
'resolve' => function ($root, $args) {
|
||||||
$droids = StarWarsData::droids();
|
$droids = StarWarsData::droids();
|
||||||
return isset($droids[$args['id']]) ? $droids[$args['id']] : null;
|
return isset($droids[$args['id']]) ? $droids[$args['id']] : null;
|
||||||
|
Loading…
Reference in New Issue
Block a user