mirror of
https://github.com/retailcrm/graphql-php.git
synced 2024-11-28 15:56:02 +03:00
Merge pull request #413 from Quartz/improvement/apollo-compatible-persisted-queries
Apollo persisted query compatibility: Look for queryId in extensions.
This commit is contained in:
commit
e22b400373
@ -46,6 +46,12 @@ class OperationParams
|
|||||||
*/
|
*/
|
||||||
public $variables;
|
public $variables;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @api
|
||||||
|
* @var mixed[]|null
|
||||||
|
*/
|
||||||
|
public $extensions;
|
||||||
|
|
||||||
/** @var mixed[] */
|
/** @var mixed[] */
|
||||||
private $originalInput;
|
private $originalInput;
|
||||||
|
|
||||||
@ -76,6 +82,7 @@ class OperationParams
|
|||||||
'id' => null, // alias to queryid
|
'id' => null, // alias to queryid
|
||||||
'operationname' => null,
|
'operationname' => null,
|
||||||
'variables' => null,
|
'variables' => null,
|
||||||
|
'extensions' => null,
|
||||||
];
|
];
|
||||||
|
|
||||||
if ($params['variables'] === '') {
|
if ($params['variables'] === '') {
|
||||||
@ -89,11 +96,17 @@ class OperationParams
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$instance->query = $params['query'];
|
$instance->query = $params['query'];
|
||||||
$instance->queryId = $params['queryid'] ?: $params['documentid'] ?: $params['id'];
|
$instance->queryId = $params['queryid'] ?: $params['documentid'] ?: $params['id'];
|
||||||
$instance->operation = $params['operationname'];
|
$instance->operation = $params['operationname'];
|
||||||
$instance->variables = $params['variables'];
|
$instance->variables = $params['variables'];
|
||||||
$instance->readOnly = (bool) $readonly;
|
$instance->extensions = $params['extensions'];
|
||||||
|
$instance->readOnly = (bool) $readonly;
|
||||||
|
|
||||||
|
// Apollo server/client compatibility: look for the queryid in extensions
|
||||||
|
if (isset($instance->extensions['persistedQuery']['sha256Hash']) && empty($instance->query) && empty($instance->queryId)) {
|
||||||
|
$instance->queryId = $instance->extensions['persistedQuery']['sha256Hash'];
|
||||||
|
}
|
||||||
|
|
||||||
return $instance;
|
return $instance;
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ class RequestParsingTest extends TestCase
|
|||||||
];
|
];
|
||||||
|
|
||||||
foreach ($parsed as $source => $parsedBody) {
|
foreach ($parsed as $source => $parsedBody) {
|
||||||
self::assertValidOperationParams($parsedBody, $query, null, null, null, $source);
|
self::assertValidOperationParams($parsedBody, $query, null, null, null, null, $source);
|
||||||
self::assertFalse($parsedBody->isReadOnly(), $source);
|
self::assertFalse($parsedBody->isReadOnly(), $source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -91,6 +91,7 @@ class RequestParsingTest extends TestCase
|
|||||||
$queryId = null,
|
$queryId = null,
|
||||||
$variables = null,
|
$variables = null,
|
||||||
$operation = null,
|
$operation = null,
|
||||||
|
$extensions = null,
|
||||||
$message = ''
|
$message = ''
|
||||||
) {
|
) {
|
||||||
self::assertInstanceOf(OperationParams::class, $params, $message);
|
self::assertInstanceOf(OperationParams::class, $params, $message);
|
||||||
@ -99,6 +100,7 @@ class RequestParsingTest extends TestCase
|
|||||||
self::assertSame($queryId, $params->queryId, $message);
|
self::assertSame($queryId, $params->queryId, $message);
|
||||||
self::assertSame($variables, $params->variables, $message);
|
self::assertSame($variables, $params->variables, $message);
|
||||||
self::assertSame($operation, $params->operation, $message);
|
self::assertSame($operation, $params->operation, $message);
|
||||||
|
self::assertSame($extensions, $params->extensions, $message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testParsesUrlencodedRequest() : void
|
public function testParsesUrlencodedRequest() : void
|
||||||
@ -118,7 +120,7 @@ class RequestParsingTest extends TestCase
|
|||||||
];
|
];
|
||||||
|
|
||||||
foreach ($parsed as $method => $parsedBody) {
|
foreach ($parsed as $method => $parsedBody) {
|
||||||
self::assertValidOperationParams($parsedBody, $query, null, $variables, $operation, $method);
|
self::assertValidOperationParams($parsedBody, $query, null, $variables, $operation, null, $method);
|
||||||
self::assertFalse($parsedBody->isReadOnly(), $method);
|
self::assertFalse($parsedBody->isReadOnly(), $method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -175,7 +177,7 @@ class RequestParsingTest extends TestCase
|
|||||||
];
|
];
|
||||||
|
|
||||||
foreach ($parsed as $method => $parsedBody) {
|
foreach ($parsed as $method => $parsedBody) {
|
||||||
self::assertValidOperationParams($parsedBody, $query, null, $variables, $operation, $method);
|
self::assertValidOperationParams($parsedBody, $query, null, $variables, $operation, null, $method);
|
||||||
self::assertTrue($parsedBody->isReadonly(), $method);
|
self::assertTrue($parsedBody->isReadonly(), $method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -230,7 +232,7 @@ class RequestParsingTest extends TestCase
|
|||||||
];
|
];
|
||||||
|
|
||||||
foreach ($parsed as $method => $parsedBody) {
|
foreach ($parsed as $method => $parsedBody) {
|
||||||
self::assertValidOperationParams($parsedBody, $query, null, $variables, $operation, $method);
|
self::assertValidOperationParams($parsedBody, $query, null, $variables, $operation, null, $method);
|
||||||
self::assertFalse($parsedBody->isReadOnly(), $method);
|
self::assertFalse($parsedBody->isReadOnly(), $method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -286,7 +288,7 @@ class RequestParsingTest extends TestCase
|
|||||||
'psr' => $this->parsePsrRequest('application/json', json_encode($body)),
|
'psr' => $this->parsePsrRequest('application/json', json_encode($body)),
|
||||||
];
|
];
|
||||||
foreach ($parsed as $method => $parsedBody) {
|
foreach ($parsed as $method => $parsedBody) {
|
||||||
self::assertValidOperationParams($parsedBody, $query, null, $variables, $operation, $method);
|
self::assertValidOperationParams($parsedBody, $query, null, $variables, $operation, null, $method);
|
||||||
self::assertFalse($parsedBody->isReadOnly(), $method);
|
self::assertFalse($parsedBody->isReadOnly(), $method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -307,7 +309,7 @@ class RequestParsingTest extends TestCase
|
|||||||
'psr' => $this->parsePsrRequest('application/json', json_encode($body)),
|
'psr' => $this->parsePsrRequest('application/json', json_encode($body)),
|
||||||
];
|
];
|
||||||
foreach ($parsed as $method => $parsedBody) {
|
foreach ($parsed as $method => $parsedBody) {
|
||||||
self::assertValidOperationParams($parsedBody, $query, null, $variables, $operation, $method);
|
self::assertValidOperationParams($parsedBody, $query, null, $variables, $operation, null, $method);
|
||||||
self::assertFalse($parsedBody->isReadOnly(), $method);
|
self::assertFalse($parsedBody->isReadOnly(), $method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -328,7 +330,29 @@ class RequestParsingTest extends TestCase
|
|||||||
'psr' => $this->parsePsrRequest('application/json', json_encode($body)),
|
'psr' => $this->parsePsrRequest('application/json', json_encode($body)),
|
||||||
];
|
];
|
||||||
foreach ($parsed as $method => $parsedBody) {
|
foreach ($parsed as $method => $parsedBody) {
|
||||||
self::assertValidOperationParams($parsedBody, $query, null, $variables, $operation, $method);
|
self::assertValidOperationParams($parsedBody, $query, null, $variables, $operation, null, $method);
|
||||||
|
self::assertFalse($parsedBody->isReadOnly(), $method);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testParsesApolloPersistedQueryJSONRequest() : void
|
||||||
|
{
|
||||||
|
$queryId = 'my-query-id';
|
||||||
|
$extensions = ['persistedQuery' => ['sha256Hash' => $queryId]];
|
||||||
|
$variables = ['test' => 1, 'test2' => 2];
|
||||||
|
$operation = 'op';
|
||||||
|
|
||||||
|
$body = [
|
||||||
|
'extensions' => $extensions,
|
||||||
|
'variables' => $variables,
|
||||||
|
'operationName' => $operation,
|
||||||
|
];
|
||||||
|
$parsed = [
|
||||||
|
'raw' => $this->parseRawRequest('application/json', json_encode($body)),
|
||||||
|
'psr' => $this->parsePsrRequest('application/json', json_encode($body)),
|
||||||
|
];
|
||||||
|
foreach ($parsed as $method => $parsedBody) {
|
||||||
|
self::assertValidOperationParams($parsedBody, null, $queryId, $variables, $operation, $extensions, $method);
|
||||||
self::assertFalse($parsedBody->isReadOnly(), $method);
|
self::assertFalse($parsedBody->isReadOnly(), $method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -360,6 +384,7 @@ class RequestParsingTest extends TestCase
|
|||||||
null,
|
null,
|
||||||
$body[0]['variables'],
|
$body[0]['variables'],
|
||||||
$body[0]['operationName'],
|
$body[0]['operationName'],
|
||||||
|
null,
|
||||||
$method
|
$method
|
||||||
);
|
);
|
||||||
self::assertValidOperationParams(
|
self::assertValidOperationParams(
|
||||||
@ -368,6 +393,7 @@ class RequestParsingTest extends TestCase
|
|||||||
$body[1]['queryId'],
|
$body[1]['queryId'],
|
||||||
$body[1]['variables'],
|
$body[1]['variables'],
|
||||||
$body[1]['operationName'],
|
$body[1]['operationName'],
|
||||||
|
null,
|
||||||
$method
|
$method
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user