mirror of
https://github.com/retailcrm/graphql-php.git
synced 2025-02-06 15:59:24 +03:00
Execution: tests are green
This commit is contained in:
parent
2ffc14cee6
commit
fd335a1d13
@ -3,11 +3,11 @@ namespace GraphQL\Tests\Executor;
|
|||||||
|
|
||||||
require_once __DIR__ . '/TestClasses.php';
|
require_once __DIR__ . '/TestClasses.php';
|
||||||
|
|
||||||
|
use GraphQL\Deferred;
|
||||||
use GraphQL\Error\Error;
|
use GraphQL\Error\Error;
|
||||||
use GraphQL\Executor\ExecutionResult;
|
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;
|
||||||
@ -18,7 +18,6 @@ use GraphQL\Type\Definition\ResolveInfo;
|
|||||||
use GraphQL\Type\Definition\Type;
|
use GraphQL\Type\Definition\Type;
|
||||||
use GraphQL\Type\Definition\UnionType;
|
use GraphQL\Type\Definition\UnionType;
|
||||||
use GraphQL\Utils;
|
use GraphQL\Utils;
|
||||||
use React\Promise\Promise;
|
|
||||||
|
|
||||||
class ExecutorTest extends \PHPUnit_Framework_TestCase
|
class ExecutorTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
@ -34,13 +33,12 @@ class ExecutorTest extends \PHPUnit_Framework_TestCase
|
|||||||
*/
|
*/
|
||||||
public function testExecutesArbitraryCode()
|
public function testExecutesArbitraryCode()
|
||||||
{
|
{
|
||||||
Executor::setPromiseAdapter(new ReactPromiseAdapter());
|
|
||||||
$deepData = null;
|
$deepData = null;
|
||||||
$data = null;
|
$data = null;
|
||||||
|
|
||||||
$promiseData = function () use (&$data) {
|
$promiseData = function () use (&$data) {
|
||||||
return new Promise(function (callable $resolve) use (&$data) {
|
return new Deferred(function () use (&$data) {
|
||||||
return $resolve($data);
|
return $data;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -165,7 +163,7 @@ class ExecutorTest extends \PHPUnit_Framework_TestCase
|
|||||||
]);
|
]);
|
||||||
$schema = new Schema(['query' => $dataType]);
|
$schema = new Schema(['query' => $dataType]);
|
||||||
|
|
||||||
$this->assertEquals($expected, self::awaitPromise(Executor::execute($schema, $ast, $data, null, ['size' => 100], 'Example')));
|
$this->assertEquals($expected, Executor::execute($schema, $ast, $data, null, ['size' => 100], 'Example')->toArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -397,27 +395,37 @@ class ExecutorTest extends \PHPUnit_Framework_TestCase
|
|||||||
];
|
];
|
||||||
},
|
},
|
||||||
'async' => function() {
|
'async' => function() {
|
||||||
return new Promise(function(callable $resolve) { return $resolve('async'); });
|
return new Deferred(function() { return 'async'; });
|
||||||
},
|
},
|
||||||
'asyncReject' => function() {
|
'asyncReject' => function() {
|
||||||
return new Promise(function($_, callable $reject) { return $reject('Error getting asyncReject'); });
|
return new Deferred(function() { throw new \Exception('Error getting asyncReject'); });
|
||||||
},
|
},
|
||||||
'asyncRawReject' => function () {
|
'asyncRawReject' => function () {
|
||||||
return \React\Promise\reject('Error getting asyncRawReject');
|
return new Deferred(function() {
|
||||||
|
throw new \Exception('Error getting asyncRawReject');
|
||||||
|
});
|
||||||
},
|
},
|
||||||
'asyncEmptyReject' => function () {
|
'asyncEmptyReject' => function () {
|
||||||
return \React\Promise\reject();
|
return new Deferred(function() {
|
||||||
|
throw new \Exception();
|
||||||
|
});
|
||||||
},
|
},
|
||||||
'asyncError' => function() {
|
'asyncError' => function() {
|
||||||
return new Promise(function() { throw new \Exception('Error getting asyncError'); });
|
return new Deferred(function() {
|
||||||
|
throw new \Exception('Error getting asyncError');
|
||||||
|
});
|
||||||
},
|
},
|
||||||
// inherited from JS reference implementation, but make no sense in this PHP impl
|
// inherited from JS reference implementation, but make no sense in this PHP impl
|
||||||
// leaving it just to simplify migrations from newer js versions
|
// leaving it just to simplify migrations from newer js versions
|
||||||
'asyncRawError' => function() {
|
'asyncRawError' => function() {
|
||||||
return new Promise(function() { throw new \Exception('Error getting asyncRawError'); });
|
return new Deferred(function() {
|
||||||
|
throw new \Exception('Error getting asyncRawError');
|
||||||
|
});
|
||||||
},
|
},
|
||||||
'asyncReturnError' => function() {
|
'asyncReturnError' => function() {
|
||||||
return \React\Promise\resolve(new \Exception('Error getting asyncReturnError'));
|
return new Deferred(function() {
|
||||||
|
throw new \Exception('Error getting asyncReturnError');
|
||||||
|
});
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -516,10 +524,9 @@ class ExecutorTest extends \PHPUnit_Framework_TestCase
|
|||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
Executor::setPromiseAdapter(new ReactPromiseAdapter());
|
$result = Executor::execute($schema, $docAst, $data)->toArray();
|
||||||
$result = Executor::execute($schema, $docAst, $data);
|
|
||||||
|
|
||||||
$this->assertEquals($expected, self::awaitPromise($result));
|
$this->assertEquals($expected, $result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -743,8 +750,6 @@ class ExecutorTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
public function testCorrectFieldOrderingDespiteExecutionOrder()
|
public function testCorrectFieldOrderingDespiteExecutionOrder()
|
||||||
{
|
{
|
||||||
Executor::setPromiseAdapter(new ReactPromiseAdapter());
|
|
||||||
|
|
||||||
$doc = '{
|
$doc = '{
|
||||||
a,
|
a,
|
||||||
b,
|
b,
|
||||||
@ -757,13 +762,13 @@ class ExecutorTest extends \PHPUnit_Framework_TestCase
|
|||||||
return 'a';
|
return 'a';
|
||||||
},
|
},
|
||||||
'b' => function () {
|
'b' => function () {
|
||||||
return new Promise(function (callable $resolve) { return $resolve('b'); });
|
return new Deferred(function () { return 'b'; });
|
||||||
},
|
},
|
||||||
'c' => function () {
|
'c' => function () {
|
||||||
return 'c';
|
return 'c';
|
||||||
},
|
},
|
||||||
'd' => function () {
|
'd' => function () {
|
||||||
return new Promise(function (callable $resolve) { return $resolve('d'); });
|
return new Deferred(function () { return 'd'; });
|
||||||
},
|
},
|
||||||
'e' => function () {
|
'e' => function () {
|
||||||
return 'e';
|
return 'e';
|
||||||
@ -794,7 +799,7 @@ class ExecutorTest extends \PHPUnit_Framework_TestCase
|
|||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
$this->assertEquals($expected, self::awaitPromise(Executor::execute($schema, $ast, $data)));
|
$this->assertEquals($expected, Executor::execute($schema, $ast, $data)->toArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1091,17 +1096,4 @@ class ExecutorTest extends \PHPUnit_Framework_TestCase
|
|||||||
]
|
]
|
||||||
], $result->toArray());
|
], $result->toArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param \GraphQL\Executor\Promise\Promise $promise
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
private static function awaitPromise($promise)
|
|
||||||
{
|
|
||||||
$results = null;
|
|
||||||
$promise->then(function (ExecutionResult $executionResult) use (&$results) {
|
|
||||||
$results = $executionResult->toArray();
|
|
||||||
});
|
|
||||||
return $results;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -117,7 +117,9 @@ class ListsTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
// Returns null
|
// Returns null
|
||||||
$this->checkHandlesNullableLists(
|
$this->checkHandlesNullableLists(
|
||||||
\React\Promise\resolve(null),
|
new Deferred(function() {
|
||||||
|
return null;
|
||||||
|
}),
|
||||||
[ 'data' => [ 'nest' => [ 'test' => null ] ] ]
|
[ 'data' => [ 'nest' => [ 'test' => null ] ] ]
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -361,7 +363,9 @@ class ListsTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
// Returns null
|
// Returns null
|
||||||
$this->checkHandlesListOfNonNulls(
|
$this->checkHandlesListOfNonNulls(
|
||||||
\React\Promise\resolve(null),
|
new Deferred(function() {
|
||||||
|
return null;
|
||||||
|
}),
|
||||||
[ 'data' => [ 'nest' => [ 'test' => null ] ] ]
|
[ 'data' => [ 'nest' => [ 'test' => null ] ] ]
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -405,7 +409,11 @@ class ListsTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
// Contains null
|
// Contains null
|
||||||
$this->checkHandlesListOfNonNulls(
|
$this->checkHandlesListOfNonNulls(
|
||||||
[ \React\Promise\resolve(1), \React\Promise\resolve(null), \React\Promise\resolve(2) ],
|
[
|
||||||
|
new Deferred(function() {return 1;}),
|
||||||
|
new Deferred(function() {return null;}),
|
||||||
|
new Deferred(function() {return 2;})
|
||||||
|
],
|
||||||
[ 'data' => [ 'nest' => [ 'test' => null ] ] ]
|
[ 'data' => [ 'nest' => [ 'test' => null ] ] ]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1,29 +1,18 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace GraphQL\Tests\Executor;
|
namespace GraphQL\Tests\Executor;
|
||||||
|
|
||||||
|
use GraphQL\Deferred;
|
||||||
use GraphQL\Executor\ExecutionResult;
|
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;
|
||||||
use GraphQL\Type\Definition\ObjectType;
|
use GraphQL\Type\Definition\ObjectType;
|
||||||
use GraphQL\Type\Definition\Type;
|
use GraphQL\Type\Definition\Type;
|
||||||
use React\Promise\Promise;
|
|
||||||
|
|
||||||
class MutationsTest extends \PHPUnit_Framework_TestCase
|
class MutationsTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
public static function setUpBeforeClass()
|
|
||||||
{
|
|
||||||
Executor::setPromiseAdapter(new ReactPromiseAdapter());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function tearDownAfterClass()
|
|
||||||
{
|
|
||||||
Executor::setPromiseAdapter(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Execute: Handles mutation execution ordering
|
// Execute: Handles mutation execution ordering
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -69,7 +58,7 @@ class MutationsTest extends \PHPUnit_Framework_TestCase
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
$this->assertEquals($expected, self::awaitPromise($mutationResult));
|
$this->assertEquals($expected, $mutationResult->toArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -127,20 +116,7 @@ class MutationsTest extends \PHPUnit_Framework_TestCase
|
|||||||
)
|
)
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
$this->assertArraySubset($expected, self::awaitPromise($mutationResult));
|
$this->assertArraySubset($expected, $mutationResult->toArray());
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param \GraphQL\Executor\Promise\Promise $promise
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
private static function awaitPromise($promise)
|
|
||||||
{
|
|
||||||
$results = null;
|
|
||||||
$promise->then(function (ExecutionResult $executionResult) use (&$results) {
|
|
||||||
$results = $executionResult->toArray();
|
|
||||||
});
|
|
||||||
return $results;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function schema()
|
private function schema()
|
||||||
@ -227,12 +203,12 @@ class Root {
|
|||||||
/**
|
/**
|
||||||
* @param $newNumber
|
* @param $newNumber
|
||||||
*
|
*
|
||||||
* @return Promise
|
* @return Deferred
|
||||||
*/
|
*/
|
||||||
public function promiseToChangeTheNumber($newNumber)
|
public function promiseToChangeTheNumber($newNumber)
|
||||||
{
|
{
|
||||||
return new Promise(function (callable $resolve) use ($newNumber) {
|
return new Deferred(function () use ($newNumber) {
|
||||||
return $resolve($this->immediatelyChangeTheNumber($newNumber));
|
return $this->immediatelyChangeTheNumber($newNumber);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,12 +221,12 @@ class Root {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Promise
|
* @return Deferred
|
||||||
*/
|
*/
|
||||||
public function promiseAndFailToChangeTheNumber()
|
public function promiseAndFailToChangeTheNumber()
|
||||||
{
|
{
|
||||||
return new Promise(function (callable $resolve, callable $reject) {
|
return new Deferred(function () {
|
||||||
return $reject(new \Exception("Cannot change the number"));
|
throw new \Exception("Cannot change the number");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user