graphql-php/tests/Language/SchemaPrinterTest.php

128 lines
2.9 KiB
PHP
Raw Normal View History

2016-04-24 14:01:04 +03:00
<?php
namespace GraphQL\Tests;
use GraphQL\Language\AST\NameNode;
use GraphQL\Language\AST\ScalarTypeDefinitionNode;
2016-04-24 14:01:04 +03:00
use GraphQL\Language\Parser;
use GraphQL\Language\Printer;
class SchemaPrinterTest extends \PHPUnit_Framework_TestCase
{
/**
* @it prints minimal ast
*/
public function testPrintsMinimalAst()
{
$ast = new ScalarTypeDefinitionNode([
'name' => new NameNode(['value' => 'foo'])
2016-04-24 14:01:04 +03:00
]);
$this->assertEquals('scalar foo', Printer::doPrint($ast));
}
/**
* @it produces helpful error messages
*/
public function testProducesHelpfulErrorMessages()
{
// $badAst1 = { random: 'Data' };
$badAst = (object) ['random' => 'Data'];
$this->setExpectedException('Exception', 'Invalid AST Node: {"random":"Data"}');
Printer::doPrint($badAst);
}
/**
* @it does not alter ast
*/
public function testDoesNotAlterAst()
{
$kitchenSink = file_get_contents(__DIR__ . '/schema-kitchen-sink.graphql');
$ast = Parser::parse($kitchenSink);
$astCopy = $ast->cloneDeep();
Printer::doPrint($ast);
$this->assertEquals($astCopy, $ast);
}
public function testPrintsKitchenSink()
{
$kitchenSink = file_get_contents(__DIR__ . '/schema-kitchen-sink.graphql');
$ast = Parser::parse($kitchenSink);
$printed = Printer::doPrint($ast);
$expected = 'schema {
query: QueryType
mutation: MutationType
}
type Foo implements Bar {
one: Type
two(argument: InputType!): Type
three(argument: InputType, other: String): Int
four(argument: String = "string"): String
five(argument: [String] = ["string", "string"]): String
six(argument: InputType = {key: "value"}): Type
2016-11-18 19:59:28 +03:00
seven(argument: Int = null): Type
2016-04-24 14:01:04 +03:00
}
type AnnotatedObject @onObject(arg: "value") {
annotatedField(arg: Type = "default" @onArg): Type @onField
}
2016-04-24 14:01:04 +03:00
interface Bar {
one: Type
four(argument: String = "string"): String
}
interface AnnotatedInterface @onInterface {
annotatedField(arg: Type @onArg): Type @onField
}
2016-04-24 14:01:04 +03:00
union Feed = Story | Article | Advert
union AnnotatedUnion @onUnion = A | B
union AnnotatedUnionTwo @onUnion = A | B
2016-04-24 14:01:04 +03:00
scalar CustomScalar
scalar AnnotatedScalar @onScalar
2016-04-24 14:01:04 +03:00
enum Site {
DESKTOP
MOBILE
}
enum AnnotatedEnum @onEnum {
ANNOTATED_VALUE @onEnumValue
OTHER_VALUE
}
2016-04-24 14:01:04 +03:00
input InputType {
key: String!
answer: Int = 42
}
input AnnotatedInput @onInputObjectType {
annotatedField: Type @onField
}
2016-04-24 14:01:04 +03:00
extend type Foo {
seven(argument: [String]): Type
}
extend type Foo @onType {}
type NoFields {}
2016-04-24 14:01:04 +03:00
directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
directive @include2(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
2016-04-24 14:01:04 +03:00
';
$this->assertEquals($expected, $printed);
}
}