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';
use GraphQL\Deferred;
use GraphQL\Error\Error;
use GraphQL\Executor\ExecutionResult;
use GraphQL\Executor\Executor;
use GraphQL\Error\FormattedError;
use GraphQL\Executor\Promise\Adapter\ReactPromiseAdapter;
use GraphQL\Language\Parser;
use GraphQL\Language\SourceLocation;
use GraphQL\Schema;
@ -18,7 +18,6 @@ use GraphQL\Type\Definition\ResolveInfo;
use GraphQL\Type\Definition\Type;
use GraphQL\Type\Definition\UnionType;
use GraphQL\Utils;
use React\Promise\Promise;
class ExecutorTest extends \PHPUnit_Framework_TestCase
{
@ -34,13 +33,12 @@ class ExecutorTest extends \PHPUnit_Framework_TestCase
*/
public function testExecutesArbitraryCode()
{
Executor::setPromiseAdapter(new ReactPromiseAdapter());
$deepData = null;
$data = null;
$promiseData = function () use (&$data) {
return new Promise(function (callable $resolve) use (&$data) {
return $resolve($data);
return new Deferred(function () use (&$data) {
return $data;
});
};
@ -165,7 +163,7 @@ class ExecutorTest extends \PHPUnit_Framework_TestCase
]);
$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() {
return new Promise(function(callable $resolve) { return $resolve('async'); });
return new Deferred(function() { return 'async'; });
},
'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 () {
return \React\Promise\reject('Error getting asyncRawReject');
return new Deferred(function() {
throw new \Exception('Error getting asyncRawReject');
});
},
'asyncEmptyReject' => function () {
return \React\Promise\reject();
return new Deferred(function() {
throw new \Exception();
});
},
'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
// leaving it just to simplify migrations from newer js versions
'asyncRawError' => function() {
return new Promise(function() { throw new \Exception('Error getting asyncRawError'); });
return new Deferred(function() {
throw new \Exception('Error getting asyncRawError');
});
},
'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);
$result = Executor::execute($schema, $docAst, $data)->toArray();
$this->assertEquals($expected, self::awaitPromise($result));
$this->assertEquals($expected, $result);
}
/**
@ -743,8 +750,6 @@ class ExecutorTest extends \PHPUnit_Framework_TestCase
public function testCorrectFieldOrderingDespiteExecutionOrder()
{
Executor::setPromiseAdapter(new ReactPromiseAdapter());
$doc = '{
a,
b,
@ -757,13 +762,13 @@ class ExecutorTest extends \PHPUnit_Framework_TestCase
return 'a';
},
'b' => function () {
return new Promise(function (callable $resolve) { return $resolve('b'); });
return new Deferred(function () { return 'b'; });
},
'c' => function () {
return 'c';
},
'd' => function () {
return new Promise(function (callable $resolve) { return $resolve('d'); });
return new Deferred(function () { return 'd'; });
},
'e' => function () {
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());
}
/**
* @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
$this->checkHandlesNullableLists(
\React\Promise\resolve(null),
new Deferred(function() {
return null;
}),
[ 'data' => [ 'nest' => [ 'test' => null ] ] ]
);
@ -361,7 +363,9 @@ class ListsTest extends \PHPUnit_Framework_TestCase
// Returns null
$this->checkHandlesListOfNonNulls(
\React\Promise\resolve(null),
new Deferred(function() {
return null;
}),
[ 'data' => [ 'nest' => [ 'test' => null ] ] ]
);
@ -405,7 +409,11 @@ class ListsTest extends \PHPUnit_Framework_TestCase
// Contains null
$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 ] ] ]
);

View File

@ -1,29 +1,18 @@
<?php
namespace GraphQL\Tests\Executor;
use GraphQL\Deferred;
use GraphQL\Executor\ExecutionResult;
use GraphQL\Executor\Executor;
use GraphQL\Error\FormattedError;
use GraphQL\Executor\Promise\Adapter\ReactPromiseAdapter;
use GraphQL\Language\Parser;
use GraphQL\Language\SourceLocation;
use GraphQL\Schema;
use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;
use React\Promise\Promise;
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
/**
@ -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));
}
/**
* @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;
$this->assertArraySubset($expected, $mutationResult->toArray());
}
private function schema()
@ -227,12 +203,12 @@ class Root {
/**
* @param $newNumber
*
* @return Promise
* @return Deferred
*/
public function promiseToChangeTheNumber($newNumber)
{
return new Promise(function (callable $resolve) use ($newNumber) {
return $resolve($this->immediatelyChangeTheNumber($newNumber));
return new Deferred(function () use ($newNumber) {
return $this->immediatelyChangeTheNumber($newNumber);
});
}
@ -245,12 +221,12 @@ class Root {
}
/**
* @return Promise
* @return Deferred
*/
public function promiseAndFailToChangeTheNumber()
{
return new Promise(function (callable $resolve, callable $reject) {
return $reject(new \Exception("Cannot change the number"));
return new Deferred(function () {
throw new \Exception("Cannot change the number");
});
}
}