From 5b408268e292a193cecacb87f47f4319bae7f9fd Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 4 Dec 2023 13:06:28 +0100 Subject: [PATCH] Fix unresolved references in OpenApiWalker --- src/Microsoft.OpenApi/Services/OpenApiWalker.cs | 3 ++- .../Walkers/WalkerLocationTests.cs | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi/Services/OpenApiWalker.cs b/src/Microsoft.OpenApi/Services/OpenApiWalker.cs index 7ce011f4b..446663f6b 100644 --- a/src/Microsoft.OpenApi/Services/OpenApiWalker.cs +++ b/src/Microsoft.OpenApi/Services/OpenApiWalker.cs @@ -1091,7 +1091,8 @@ private void Walk(string context, Action walk) /// private bool ProcessAsReference(IOpenApiReferenceable referenceable, bool isComponent = false) { - var isReference = referenceable.Reference != null && !isComponent; + var isReference = referenceable.Reference != null && + (!isComponent || referenceable.UnresolvedReference); if (isReference) { Walk(referenceable); diff --git a/test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs b/test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs index 09c808a1e..83b7eb341 100644 --- a/test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs +++ b/test/Microsoft.OpenApi.Tests/Walkers/WalkerLocationTests.cs @@ -233,6 +233,18 @@ public void LocateReferences() Headers = new Dictionary { ["test-header"] = testHeader + }, + SecuritySchemes = new Dictionary + { + ["test-secScheme"] = new OpenApiSecurityScheme + { + Reference = new OpenApiReference + { + Id = "reference-to-scheme", + Type = ReferenceType.SecurityScheme + }, + UnresolvedReference = true + } } } }; @@ -245,6 +257,7 @@ public void LocateReferences() "referenceAt: #/paths/~1/get/responses/200/content/application~1json/schema", "referenceAt: #/paths/~1/get/responses/200/headers/test-header", "referenceAt: #/components/schemas/derived/anyOf/0", + "referenceAt: #/components/securitySchemes/test-secScheme", "referenceAt: #/components/headers/test-header/schema" }); }