diff --git a/build.sh b/build.sh new file mode 100755 index 000000000..e716aa272 --- /dev/null +++ b/build.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +echo "Building Microsoft.OpenApi" + +PROJ="$(dirname "$0")/src/Microsoft.OpenApi/Microsoft.OpenApi.csproj" +dotnet msbuild "$PROJ" /t:restore /p:Configuration=Release +dotnet msbuild "$PROJ" /t:build /p:Configuration=Release +dotnet msbuild "$PROJ" /t:pack "/p:Configuration=Release;PackageOutputPath=$(dirname "$0")/artifacts" + +echo "Building Microsoft.OpenApi.Readers" + +PROJ="$(dirname "$0")/src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj" +dotnet msbuild "$PROJ" /t:restore /p:Configuration=Release +dotnet msbuild "$PROJ" /t:build /p:Configuration=Release +dotnet msbuild "$PROJ" /t:pack "/p:Configuration=Release;PackageOutputPath=$(dirname "$0")/artifacts" + +echo "Building Microsoft.OpenApi.Hidi" + +PROJ="$(dirname "$0")/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj" +dotnet msbuild "$PROJ" /t:restore /p:Configuration=Release +dotnet msbuild "$PROJ" /t:build /p:Configuration=Release +dotnet msbuild "$PROJ" /t:pack "/p:Configuration=Release;PackageOutputPath=$(dirname "$0")/artifacts" \ No newline at end of file diff --git a/global.json b/global.json new file mode 100644 index 000000000..aea4e9e3a --- /dev/null +++ b/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "8.0.406" + } +} \ No newline at end of file diff --git a/src/Microsoft.OpenApi/Models/OpenApiReference.cs b/src/Microsoft.OpenApi/Models/OpenApiReference.cs index 43d307fad..3ada601c0 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiReference.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiReference.cs @@ -97,7 +97,8 @@ public string ReferenceV3 { return Id; } - if (Id.StartsWith("http", StringComparison.OrdinalIgnoreCase)) + if (Id.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || + Id.StartsWith("https://", StringComparison.OrdinalIgnoreCase)) { return Id; } @@ -241,7 +242,8 @@ private string GetExternalReferenceV3() return ExternalResource + "#" + Id; } - if (Id.StartsWith("http", StringComparison.OrdinalIgnoreCase)) + if (Id.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || + Id.StartsWith("https://", StringComparison.OrdinalIgnoreCase)) { return Id; } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs index 2a27313ca..b75cb89e4 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiReferenceTests.cs @@ -15,6 +15,7 @@ public class OpenApiReferenceTests [InlineData("#/components/schemas/Pet", ReferenceType.Schema, "Pet")] [InlineData("#/components/parameters/name", ReferenceType.Parameter, "name")] [InlineData("#/components/responses/200", ReferenceType.Response, "200")] + [InlineData("#/components/schemas/HttpValidationsProblem", ReferenceType.Schema, "HttpValidationsProblem")] public void SettingInternalReferenceForComponentsStyleReferenceShouldSucceed( string input, ReferenceType type, @@ -43,6 +44,7 @@ public void SettingInternalReferenceForComponentsStyleReferenceShouldSucceed( [InlineData("Pet.json#/components/schemas/Pet", "Pet.json", "Pet", ReferenceType.Schema)] [InlineData("Pet.yaml#/components/schemas/Pet", "Pet.yaml", "Pet", ReferenceType.Schema)] [InlineData("abc#/components/schemas/Pet", "abc", "Pet", ReferenceType.Schema)] + [InlineData("abc#/components/schemas/HttpsValidationProblem", "abc", "HttpsValidationProblem", ReferenceType.Schema)] public void SettingExternalReferenceV3ShouldSucceed(string expected, string externalResource, string id, ReferenceType? type) { // Arrange & Act @@ -105,6 +107,30 @@ public async Task SerializeSchemaReferenceAsJsonV3Works() Assert.Equal(expected, actual); } + [Theory] + [InlineData("HttpValidationProblemDetails", "#/components/schemas/HttpValidationProblemDetails")] + [InlineData("http://example.com", "http://example.com")] + [InlineData("https://example.com", "https://example.com")] + public async Task SerializeHttpSchemaReferenceAsJsonV31Works(string id, string referenceV3) + { + // Arrange + var reference = new OpenApiReference { Type = ReferenceType.Schema, Id = id }; + var expected = + $$""" + { + "$ref": "{{referenceV3}}" + } + """; + + // Act + var actual = await reference.SerializeAsJsonAsync(OpenApiSpecVersion.OpenApi3_1); + expected = expected.MakeLineBreaksEnvironmentNeutral(); + actual = actual.MakeLineBreaksEnvironmentNeutral(); + + // Assert + Assert.Equal(expected, actual); + } + [Fact] public async Task SerializeSchemaReferenceAsYamlV3Works() {