mirror of
https://github.com/retailcrm/graphql-php.git
synced 2025-02-11 10:09:24 +03:00
Add Lists Promise tests
This commit is contained in:
parent
7f1e9d051b
commit
35d7d83088
@ -1,9 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace GraphQL\Tests\Executor;
|
namespace GraphQL\Tests\Executor;
|
||||||
|
|
||||||
use GraphQL\Error\Error;
|
use GraphQL\Executor\ExecutionResult;
|
||||||
use GraphQL\Executor\Executor;
|
use GraphQL\Executor\Executor;
|
||||||
use GraphQL\Error\FormattedError;
|
use GraphQL\Error\FormattedError;
|
||||||
|
use GraphQL\Executor\Promise\Adapter\ReactPromiseAdapter;
|
||||||
use GraphQL\Language\Parser;
|
use GraphQL\Language\Parser;
|
||||||
use GraphQL\Language\SourceLocation;
|
use GraphQL\Language\SourceLocation;
|
||||||
use GraphQL\Schema;
|
use GraphQL\Schema;
|
||||||
@ -12,6 +14,521 @@ use GraphQL\Type\Definition\Type;
|
|||||||
|
|
||||||
class ListsTest extends \PHPUnit_Framework_TestCase
|
class ListsTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
Executor::setPromiseAdapter(new ReactPromiseAdapter());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function tearDownAfterClass()
|
||||||
|
{
|
||||||
|
Executor::setPromiseAdapter(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Describe: Execute: Handles list nullability
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @describe [T]
|
||||||
|
*/
|
||||||
|
public function testHandlesNullableListsWithArray()
|
||||||
|
{
|
||||||
|
// Contains values
|
||||||
|
$this->checkHandlesNullableLists(
|
||||||
|
[ 1, 2 ],
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Contains null
|
||||||
|
$this->checkHandlesNullableLists(
|
||||||
|
[ 1, null, 2 ],
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, null, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Returns null
|
||||||
|
$this->checkHandlesNullableLists(
|
||||||
|
null,
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => null ] ] ]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @describe [T]
|
||||||
|
*/
|
||||||
|
public function testHandlesNullableListsWithPromiseArray()
|
||||||
|
{
|
||||||
|
// Contains values
|
||||||
|
$this->checkHandlesNullableLists(
|
||||||
|
\React\Promise\resolve([ 1, 2 ]),
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Contains null
|
||||||
|
$this->checkHandlesNullableLists(
|
||||||
|
\React\Promise\resolve([ 1, null, 2 ]),
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, null, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Returns null
|
||||||
|
$this->checkHandlesNullableLists(
|
||||||
|
\React\Promise\resolve(null),
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => null ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Rejected
|
||||||
|
$this->checkHandlesNullableLists(
|
||||||
|
function () {
|
||||||
|
return \React\Promise\reject(new \Exception('bad'));
|
||||||
|
},
|
||||||
|
[
|
||||||
|
'data' => ['nest' => ['test' => null]],
|
||||||
|
'errors' => [
|
||||||
|
[
|
||||||
|
'message' => 'bad',
|
||||||
|
'locations' => [['line' => 1, 'column' => 10]],
|
||||||
|
'path' => ['nest', 'test']
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @describe [T]
|
||||||
|
*/
|
||||||
|
public function testHandlesNullableListsWithArrayPromise()
|
||||||
|
{
|
||||||
|
// Contains values
|
||||||
|
$this->checkHandlesNullableLists(
|
||||||
|
[ \React\Promise\resolve(1), \React\Promise\resolve(2) ],
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Contains null
|
||||||
|
$this->checkHandlesNullableLists(
|
||||||
|
[ \React\Promise\resolve(1), \React\Promise\resolve(null), \React\Promise\resolve(2) ],
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, null, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Returns null
|
||||||
|
$this->checkHandlesNullableLists(
|
||||||
|
\React\Promise\resolve(null),
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => null ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Contains reject
|
||||||
|
$this->checkHandlesNullableLists(
|
||||||
|
function () {
|
||||||
|
return [ \React\Promise\resolve(1), \React\Promise\reject(new \Exception('bad')), \React\Promise\resolve(2) ];
|
||||||
|
},
|
||||||
|
[
|
||||||
|
'data' => ['nest' => ['test' => [1, null, 2]]],
|
||||||
|
'errors' => [
|
||||||
|
[
|
||||||
|
'message' => 'bad',
|
||||||
|
'locations' => [['line' => 1, 'column' => 10]],
|
||||||
|
'path' => ['nest', 'test', 1]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @describe [T]!
|
||||||
|
*/
|
||||||
|
public function testHandlesNonNullableListsWithArray()
|
||||||
|
{
|
||||||
|
// Contains values
|
||||||
|
$this->checkHandlesNonNullableLists(
|
||||||
|
[ 1, 2 ],
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Contains null
|
||||||
|
$this->checkHandlesNonNullableLists(
|
||||||
|
[ 1, null, 2 ],
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, null, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Returns null
|
||||||
|
$this->checkHandlesNonNullableLists(
|
||||||
|
null,
|
||||||
|
[
|
||||||
|
'data' => [ 'nest' => null ],
|
||||||
|
'errors' => [
|
||||||
|
FormattedError::create(
|
||||||
|
'Cannot return null for non-nullable field DataType.test.',
|
||||||
|
[ new SourceLocation(1, 10) ]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @describe [T]!
|
||||||
|
*/
|
||||||
|
public function testHandlesNonNullableListsWithPromiseArray()
|
||||||
|
{
|
||||||
|
// Contains values
|
||||||
|
$this->checkHandlesNonNullableLists(
|
||||||
|
\React\Promise\resolve([ 1, 2 ]),
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Contains null
|
||||||
|
$this->checkHandlesNonNullableLists(
|
||||||
|
\React\Promise\resolve([ 1, null, 2 ]),
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, null, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Returns null
|
||||||
|
$this->checkHandlesNonNullableLists(
|
||||||
|
null,
|
||||||
|
[
|
||||||
|
'data' => [ 'nest' => null ],
|
||||||
|
'errors' => [
|
||||||
|
FormattedError::create(
|
||||||
|
'Cannot return null for non-nullable field DataType.test.',
|
||||||
|
[ new SourceLocation(1, 10) ]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Rejected
|
||||||
|
$this->checkHandlesNonNullableLists(
|
||||||
|
function () {
|
||||||
|
return \React\Promise\reject(new \Exception('bad'));
|
||||||
|
},
|
||||||
|
[
|
||||||
|
'data' => ['nest' => null],
|
||||||
|
'errors' => [
|
||||||
|
[
|
||||||
|
'message' => 'bad',
|
||||||
|
'locations' => [['line' => 1, 'column' => 10]],
|
||||||
|
'path' => ['nest', 'test']
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @describe [T]!
|
||||||
|
*/
|
||||||
|
public function testHandlesNonNullableListsWithArrayPromise()
|
||||||
|
{
|
||||||
|
// Contains values
|
||||||
|
$this->checkHandlesNonNullableLists(
|
||||||
|
[ \React\Promise\resolve(1), \React\Promise\resolve(2) ],
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Contains null
|
||||||
|
$this->checkHandlesNonNullableLists(
|
||||||
|
[ \React\Promise\resolve(1), \React\Promise\resolve(null), \React\Promise\resolve(2) ],
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, null, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Contains reject
|
||||||
|
$this->checkHandlesNonNullableLists(
|
||||||
|
function () {
|
||||||
|
return [ \React\Promise\resolve(1), \React\Promise\reject(new \Exception('bad')), \React\Promise\resolve(2) ];
|
||||||
|
},
|
||||||
|
[
|
||||||
|
'data' => ['nest' => ['test' => [1, null, 2]]],
|
||||||
|
'errors' => [
|
||||||
|
[
|
||||||
|
'message' => 'bad',
|
||||||
|
'locations' => [['line' => 1, 'column' => 10]],
|
||||||
|
'path' => ['nest', 'test', 1]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @describe [T!]
|
||||||
|
*/
|
||||||
|
public function testHandlesListOfNonNullsWithArray()
|
||||||
|
{
|
||||||
|
// Contains values
|
||||||
|
$this->checkHandlesListOfNonNulls(
|
||||||
|
[ 1, 2 ],
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Contains null
|
||||||
|
$this->checkHandlesListOfNonNulls(
|
||||||
|
[ 1, null, 2 ],
|
||||||
|
[
|
||||||
|
'data' => [ 'nest' => [ 'test' => null ] ],
|
||||||
|
'errors' => [
|
||||||
|
FormattedError::create(
|
||||||
|
'Cannot return null for non-nullable field DataType.test.',
|
||||||
|
[ new SourceLocation(1, 10) ]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Returns null
|
||||||
|
$this->checkHandlesListOfNonNulls(
|
||||||
|
null,
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => null ] ] ]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @describe [T!]
|
||||||
|
*/
|
||||||
|
public function testHandlesListOfNonNullsWithPromiseArray()
|
||||||
|
{
|
||||||
|
// Contains values
|
||||||
|
$this->checkHandlesListOfNonNulls(
|
||||||
|
\React\Promise\resolve([ 1, 2 ]),
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Contains null
|
||||||
|
$this->checkHandlesListOfNonNulls(
|
||||||
|
\React\Promise\resolve([ 1, null, 2 ]),
|
||||||
|
[
|
||||||
|
'data' => [ 'nest' => [ 'test' => null ] ],
|
||||||
|
'errors' => [
|
||||||
|
FormattedError::create(
|
||||||
|
'Cannot return null for non-nullable field DataType.test.',
|
||||||
|
[ new SourceLocation(1, 10) ]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Returns null
|
||||||
|
$this->checkHandlesListOfNonNulls(
|
||||||
|
\React\Promise\resolve(null),
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => null ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Rejected
|
||||||
|
$this->checkHandlesListOfNonNulls(
|
||||||
|
function () {
|
||||||
|
return \React\Promise\reject(new \Exception('bad'));
|
||||||
|
},
|
||||||
|
[
|
||||||
|
'data' => ['nest' => ['test' => null]],
|
||||||
|
'errors' => [
|
||||||
|
[
|
||||||
|
'message' => 'bad',
|
||||||
|
'locations' => [['line' => 1, 'column' => 10]],
|
||||||
|
'path' => ['nest', 'test']
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @describe [T]!
|
||||||
|
*/
|
||||||
|
public function testHandlesListOfNonNullsWithArrayPromise()
|
||||||
|
{
|
||||||
|
// Contains values
|
||||||
|
$this->checkHandlesListOfNonNulls(
|
||||||
|
[ \React\Promise\resolve(1), \React\Promise\resolve(2) ],
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Contains null
|
||||||
|
$this->checkHandlesListOfNonNulls(
|
||||||
|
[ \React\Promise\resolve(1), \React\Promise\resolve(null), \React\Promise\resolve(2) ],
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => null ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Contains reject
|
||||||
|
$this->checkHandlesListOfNonNulls(
|
||||||
|
function () {
|
||||||
|
return [ \React\Promise\resolve(1), \React\Promise\reject(new \Exception('bad')), \React\Promise\resolve(2) ];
|
||||||
|
},
|
||||||
|
[
|
||||||
|
'data' => ['nest' => ['test' => null]],
|
||||||
|
'errors' => [
|
||||||
|
[
|
||||||
|
'message' => 'bad',
|
||||||
|
'locations' => [['line' => 1, 'column' => 10]],
|
||||||
|
'path' => ['nest', 'test', 1]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @describe [T!]!
|
||||||
|
*/
|
||||||
|
public function testHandlesNonNullListOfNonNullsWithArray()
|
||||||
|
{
|
||||||
|
// Contains values
|
||||||
|
$this->checkHandlesNonNullListOfNonNulls(
|
||||||
|
[ 1, 2 ],
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Contains null
|
||||||
|
$this->checkHandlesNonNullListOfNonNulls(
|
||||||
|
[ 1, null, 2 ],
|
||||||
|
[
|
||||||
|
'data' => [ 'nest' => null ],
|
||||||
|
'errors' => [
|
||||||
|
FormattedError::create(
|
||||||
|
'Cannot return null for non-nullable field DataType.test.',
|
||||||
|
[ new SourceLocation(1, 10) ]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Returns null
|
||||||
|
$this->checkHandlesNonNullListOfNonNulls(
|
||||||
|
null,
|
||||||
|
[
|
||||||
|
'data' => [ 'nest' => null ],
|
||||||
|
'errors' => [
|
||||||
|
FormattedError::create(
|
||||||
|
'Cannot return null for non-nullable field DataType.test.',
|
||||||
|
[ new SourceLocation(1, 10) ]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @describe [T!]!
|
||||||
|
*/
|
||||||
|
public function testHandlesNonNullListOfNonNullsWithPromiseArray()
|
||||||
|
{
|
||||||
|
// Contains values
|
||||||
|
$this->checkHandlesNonNullListOfNonNulls(
|
||||||
|
\React\Promise\resolve([ 1, 2 ]),
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Contains null
|
||||||
|
$this->checkHandlesNonNullListOfNonNulls(
|
||||||
|
\React\Promise\resolve([ 1, null, 2 ]),
|
||||||
|
[
|
||||||
|
'data' => [ 'nest' => null ],
|
||||||
|
'errors' => [
|
||||||
|
FormattedError::create(
|
||||||
|
'Cannot return null for non-nullable field DataType.test.',
|
||||||
|
[ new SourceLocation(1, 10) ]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Returns null
|
||||||
|
$this->checkHandlesNonNullListOfNonNulls(
|
||||||
|
\React\Promise\resolve(null),
|
||||||
|
[
|
||||||
|
'data' => [ 'nest' => null ],
|
||||||
|
'errors' => [
|
||||||
|
FormattedError::create(
|
||||||
|
'Cannot return null for non-nullable field DataType.test.',
|
||||||
|
[ new SourceLocation(1, 10) ]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Rejected
|
||||||
|
$this->checkHandlesNonNullListOfNonNulls(
|
||||||
|
function () {
|
||||||
|
return \React\Promise\reject(new \Exception('bad'));
|
||||||
|
},
|
||||||
|
[
|
||||||
|
'data' => ['nest' => null ],
|
||||||
|
'errors' => [
|
||||||
|
[
|
||||||
|
'message' => 'bad',
|
||||||
|
'locations' => [['line' => 1, 'column' => 10]],
|
||||||
|
'path' => ['nest', 'test']
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @describe [T!]!
|
||||||
|
*/
|
||||||
|
public function testHandlesNonNullListOfNonNullsWithArrayPromise()
|
||||||
|
{
|
||||||
|
// Contains values
|
||||||
|
$this->checkHandlesNonNullListOfNonNulls(
|
||||||
|
[ \React\Promise\resolve(1), \React\Promise\resolve(2) ],
|
||||||
|
[ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Contains null
|
||||||
|
$this->checkHandlesNonNullListOfNonNulls(
|
||||||
|
[ \React\Promise\resolve(1), \React\Promise\resolve(null), \React\Promise\resolve(2) ],
|
||||||
|
[
|
||||||
|
'data' => [ 'nest' => null ],
|
||||||
|
'errors' => [
|
||||||
|
FormattedError::create(
|
||||||
|
'Cannot return null for non-nullable field DataType.test.',
|
||||||
|
[ new SourceLocation(1, 10) ]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
// Contains reject
|
||||||
|
$this->checkHandlesNonNullListOfNonNulls(
|
||||||
|
function () {
|
||||||
|
return [ \React\Promise\resolve(1), \React\Promise\reject(new \Exception('bad')), \React\Promise\resolve(2) ];
|
||||||
|
},
|
||||||
|
[
|
||||||
|
'data' => ['nest' => null ],
|
||||||
|
'errors' => [
|
||||||
|
[
|
||||||
|
'message' => 'bad',
|
||||||
|
'locations' => [['line' => 1, 'column' => 10]],
|
||||||
|
'path' => ['nest', 'test']
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function checkHandlesNullableLists($testData, $expected)
|
||||||
|
{
|
||||||
|
$testType = Type::listOf(Type::int());;
|
||||||
|
$this->check($testType, $testData, $expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function checkHandlesNonNullableLists($testData, $expected)
|
||||||
|
{
|
||||||
|
$testType = Type::nonNull(Type::listOf(Type::int()));
|
||||||
|
$this->check($testType, $testData, $expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function checkHandlesListOfNonNulls($testData, $expected)
|
||||||
|
{
|
||||||
|
$testType = Type::listOf(Type::nonNull(Type::int()));
|
||||||
|
$this->check($testType, $testData, $expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function checkHandlesNonNullListOfNonNulls($testData, $expected)
|
||||||
|
{
|
||||||
|
$testType = Type::nonNull(Type::listOf(Type::nonNull(Type::int())));
|
||||||
|
$this->check($testType, $testData, $expected);
|
||||||
|
}
|
||||||
|
|
||||||
private function check($testType, $testData, $expected)
|
private function check($testType, $testData, $expected)
|
||||||
{
|
{
|
||||||
$data = ['test' => $testData];
|
$data = ['test' => $testData];
|
||||||
@ -41,157 +558,19 @@ class ListsTest extends \PHPUnit_Framework_TestCase
|
|||||||
$ast = Parser::parse('{ nest { test } }');
|
$ast = Parser::parse('{ nest { test } }');
|
||||||
|
|
||||||
$result = Executor::execute($schema, $ast, $data);
|
$result = Executor::execute($schema, $ast, $data);
|
||||||
$this->assertArraySubset($expected, $result->toArray());
|
$this->assertArraySubset($expected, self::awaitPromise($result));
|
||||||
}
|
|
||||||
|
|
||||||
// Describe: Execute: Handles list nullability
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @describe [T]
|
|
||||||
*/
|
|
||||||
public function testHandlesNullableLists()
|
|
||||||
{
|
|
||||||
$type = Type::listOf(Type::int());
|
|
||||||
|
|
||||||
// Contains values
|
|
||||||
$this->check(
|
|
||||||
$type,
|
|
||||||
[ 1, 2 ],
|
|
||||||
[ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ]
|
|
||||||
);
|
|
||||||
|
|
||||||
// Contains null
|
|
||||||
$this->check(
|
|
||||||
$type,
|
|
||||||
[ 1, null, 2 ],
|
|
||||||
[ 'data' => [ 'nest' => [ 'test' => [ 1, null, 2 ] ] ] ]
|
|
||||||
);
|
|
||||||
|
|
||||||
// Returns null
|
|
||||||
$this->check(
|
|
||||||
$type,
|
|
||||||
null,
|
|
||||||
[ 'data' => [ 'nest' => [ 'test' => null ] ] ]
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @describe [T]!
|
* @param \GraphQL\Executor\Promise\Promise $promise
|
||||||
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function testHandlesNonNullableLists()
|
private static function awaitPromise($promise)
|
||||||
{
|
{
|
||||||
$type = Type::nonNull(Type::listOf(Type::int()));
|
$results = null;
|
||||||
|
$promise->then(function (ExecutionResult $executionResult) use (&$results) {
|
||||||
// Contains values
|
$results = $executionResult->toArray();
|
||||||
$this->check(
|
});
|
||||||
$type,
|
return $results;
|
||||||
[ 1, 2 ],
|
|
||||||
[ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ]
|
|
||||||
);
|
|
||||||
|
|
||||||
// Contains null
|
|
||||||
$this->check(
|
|
||||||
$type,
|
|
||||||
[ 1, null, 2 ],
|
|
||||||
[ 'data' => [ 'nest' => [ 'test' => [ 1, null, 2 ] ] ] ]
|
|
||||||
);
|
|
||||||
|
|
||||||
// Returns null
|
|
||||||
$this->check(
|
|
||||||
$type,
|
|
||||||
null,
|
|
||||||
[
|
|
||||||
'data' => [ 'nest' => null ],
|
|
||||||
'errors' => [
|
|
||||||
FormattedError::create(
|
|
||||||
'Cannot return null for non-nullable field DataType.test.',
|
|
||||||
[ new SourceLocation(1, 10) ]
|
|
||||||
)
|
|
||||||
]
|
|
||||||
]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @describe [T!]
|
|
||||||
*/
|
|
||||||
public function testHandlesListOfNonNulls()
|
|
||||||
{
|
|
||||||
$type = Type::listOf(Type::nonNull(Type::int()));
|
|
||||||
|
|
||||||
// Contains values
|
|
||||||
$this->check(
|
|
||||||
$type,
|
|
||||||
[ 1, 2 ],
|
|
||||||
[ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ]
|
|
||||||
);
|
|
||||||
|
|
||||||
// Contains null
|
|
||||||
$this->check(
|
|
||||||
$type,
|
|
||||||
[ 1, null, 2 ],
|
|
||||||
[
|
|
||||||
'data' => [ 'nest' => [ 'test' => null ] ],
|
|
||||||
'errors' => [
|
|
||||||
FormattedError::create(
|
|
||||||
'Cannot return null for non-nullable field DataType.test.',
|
|
||||||
[ new SourceLocation(1, 10) ]
|
|
||||||
)
|
|
||||||
]
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
// Returns null
|
|
||||||
$this->check(
|
|
||||||
$type,
|
|
||||||
null,
|
|
||||||
[ 'data' => [ 'nest' => [ 'test' => null ] ] ]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @describe [T!]!
|
|
||||||
*/
|
|
||||||
public function testHandlesNonNullListOfNonNulls()
|
|
||||||
{
|
|
||||||
$type = Type::nonNull(Type::listOf(Type::nonNull(Type::int())));
|
|
||||||
|
|
||||||
// Contains values
|
|
||||||
$this->check(
|
|
||||||
$type,
|
|
||||||
[ 1, 2 ],
|
|
||||||
[ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ]
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
// Contains null
|
|
||||||
$this->check(
|
|
||||||
$type,
|
|
||||||
[ 1, null, 2 ],
|
|
||||||
[
|
|
||||||
'data' => [ 'nest' => null ],
|
|
||||||
'errors' => [
|
|
||||||
FormattedError::create(
|
|
||||||
'Cannot return null for non-nullable field DataType.test.',
|
|
||||||
[ new SourceLocation(1, 10) ]
|
|
||||||
)
|
|
||||||
]
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
// Returns null
|
|
||||||
$this->check(
|
|
||||||
$type,
|
|
||||||
null,
|
|
||||||
[
|
|
||||||
'data' => [ 'nest' => null ],
|
|
||||||
'errors' => [
|
|
||||||
FormattedError::create(
|
|
||||||
'Cannot return null for non-nullable field DataType.test.',
|
|
||||||
[ new SourceLocation(1, 10) ]
|
|
||||||
)
|
|
||||||
]
|
|
||||||
]
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user