Skip to content

Commit

Permalink
Add reference normalize to path parameters on top level
Browse files Browse the repository at this point in the history
  • Loading branch information
marcelthole committed Jul 24, 2024
1 parent dadf6b6 commit 71b0773
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 14 deletions.
47 changes: 33 additions & 14 deletions src/Merge/ReferenceNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,27 +30,26 @@ public function normalizeInlineReferences(
): ReferenceResolverResult {
$refFileCollection = [];
foreach ($openApiDefinition->paths as $path) {
foreach ($path->parameters as $parameterIndex => $parameter) {
$allParameters = $path->parameters;
if ($parameter instanceof Reference) {
$allParameters[$parameterIndex] = $this->normalizeReference($parameter, $refFileCollection);
} else {
$allParameters[$parameterIndex] = $this->normalizeParameters($parameter, $refFileCollection);
}

$path->parameters = $allParameters;
}

foreach ($path->getOperations() as $operation) {
foreach (($operation->parameters ?? []) as $parameterIndex => $parameter) {
if (! $parameter instanceof Parameter) {
continue;
}

/** @var array<int, Parameter> $allParameters */
$allParameters = $operation->parameters;
if ($parameter->schema instanceof Reference) {
$allParameters[$parameterIndex]->schema = $this->normalizeReference(
$parameter->schema,
$refFileCollection,
);
}

if ($parameter->schema instanceof Schema) {
$allParameters[$parameterIndex]->schema = $this->normalizeProperties(
$parameter->schema,
$refFileCollection,
);
}
$allParameters = $operation->parameters;
$allParameters[$parameterIndex] = $this->normalizeParameters($parameter, $refFileCollection);

$operation->parameters = $allParameters;
}
Expand Down Expand Up @@ -265,4 +264,24 @@ public function normalizeProperty(Reference|Schema $property, array &$refFileCol

return $property;
}

/** @param array<string, string> $refFileCollection */
public function normalizeParameters(Parameter $parameter, array &$refFileCollection): Parameter
{
if ($parameter->schema instanceof Reference) {
$parameter->schema = $this->normalizeReference(
$parameter->schema,
$refFileCollection,
);
}

if ($parameter->schema instanceof Schema) {
$parameter->schema = $this->normalizeProperties(
$parameter->schema,
$refFileCollection,
);
}

return $parameter;
}
}
22 changes: 22 additions & 0 deletions tests/Merge/Fixtures/expected/openapi-normalized.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,28 @@
"info": {},
"paths": {
"\/dummy": {},
"\/path\/{id}\/{id2}": {
"get": {
"responses": {
"200": {
"description": "OK"
}
}
},
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer"
}
},
{
"$ref": "#\/components\/schemas\/pathOutsideOperation"
}
]
},
"\/reference": {
"get": {
"parameters": [
Expand Down
22 changes: 22 additions & 0 deletions tests/Merge/Fixtures/openapi-with-reference.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,28 @@
"info": {},
"paths": {
"/dummy": {},
"/path/{id}/{id2}": {
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "integer"
}
},
{
"$ref": "pathOutsideOperation.json#/components/schemas/pathOutsideOperation"
}
],
"get": {
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/reference": {
"get": {
"parameters": [
Expand Down
1 change: 1 addition & 0 deletions tests/Merge/Fixtures/pathOutsideOperation.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
1 change: 1 addition & 0 deletions tests/Merge/ReferenceNormalizerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public function testReadFileWithResolvedReference(): void

$foundRefFiles = $specificationResult->getFoundReferenceFiles();
$expectedRefFiles = [
__DIR__ . '/Fixtures/pathOutsideOperation.json',
__DIR__ . '/Fixtures/requestParam.json',
__DIR__ . '/Fixtures/requestParamNullable.json',
__DIR__ . '/Fixtures/responseModel.json',
Expand Down

0 comments on commit 71b0773

Please sign in to comment.