From acf67415b8d5faeec5b0d9934c22d0de9e773dd1 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 11 Apr 2023 11:08:15 -0400 Subject: [PATCH] - fixes a bug where the base path would be forcibly set to the description --- .../V2/OpenApiDocumentDeserializer.cs | 6 ++++ .../V2Tests/OpenApiServerTests.cs | 29 +++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Readers/V2/OpenApiDocumentDeserializer.cs b/src/Microsoft.OpenApi.Readers/V2/OpenApiDocumentDeserializer.cs index 02e868412..fa3aa7224 100644 --- a/src/Microsoft.OpenApi.Readers/V2/OpenApiDocumentDeserializer.cs +++ b/src/Microsoft.OpenApi.Readers/V2/OpenApiDocumentDeserializer.cs @@ -139,6 +139,12 @@ private static void MakeServers(IList servers, ParsingContext con var schemes = context.GetFromTempStorage>("schemes"); Uri defaultUrl = rootNode.Context.BaseUrl; + // so we don't default to the document path when a host is provided + if (string.IsNullOrEmpty(basePath) && !string.IsNullOrEmpty(host)) + { + basePath = "/"; + } + // If nothing is provided, don't create a server if (host == null && basePath == null && schemes == null) { diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs index c87b491ab..1b917fde7 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs @@ -74,6 +74,31 @@ public void JustHostNoDefault() Assert.Equal("//www.foo.com", server.Url); } + [Fact] + public void NoBasePath() + { + var input = @" +swagger: 2.0 +info: + title: test + version: 1.0.0 +host: www.foo.com +schemes: + - http +paths: {} +"; + var reader = new OpenApiStringReader(new OpenApiReaderSettings() + { + BaseUrl = new Uri("https://www.foo.com/spec.yaml") + }); + + var doc = reader.Read(input, out var diagnostic); + + var server = doc.Servers.First(); + Assert.Equal(1, doc.Servers.Count); + Assert.Equal("http://www.foo.com", server.Url); + } + [Fact] public void JustBasePathNoDefault() { @@ -203,14 +228,14 @@ public void JustHostWithCustomHostWithApi() "; var reader = new OpenApiStringReader(new OpenApiReaderSettings() { - BaseUrl = new Uri("https://dev.bing.com/api") + BaseUrl = new Uri("https://dev.bing.com/api/description.yaml") }); var doc = reader.Read(input, out var diagnostic); var server = doc.Servers.First(); Assert.Equal(1, doc.Servers.Count); - Assert.Equal("https://prod.bing.com/api", server.Url); + Assert.Equal("https://prod.bing.com", server.Url); } [Fact]