Skip to content

Commit f128e3b

Browse files
authored
fix(openapi): yaml parameters extractor (#5487)
1 parent a7f4e0b commit f128e3b

File tree

3 files changed

+55
-0
lines changed

3 files changed

+55
-0
lines changed

src/Metadata/Extractor/YamlResourceExtractor.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use ApiPlatform\Metadata\Tests\Fixtures\StateOptions;
2020
use ApiPlatform\OpenApi\Model\ExternalDocumentation;
2121
use ApiPlatform\OpenApi\Model\Operation as OpenApiOperation;
22+
use ApiPlatform\OpenApi\Model\Parameter;
2223
use ApiPlatform\OpenApi\Model\RequestBody;
2324
use ApiPlatform\State\OptionsInterface;
2425
use Symfony\Component\Yaml\Exception\ParseException;
@@ -235,6 +236,28 @@ private function buildOpenapi(array $resource): bool|OpenApiOperation|null
235236
unset($resource['openapi'][$key]);
236237
}
237238

239+
if (\array_key_exists('parameters', $resource['openapi']) && \is_array($openapiParameters = $resource['openapi']['parameters'] ?? [])) {
240+
$parameters = [];
241+
foreach ($openapiParameters as $parameter) {
242+
$parameters[] = new Parameter(
243+
name: $parameter['name'],
244+
in: $parameter['in'],
245+
description: $parameter['description'] ?? '',
246+
required: $parameter['required'] ?? false,
247+
deprecated: $parameter['deprecated'] ?? false,
248+
allowEmptyValue: $parameter['allowEmptyValue'] ?? false,
249+
schema: $parameter['schema'] ?? [],
250+
style: $parameter['style'] ?? null,
251+
explode: $parameter['explode'] ?? false,
252+
allowReserved: $parameter['allowReserved '] ?? false,
253+
example: $parameter['example'] ?? null,
254+
examples: isset($parameter['examples']) ? new \ArrayObject($parameter['examples']) : null,
255+
content: isset($parameter['content']) ? new \ArrayObject($parameter['content']) : null
256+
);
257+
}
258+
$resource['openapi']['parameters'] = $parameters;
259+
}
260+
238261
return new OpenApiOperation(...$resource['openapi']);
239262
}
240263

src/Metadata/Tests/Extractor/YamlExtractorTest.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,24 @@ public function testValidYaml(): void
473473
], $extractor->getResources());
474474
}
475475

476+
public function testOpenApiParameters(): void
477+
{
478+
$extractor = new YamlResourceExtractor([__DIR__.'/yaml/openapi.yaml']);
479+
$resources = $extractor->getResources();
480+
481+
$this->assertArrayHasKey(Program::class, $resources);
482+
$this->assertArrayHasKey('openapi', $resources[Program::class][0]);
483+
484+
$this->assertIsObject($resources[Program::class][0]['operations'][0]['openapi']);
485+
486+
$operation = $resources[Program::class][0]['operations'][0]['openapi'];
487+
$this->assertIsArray($operation->getParameters());
488+
489+
$this->assertEquals('author', $operation->getParameters()[0]->getName());
490+
$this->assertEquals('path', $operation->getParameters()[0]->getIn());
491+
$this->assertEquals('john-doe', $operation->getParameters()[0]->getExample());
492+
}
493+
476494
public function testInputAndOutputAreBooleans(): void
477495
{
478496
$extractor = new YamlResourceExtractor([__DIR__.'/yaml/input-and-output-are-booleans.yaml']);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
resources:
2+
ApiPlatform\Metadata\Tests\Fixtures\ApiResource\Program:
3+
- uriTemplate: /users/{author}/programs.{_format}
4+
uriVariables: ['author']
5+
operations:
6+
ApiPlatform\Metadata\Post:
7+
openapi:
8+
parameters:
9+
username:
10+
name: author
11+
in: path
12+
example: "john-doe"
13+
examples: ["John-doe"]
14+
foo: "bar"

0 commit comments

Comments
 (0)