graphql-php/tests/Validator/ScalarLeafsTest.php

118 lines
3.2 KiB
PHP
Raw Normal View History

2015-07-15 20:05:46 +03:00
<?php
namespace GraphQL\Validator;
use GraphQL\FormattedError;
use GraphQL\Language\SourceLocation;
use GraphQL\Validator\Rules\ScalarLeafs;
class ScalarLeafsTest extends TestCase
{
// Validate: Scalar leafs
public function testValidScalarSelection()
{
$this->expectPassesRule(new ScalarLeafs, '
fragment scalarSelection on Dog {
barks
}
');
}
public function testObjectTypeMissingSelection()
{
$this->expectFailsRule(new ScalarLeafs, '
query directQueryOnObjectWithoutSubFields {
human
}
', [$this->missingObjSubselection('human', 'Human', 3, 9)]);
}
public function testInterfaceTypeMissingSelection()
{
$this->expectFailsRule(new ScalarLeafs, '
{
human { pets }
}
', [$this->missingObjSubselection('pets', '[Pet]', 3, 17)]);
}
public function testValidScalarSelectionWithArgs()
{
$this->expectPassesRule(new ScalarLeafs, '
fragment scalarSelectionWithArgs on Dog {
doesKnowCommand(dogCommand: SIT)
}
');
}
public function testScalarSelectionNotAllowedOnBoolean()
{
$this->expectFailsRule(new ScalarLeafs, '
fragment scalarSelectionsNotAllowedOnBoolean on Dog {
barks { sinceWhen }
}
',
[$this->noScalarSubselection('barks', 'Boolean', 3, 15)]);
}
public function testScalarSelectionNotAllowedOnEnum()
{
$this->expectFailsRule(new ScalarLeafs, '
fragment scalarSelectionsNotAllowedOnEnum on Cat {
furColor { inHexdec }
}
',
[$this->noScalarSubselection('furColor', 'FurColor', 3, 18)]
);
}
public function testScalarSelectionNotAllowedWithArgs()
{
$this->expectFailsRule(new ScalarLeafs, '
fragment scalarSelectionsNotAllowedWithArgs on Dog {
doesKnowCommand(dogCommand: SIT) { sinceWhen }
}
',
[$this->noScalarSubselection('doesKnowCommand', 'Boolean', 3, 42)]
);
}
public function testScalarSelectionNotAllowedWithDirectives()
{
$this->expectFailsRule(new ScalarLeafs, '
fragment scalarSelectionsNotAllowedWithDirectives on Dog {
name @include(if: true) { isAlsoHumanName }
2015-07-15 20:05:46 +03:00
}
',
[$this->noScalarSubselection('name', 'String', 3, 33)]
2015-07-15 20:05:46 +03:00
);
}
public function testScalarSelectionNotAllowedWithDirectivesAndArgs()
{
$this->expectFailsRule(new ScalarLeafs, '
fragment scalarSelectionsNotAllowedWithDirectivesAndArgs on Dog {
doesKnowCommand(dogCommand: SIT) @include(if: true) { sinceWhen }
2015-07-15 20:05:46 +03:00
}
',
[$this->noScalarSubselection('doesKnowCommand', 'Boolean', 3, 61)]
2015-07-15 20:05:46 +03:00
);
}
private function noScalarSubselection($field, $type, $line, $column)
{
return FormattedError::create(
ScalarLeafs::noSubselectionAllowedMessage($field, $type),
2015-07-15 20:05:46 +03:00
[new SourceLocation($line, $column)]
);
}
private function missingObjSubselection($field, $type, $line, $column)
{
return FormattedError::create(
ScalarLeafs::requiredSubselectionMessage($field, $type),
2015-07-15 20:05:46 +03:00
[new SourceLocation($line, $column)]
);
}
}