Skip to content

Commit

Permalink
fix: parameter provider in a long running http worker
Browse files Browse the repository at this point in the history
  • Loading branch information
rmikalkenas committed Sep 30, 2024
1 parent f932699 commit cbddb17
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 1 deletion.
4 changes: 4 additions & 0 deletions src/State/Provider/ParameterProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ public function provide(Operation $operation, array $uriVariables = [], array $c
$context = ['operation' => $operation] + $context;
$parameters = $operation->getParameters();
foreach ($parameters ?? [] as $parameter) {
$extraProperties = $parameter->getExtraProperties();
unset($extraProperties['_api_values']);
$parameter = $parameter->withExtraProperties($extraProperties);

$values = $this->getParameterValues($parameter, $request, $context);
$value = $this->extractParameterValues($parameter, $values);

Expand Down
4 changes: 3 additions & 1 deletion src/State/Tests/ParameterProviderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,16 +51,18 @@ public function has(string $id): bool
'order' => new QueryParameter(key: 'order', provider: 'test'),
'search[:property]' => new QueryParameter(key: 'search[:property]', provider: [self::class, 'provide']),
'foo' => new QueryParameter(key: 'foo', provider: [self::class, 'shouldNotBeCalled']),
'baz' => (new QueryParameter(key: 'baz'))->withExtraProperties(['_api_values' => 'test1']),
]));
$parameterProvider = new ParameterProvider(null, $locator);
$request = new Request(server: ['QUERY_STRING' => 'order[foo]=asc&search[a]=bar']);
$request = new Request(server: ['QUERY_STRING' => 'order[foo]=asc&search[a]=bar&baz=t42']);
$context = ['request' => $request, 'operation' => $operation];
$parameterProvider->provide($operation, [], $context);
$operation = $request->attributes->get('_api_operation');

$this->assertEquals('ok', $operation->getName());
$this->assertEquals(['foo' => 'asc'], $operation->getParameters()->get('order', QueryParameter::class)->getValue());
$this->assertEquals(['a' => 'bar'], $operation->getParameters()->get('search[:property]', QueryParameter::class)->getValue());
$this->assertEquals('t42', $operation->getParameters()->get('baz', QueryParameter::class)->getValue());
}

public static function provide(): void
Expand Down

0 comments on commit cbddb17

Please sign in to comment.