diff --git a/src/Type/Json.php b/src/Type/Json.php index 44b6318..2ed7126 100644 --- a/src/Type/Json.php +++ b/src/Type/Json.php @@ -21,14 +21,14 @@ class Json extends ScalarType // phpcs:disable SlevomatCodingStandard.TypeHints.PropertyTypeHint.MissingAnyTypeHint public string|null $description = 'The `json` scalar type represents json data.'; - public function parseLiteral(ASTNode $valueNode, array|null $variables = null): string + public function parseLiteral(ASTNode $valueNode, array|null $variables = null): array|null { // @codeCoverageIgnoreStart if (! $valueNode instanceof StringValueNode) { throw new Error('Query error: Can only parse strings got: ' . $valueNode->kind, $valueNode); } - return $valueNode->value; + return $this->parseValue($valueNode->value); // @codeCoverageIgnoreEnd } @@ -54,6 +54,12 @@ public function parseValue(mixed $value): array|null public function serialize(mixed $value): string|null { - return json_encode($value); + $return = json_encode($value); + + if (! $return) { + return null; + } + + return $return; } } diff --git a/test/Feature/Type/JsonTest.php b/test/Feature/Type/JsonTest.php index 5fe1b22..9fa9327 100644 --- a/test/Feature/Type/JsonTest.php +++ b/test/Feature/Type/JsonTest.php @@ -49,10 +49,10 @@ public function testParseLiteral(): void { $jsonType = new Json(); $node = new StringValueNode([]); - $node->value = 'search string'; + $node->value = '{"field": "value"}'; $result = $jsonType->parseLiteral($node); - $this->assertTrue(true); + $this->assertEquals(['field' => 'value'], $result); } public function testContains(): void