Skip to content

Commit 2a62c5a

Browse files
committed
fix: link reference annotations parsing
Signed-off-by: Vincent Biret <[email protected]>
1 parent 8bf012b commit 2a62c5a

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ public static IOpenApiLink LoadLink(ParseNode node, OpenApiDocument hostDocument
5757
if (pointer != null)
5858
{
5959
var reference = GetReferenceIdAndExternalResource(pointer);
60-
return new OpenApiLinkReference(reference.Item1, hostDocument, reference.Item2);
60+
var linkReference = new OpenApiLinkReference(reference.Item1, hostDocument, reference.Item2);
61+
linkReference.Reference.SetMetadataFromMapNode(mapNode);
62+
return linkReference;
6163
}
6264

6365
ParseMap(mapNode, link, _linkFixedFields, _linkPatternFields, hostDocument);
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
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 OpenApiLinkReferenceDeserializerTests
9+
{
10+
[Fact]
11+
public void ShouldDeserializeLinkReferenceAnnotations()
12+
{
13+
var json =
14+
"""
15+
{
16+
"$ref": "#/components/links/MyLink",
17+
"description": "This is a link reference"
18+
}
19+
""";
20+
21+
var hostDocument = new OpenApiDocument();
22+
hostDocument.AddComponent("MyLink", new OpenApiLink
23+
{
24+
Description = "This is a link description",
25+
});
26+
var jsonNode = JsonNode.Parse(json);
27+
var parseNode = ParseNode.Create(new ParsingContext(new()), jsonNode);
28+
29+
var result = OpenApiV31Deserializer.LoadLink(parseNode, hostDocument);
30+
31+
Assert.NotNull(result);
32+
var resultReference = Assert.IsType<OpenApiLinkReference>(result);
33+
34+
Assert.Equal("MyLink", resultReference.Reference.Id);
35+
Assert.Equal("This is a link reference", resultReference.Description);
36+
Assert.NotNull(resultReference.Target);
37+
}
38+
}

0 commit comments

Comments
 (0)