Skip to content

Commit ccc3733

Browse files
committed
fix: security scheme reference annoations parsing
Signed-off-by: Vincent Biret <[email protected]>
1 parent d9a78dc commit ccc3733

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

src/Microsoft.OpenApi/Reader/V31/OpenApiSecuritySchemeDeserializer.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,9 @@ public static IOpenApiSecurityScheme LoadSecurityScheme(ParseNode node, OpenApiD
9090
if (pointer != null)
9191
{
9292
var reference = GetReferenceIdAndExternalResource(pointer);
93-
return new OpenApiSecuritySchemeReference(reference.Item1, hostDocument, reference.Item2);
93+
var securitySchemeReference = new OpenApiSecuritySchemeReference(reference.Item1, hostDocument, reference.Item2);
94+
securitySchemeReference.Reference.SetMetadataFromMapNode(mapNode);
95+
return securitySchemeReference;
9496
}
9597

9698
var securityScheme = new OpenApiSecurityScheme();
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using System.Text.Json.Nodes;
2+
using Microsoft.OpenApi.Reader;
3+
using Microsoft.OpenApi.Reader.V31;
4+
using Xunit;
5+
6+
namespace Microsoft.OpenApi.Readers.Tests.V31Tests;
7+
8+
public class OpenApiSecuritySchemeReferenceDeserializerTests
9+
{
10+
[Fact]
11+
public void ShouldDeserializeSecuritySchemeReferenceAnnotations()
12+
{
13+
var json =
14+
"""
15+
{
16+
"$ref": "#/components/securitySchemes/MyScheme",
17+
"description": "This is a security scheme reference"
18+
}
19+
""";
20+
21+
var hostDocument = new OpenApiDocument();
22+
hostDocument.AddComponent("MyScheme", new OpenApiSecurityScheme
23+
{
24+
Type = SecuritySchemeType.ApiKey,
25+
Name = "api_key",
26+
In = ParameterLocation.Header,
27+
Description = "This is a security scheme description",
28+
});
29+
var jsonNode = JsonNode.Parse(json);
30+
var parseNode = ParseNode.Create(new ParsingContext(new()), jsonNode);
31+
32+
var result = OpenApiV31Deserializer.LoadSecurityScheme(parseNode, hostDocument);
33+
34+
Assert.NotNull(result);
35+
var resultReference = Assert.IsType<OpenApiSecuritySchemeReference>(result);
36+
37+
Assert.Equal("MyScheme", resultReference.Reference.Id);
38+
Assert.Equal("This is a security scheme reference", resultReference.Description);
39+
Assert.NotNull(resultReference.Target);
40+
}
41+
}

0 commit comments

Comments
 (0)