Skip to content

Commit 3385a0e

Browse files
authored
Merge pull request #2239 from captainsafia/safia/fix-http-perf
fix: handling for reference IDs with http prefix
2 parents 33465ba + f407815 commit 3385a0e

File tree

4 files changed

+57
-2
lines changed

4 files changed

+57
-2
lines changed

build.sh

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/bin/bash
2+
3+
echo "Building Microsoft.OpenApi"
4+
5+
PROJ="$(dirname "$0")/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj"
6+
dotnet msbuild "$PROJ" /t:restore /p:Configuration=Release
7+
dotnet msbuild "$PROJ" /t:build /p:Configuration=Release
8+
dotnet msbuild "$PROJ" /t:pack "/p:Configuration=Release;PackageOutputPath=$(dirname "$0")/artifacts"
9+
10+
echo "Building Microsoft.OpenApi.Readers"
11+
12+
PROJ="$(dirname "$0")/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj"
13+
dotnet msbuild "$PROJ" /t:restore /p:Configuration=Release
14+
dotnet msbuild "$PROJ" /t:build /p:Configuration=Release
15+
dotnet msbuild "$PROJ" /t:pack "/p:Configuration=Release;PackageOutputPath=$(dirname "$0")/artifacts"
16+
17+
echo "Building Microsoft.OpenApi.Hidi"
18+
19+
PROJ="$(dirname "$0")/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj"
20+
dotnet msbuild "$PROJ" /t:restore /p:Configuration=Release
21+
dotnet msbuild "$PROJ" /t:build /p:Configuration=Release
22+
dotnet msbuild "$PROJ" /t:pack "/p:Configuration=Release;PackageOutputPath=$(dirname "$0")/artifacts"

global.json

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"sdk": {
3+
"version": "8.0.406"
4+
}
5+
}

src/Microsoft.OpenApi/Models/OpenApiReference.cs

+4-2
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ public string ReferenceV3
9797
{
9898
return Id;
9999
}
100-
if (Id.StartsWith("http", StringComparison.OrdinalIgnoreCase))
100+
if (Id.StartsWith("http://", StringComparison.OrdinalIgnoreCase) ||
101+
Id.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
101102
{
102103
return Id;
103104
}
@@ -241,7 +242,8 @@ private string GetExternalReferenceV3()
241242
return ExternalResource + "#" + Id;
242243
}
243244

244-
if (Id.StartsWith("http", StringComparison.OrdinalIgnoreCase))
245+
if (Id.StartsWith("http://", StringComparison.OrdinalIgnoreCase) ||
246+
Id.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
245247
{
246248
return Id;
247249
}

test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs

+26
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public class OpenApiReferenceTests
1515
[InlineData("#/components/schemas/Pet", ReferenceType.Schema, "Pet")]
1616
[InlineData("#/components/parameters/name", ReferenceType.Parameter, "name")]
1717
[InlineData("#/components/responses/200", ReferenceType.Response, "200")]
18+
[InlineData("#/components/schemas/HttpValidationsProblem", ReferenceType.Schema, "HttpValidationsProblem")]
1819
public void SettingInternalReferenceForComponentsStyleReferenceShouldSucceed(
1920
string input,
2021
ReferenceType type,
@@ -43,6 +44,7 @@ public void SettingInternalReferenceForComponentsStyleReferenceShouldSucceed(
4344
[InlineData("Pet.json#/components/schemas/Pet", "Pet.json", "Pet", ReferenceType.Schema)]
4445
[InlineData("Pet.yaml#/components/schemas/Pet", "Pet.yaml", "Pet", ReferenceType.Schema)]
4546
[InlineData("abc#/components/schemas/Pet", "abc", "Pet", ReferenceType.Schema)]
47+
[InlineData("abc#/components/schemas/HttpsValidationProblem", "abc", "HttpsValidationProblem", ReferenceType.Schema)]
4648
public void SettingExternalReferenceV3ShouldSucceed(string expected, string externalResource, string id, ReferenceType? type)
4749
{
4850
// Arrange & Act
@@ -105,6 +107,30 @@ public async Task SerializeSchemaReferenceAsJsonV3Works()
105107
Assert.Equal(expected, actual);
106108
}
107109

110+
[Theory]
111+
[InlineData("HttpValidationProblemDetails", "#/components/schemas/HttpValidationProblemDetails")]
112+
[InlineData("http://example.com", "http://example.com")]
113+
[InlineData("https://example.com", "https://example.com")]
114+
public async Task SerializeHttpSchemaReferenceAsJsonV31Works(string id, string referenceV3)
115+
{
116+
// Arrange
117+
var reference = new OpenApiReference { Type = ReferenceType.Schema, Id = id };
118+
var expected =
119+
$$"""
120+
{
121+
"$ref": "{{referenceV3}}"
122+
}
123+
""";
124+
125+
// Act
126+
var actual = await reference.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_1);
127+
expected = expected.MakeLineBreaksEnvironmentNeutral();
128+
actual = actual.MakeLineBreaksEnvironmentNeutral();
129+
130+
// Assert
131+
Assert.Equal(expected, actual);
132+
}
133+
108134
[Fact]
109135
public async Task SerializeSchemaReferenceAsYamlV3Works()
110136
{

0 commit comments

Comments
 (0)