From 2295b96a493b9ce6528abd8e1a644e1164bb9fbe Mon Sep 17 00:00:00 2001 From: Jan Bukva Date: Thu, 27 Dec 2018 16:00:57 +0100 Subject: [PATCH] Fix CoroutineExecutor::resultToArray for associative arrays --- src/Experimental/Executor/CoroutineExecutor.php | 14 +++++++++++--- tests/Executor/ExecutorSchemaTest.php | 14 +++++--------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/Experimental/Executor/CoroutineExecutor.php b/src/Experimental/Executor/CoroutineExecutor.php index b473c56..7d985c1 100644 --- a/src/Experimental/Executor/CoroutineExecutor.php +++ b/src/Experimental/Executor/CoroutineExecutor.php @@ -34,8 +34,11 @@ use GraphQL\Utils\Utils; use SplQueue; use stdClass; use Throwable; +use function array_keys; +use function count; use function is_array; use function is_string; +use function range; use function sprintf; class CoroutineExecutor implements Runtime, ExecutorImplementation @@ -151,9 +154,14 @@ class CoroutineExecutor implements Runtime, ExecutorImplementation } if (is_array($value)) { - $array = []; - foreach ($value as $item) { - $array[] = self::resultToArray($item); + $array = []; + $isAssoc = array_keys($value) !== range(0, count($value) - 1); + foreach ($value as $key => $item) { + if ($isAssoc) { + $array[$key] = self::resultToArray($item); + } else { + $array[] = self::resultToArray($item); + } } return $array; } diff --git a/tests/Executor/ExecutorSchemaTest.php b/tests/Executor/ExecutorSchemaTest.php index 36a2a73..4946c59 100644 --- a/tests/Executor/ExecutorSchemaTest.php +++ b/tests/Executor/ExecutorSchemaTest.php @@ -23,9 +23,9 @@ class ExecutorSchemaTest extends TestCase { $BlogSerializableValueType = new CustomScalarType([ 'name' => 'JsonSerializableValueScalar', - 'serialize' => static function ($value) { return $value; }, - 'parseValue' => static function ($value) { return $value; }, - 'parseLiteral' => static function ($value) { return $value; }, + 'serialize' => static function ($value) { + return $value; + }, ]); $BlogArticle = null; @@ -201,9 +201,7 @@ class ExecutorSchemaTest extends TestCase 'keywords' => ['foo', 'bar', '1', 'true', null], ], ], - 'meta' => [ - 'title' => 'My Article 1 | My Blog' - ] + 'meta' => [ 'title' => 'My Article 1 | My Blog' ], ], ], ]; @@ -223,9 +221,7 @@ class ExecutorSchemaTest extends TestCase 'body' => 'This is a post', 'hidden' => 'This data is not exposed in the schema', 'keywords' => ['foo', 'bar', 1, true, null], - 'meta' => [ - 'title' => 'My Article 1 | My Blog', - ], + 'meta' => ['title' => 'My Article 1 | My Blog'], ]; };