Skip to content

Commit a367447

Browse files
authored
Merge pull request #1254 from rebing/mfn/op-params
Fix OperationParams not copying originalInput/readOnly from base
2 parents 8dbb41b + e5c52aa commit a367447

4 files changed

Lines changed: 29 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ CHANGELOG
1212
### Fixed
1313
- Fix `SelectFields` crashing when field types use callable [\#1252 / mfn](https://github.com/rebing/graphql-laravel/pull/1252)
1414
- Fix APQ middleware race condition (TOCTOU) [\#1253 / mfn](https://github.com/rebing/graphql-laravel/pull/1253)
15+
- Fix `OperationParams` not copying `originalInput`/`readOnly`, causing TypeError [\#1254 / mfn](https://github.com/rebing/graphql-laravel/pull/1254)
1516

1617
2026-03-21, 10.0.0-RC2
1718
----------------------

src/GraphQL.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ public function queryAndReturnResult(string $query, ?array $variables = null, ar
134134
$baseParams->query = $query;
135135
$baseParams->operation = $operationName;
136136
$baseParams->variables = $variables;
137+
$baseParams->originalInput = [];
138+
$baseParams->readOnly = false;
137139
$params = new OperationParams($baseParams);
138140

139141
return $this->executeAndReturnResult($schemaName, $schema, $params, $rootValue, $context);

src/Support/OperationParams.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ protected function init(BaseOperationParams $baseOperationParams): void
2828
$this->operation = $baseOperationParams->operation;
2929
$this->variables = $baseOperationParams->variables;
3030
$this->extensions = $baseOperationParams->extensions;
31+
$this->originalInput = $baseOperationParams->originalInput;
32+
$this->readOnly = $baseOperationParams->readOnly;
3133

3234
$this->baseOperationParams = $baseOperationParams;
3335
}

tests/Unit/OperationParamsTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
namespace Rebing\GraphQL\Tests\Unit;
55

66
use GraphQL\Error\Error;
7+
use GraphQL\Server\Helper;
78
use GraphQL\Server\OperationParams as BaseOperationParams;
89
use PHPUnit\Framework\TestCase;
910
use Rebing\GraphQL\Support\OperationParams;
@@ -64,4 +65,27 @@ public function testGetParsedQueryReturnsParsedDocument(): void
6465
$document2 = $params->getParsedQuery();
6566
self::assertSame($document, $document2);
6667
}
68+
69+
/**
70+
* When webonyx's Helper::validateOperationParams() detects invalid variables,
71+
* it accesses $params->originalInput['variables'] to build the error message.
72+
*/
73+
public function testValidateOperationParamsWithInvalidVariablesReturnsValidationError(): void
74+
{
75+
$base = BaseOperationParams::create([
76+
'query' => '{ hello }',
77+
'variables' => '[1, 2]', // JSON list, not an object — triggers validation error
78+
]);
79+
$params = new OperationParams($base);
80+
81+
$helper = new Helper;
82+
83+
$errors = $helper->validateOperationParams($params);
84+
85+
self::assertCount(1, $errors);
86+
self::assertSame(
87+
'GraphQL Request parameter "variables" must be object or JSON string parsed to object, but got "[1, 2]"',
88+
$errors[0]->getMessage(),
89+
);
90+
}
6791
}

0 commit comments

Comments
 (0)