Skip to content

Commit 7aae53b

Browse files
committed
Fixed issue with v2 external references
1 parent 4207845 commit 7aae53b

File tree

7 files changed

+76
-12
lines changed

7 files changed

+76
-12
lines changed

src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@
3333

3434
<ItemGroup>
3535
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
36-
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.0" />
36+
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.1" />
3737
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="6.0.0" />
3838
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="6.0.0" />
39-
<PackageReference Include="System.CommandLine" Version="2.0.0-beta2.21617.1" />
39+
<PackageReference Include="System.CommandLine" Version="2.0.0-beta3.22114.1" />
4040
<PackageReference Include="Microsoft.OData.Edm" Version="7.10.0" />
4141
<PackageReference Include="Microsoft.OpenApi.OData" Version="1.0.10-preview1" />
4242
</ItemGroup>

src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
</ItemGroup>
4141

4242
<ItemGroup>
43-
<PackageReference Include="SharpYaml" Version="1.8.0" />
43+
<PackageReference Include="SharpYaml" Version="1.9.0" />
4444
</ItemGroup>
4545

4646
<ItemGroup>

src/Microsoft.OpenApi.Readers/V2/OpenApiV2VersionService.cs

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,30 @@ private static string GetReferenceTypeV2Name(ReferenceType referenceType)
130130
}
131131
}
132132

133+
private static ReferenceType GetReferenceTypeV2FromName(string referenceType)
134+
{
135+
switch (referenceType)
136+
{
137+
case "definitions":
138+
return ReferenceType.Schema;
139+
140+
case "parameters":
141+
return ReferenceType.Parameter;
142+
143+
case "responses":
144+
return ReferenceType.Response;
145+
146+
case "tags":
147+
return ReferenceType.Tag;
148+
149+
case "securityDefinitions":
150+
return ReferenceType.SecurityScheme;
151+
152+
default:
153+
throw new ArgumentException();
154+
}
155+
}
156+
133157
/// <summary>
134158
/// Parse the string to a <see cref="OpenApiReference"/> object.
135159
/// </summary>
@@ -176,12 +200,34 @@ public OpenApiReference ConvertToOpenApiReference(string reference, ReferenceTyp
176200
}
177201
}
178202

203+
// Where fragments point into a non-OpenAPI document, the id will be the complete fragment identifier
204+
string id = segments[1];
205+
// $ref: externalSource.yaml#/Pet
206+
if (id.StartsWith("/definitions/"))
207+
{
208+
var localSegments = id.Split('/');
209+
var referencedType = GetReferenceTypeV2FromName(localSegments[1]);
210+
if (type == null)
211+
{
212+
type = referencedType;
213+
}
214+
else
215+
{
216+
if (type != referencedType)
217+
{
218+
throw new OpenApiException("Referenced type mismatch");
219+
}
220+
}
221+
id = localSegments[2];
222+
}
223+
224+
179225
// $ref: externalSource.yaml#/Pet
180226
return new OpenApiReference
181227
{
182228
ExternalResource = segments[0],
183229
Type = type,
184-
Id = segments[1].Substring(1)
230+
Id = id
185231
};
186232
}
187233
}

src/Microsoft.OpenApi.Readers/V3/OpenApiV3VersionService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Microsoft Corporation. All rights reserved.
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

44
using System;

test/Microsoft.OpenApi.Readers.Tests/Microsoft.OpenApi.Readers.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@
247247
</PackageReference>
248248
<PackageReference Include="Newtonsoft.Json" Version="13.0.1">
249249
</PackageReference>
250-
<PackageReference Include="SharpYaml" Version="1.8.0">
250+
<PackageReference Include="SharpYaml" Version="1.9.0">
251251
</PackageReference>
252252
<PackageReference Include="xunit" Version="2.4.1">
253253
</PackageReference>

test/Microsoft.OpenApi.Readers.Tests/ReferenceService/ConvertToOpenApiReferenceV2Tests.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,32 @@ public ConvertToOpenApiReferenceV2Tests()
1717
Diagnostic = new OpenApiDiagnostic();
1818
}
1919

20+
[Fact]
21+
public void ParseExternalReferenceToV2OpenApi()
22+
{
23+
// Arrange
24+
var versionService = new OpenApiV2VersionService(Diagnostic);
25+
var externalResource = "externalSchema.json";
26+
var id = "mySchema";
27+
var input = $"{externalResource}#/definitions/{id}";
28+
29+
// Act
30+
var reference = versionService.ConvertToOpenApiReference(input, null);
31+
32+
// Assert
33+
reference.ExternalResource.Should().Be(externalResource);
34+
reference.Type.Should().NotBeNull();
35+
reference.Id.Should().Be(id);
36+
}
37+
2038
[Fact]
2139
public void ParseExternalReference()
2240
{
2341
// Arrange
2442
var versionService = new OpenApiV2VersionService(Diagnostic);
2543
var externalResource = "externalSchema.json";
26-
var id = "externalPathSegment1/externalPathSegment2/externalPathSegment3";
27-
var input = $"{externalResource}#/{id}";
44+
var id = "/externalPathSegment1/externalPathSegment2/externalPathSegment3";
45+
var input = $"{externalResource}#{id}";
2846

2947
// Act
3048
var reference = versionService.ConvertToOpenApiReference(input, null);

test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717
<ItemGroup>
1818
<PackageReference Include="FluentAssertions" Version="6.5.1" />
1919
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
20-
<PackageReference Include="Moq" Version="4.16.1" />
20+
<PackageReference Include="Moq" Version="4.17.2" />
2121
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
22-
<PackageReference Include="SharpYaml" Version="1.8.0" />
23-
<PackageReference Include="Verify" Version="16.1.2" />
24-
<PackageReference Include="Verify.Xunit" Version="16.1.2" />
22+
<PackageReference Include="SharpYaml" Version="1.9.0" />
23+
<PackageReference Include="Verify" Version="16.4.3" />
24+
<PackageReference Include="Verify.Xunit" Version="16.4.3" />
2525
<PackageReference Include="xunit" Version="2.4.1" />
2626
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
2727
<PrivateAssets>all</PrivateAssets>

0 commit comments

Comments
 (0)