diff --git a/src/Metadata/Extractor/YamlResourceExtractor.php b/src/Metadata/Extractor/YamlResourceExtractor.php index e7dd40093c8..10f6b700129 100644 --- a/src/Metadata/Extractor/YamlResourceExtractor.php +++ b/src/Metadata/Extractor/YamlResourceExtractor.php @@ -258,6 +258,14 @@ private function buildOpenapi(array $resource): bool|OpenApiOperation|null if (\array_key_exists('parameters', $resource['openapi']) && \is_array($openapiParameters = $resource['openapi']['parameters'] ?? [])) { $parameters = []; foreach ($openapiParameters as $parameter) { + if (!isset($parameter['name'])) { + throw new InvalidArgumentException('OpenAPI parameter is missing the required "name" key.'); + } + + if (!isset($parameter['in'])) { + throw new InvalidArgumentException(\sprintf('OpenAPI parameter "%s" is missing the required "in" key.', $parameter['name'])); + } + $parameters[] = new Parameter( name: $parameter['name'], in: $parameter['in'], diff --git a/src/Metadata/Tests/Extractor/YamlExtractorTest.php b/src/Metadata/Tests/Extractor/YamlExtractorTest.php index 6384942192e..9e24f4ac5a9 100644 --- a/src/Metadata/Tests/Extractor/YamlExtractorTest.php +++ b/src/Metadata/Tests/Extractor/YamlExtractorTest.php @@ -518,6 +518,14 @@ public function testOpenApiParameters(): void $this->assertEquals('john-doe', $operation->getParameters()[0]->getExample()); } + public function testOpenApiParameterWithoutNameThrowsClearException(): void + { + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('OpenAPI parameter is missing the required "name" key'); + + (new YamlResourceExtractor([__DIR__.'/yaml/openapi-parameter-without-name.yaml']))->getResources(); + } + public function testInputAndOutputAreBooleans(): void { $extractor = new YamlResourceExtractor([__DIR__.'/yaml/input-and-output-are-booleans.yaml']); diff --git a/src/Metadata/Tests/Extractor/yaml/openapi-parameter-without-name.yaml b/src/Metadata/Tests/Extractor/yaml/openapi-parameter-without-name.yaml new file mode 100644 index 00000000000..1f57fe47fb2 --- /dev/null +++ b/src/Metadata/Tests/Extractor/yaml/openapi-parameter-without-name.yaml @@ -0,0 +1,9 @@ +resources: + ApiPlatform\Metadata\Tests\Fixtures\ApiResource\Program: + - uriTemplate: /programs.{_format} + operations: + ApiPlatform\Metadata\GetCollection: + openapi: + parameters: + - in: query + description: A parameter without a name