Execution: tests are green

This commit is contained in:
vladar 2016-12-03 04:23:21 +07:00
parent 2ffc14cee6
commit fd335a1d13
3 changed files with 46 additions and 70 deletions

View File

@ -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;
}
} }

View File

@ -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 ] ] ]
); );

View File

@ -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");
}); });
} }
} }