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 7ddcb8f
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 14 deletions.
48 changes: 34 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) {
/** @var array<int, Parameter|Reference> $allParameters */
$allParameters = $path->parameters;
if ($parameter instanceof Reference) {

Check warning on line 36 in src/Merge/ReferenceNormalizer.php

View workflow job for this annotation

GitHub Actions / Tests with coverage and PR Comments (8.3)

Escaped Mutant for Mutator "InstanceOf_": @@ @@ foreach ($path->parameters as $parameterIndex => $parameter) { /** @var array<int, Parameter|Reference> $allParameters */ $allParameters = $path->parameters; - if ($parameter instanceof Reference) { + if (true) { $allParameters[$parameterIndex] = $this->normalizeReference($parameter, $refFileCollection); } else if ($parameter instanceof Parameter) { $allParameters[$parameterIndex] = $this->normalizeParameters($parameter, $refFileCollection);

Check warning on line 36 in src/Merge/ReferenceNormalizer.php

View workflow job for this annotation

GitHub Actions / Tests with coverage and PR Comments (8.3)

Escaped Mutant for Mutator "InstanceOf_": @@ @@ foreach ($path->parameters as $parameterIndex => $parameter) { /** @var array<int, Parameter|Reference> $allParameters */ $allParameters = $path->parameters; - if ($parameter instanceof Reference) { + if (true) { $allParameters[$parameterIndex] = $this->normalizeReference($parameter, $refFileCollection); } else if ($parameter instanceof Parameter) { $allParameters[$parameterIndex] = $this->normalizeParameters($parameter, $refFileCollection);
$allParameters[$parameterIndex] = $this->normalizeReference($parameter, $refFileCollection);
} else if ($parameter instanceof Parameter) {
$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[$parameterIndex] = $this->normalizeParameters($parameter, $refFileCollection);

$operation->parameters = $allParameters;
}
Expand Down Expand Up @@ -265,4 +264,25 @@ 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;
}
}
14 changes: 14 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,20 @@
"info": {},
"paths": {
"\/dummy": {},
"\/path\/{id}": {
"get": {
"responses": {
"200": {
"description": "OK"
}
}
},
"parameters": [
{
"$ref": "#\/components\/schemas\/pathOutsideOperation"
}
]
},
"\/reference": {
"get": {
"parameters": [
Expand Down
14 changes: 14 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,20 @@
"info": {},
"paths": {
"/dummy": {},
"/path/{id}": {
"parameters": [
{
"$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 7ddcb8f

Please sign in to comment.