From d7729cea32a7f4aa91be274f6182c1eabb4c5866 Mon Sep 17 00:00:00 2001 From: Sam Xu Date: Mon, 30 Oct 2017 17:11:35 -0700 Subject: [PATCH] Change and add test for OpenApiTag --- src/Microsoft.OpenApi/Models/OpenApiTag.cs | 22 ++++-- .../Models/OpenApiTagTests.cs | 70 ++++++++++++++++++- 2 files changed, 87 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiTag.cs b/src/Microsoft.OpenApi/Models/OpenApiTag.cs index 6f5a420c0..a7b659b2d 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiTag.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiTag.cs @@ -51,8 +51,15 @@ internal override void WriteAsV3(IOpenApiWriter writer) } writer.WriteStartObject(); - writer.WriteStringProperty("name", Name); - writer.WriteStringProperty("description", Description); + + writer.WriteStringProperty(OpenApiConstants.OpenApiDocName, Name); + + writer.WriteStringProperty(OpenApiConstants.OpenApiDocDescription, Description); + + writer.WriteObject(OpenApiConstants.OpenApiDocExternalDocs, ExternalDocs, (w, e) => e.WriteAsV3(w)); + + writer.WriteExtensions(Extensions); + writer.WriteEndObject(); } @@ -67,8 +74,15 @@ internal override void WriteAsV2(IOpenApiWriter writer) } writer.WriteStartObject(); - writer.WriteStringProperty("name", Name); - writer.WriteStringProperty("description", Description); + + writer.WriteStringProperty(OpenApiConstants.OpenApiDocName, Name); + + writer.WriteStringProperty(OpenApiConstants.OpenApiDocDescription, Description); + + writer.WriteObject(OpenApiConstants.OpenApiDocExternalDocs, ExternalDocs, (w, e) => e.WriteAsV2(w)); + + writer.WriteExtensions(Extensions); + writer.WriteEndObject(); } } diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs index b038bc812..641defd79 100644 --- a/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs +++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiTagTests.cs @@ -3,6 +3,10 @@ // Licensed under the MIT License (MIT). See LICENSE in the repo root for license information. // ------------------------------------------------------------ +using System.Collections.Generic; +using Microsoft.OpenApi.Any; +using Xunit; + namespace Microsoft.OpenApi.Models.Tests { public class OpenApiTagTests @@ -12,7 +16,71 @@ public class OpenApiTagTests { Name = "pet", Description = "Pets operations", - ExternalDocs = OpenApiExternalDocsTests.AdvanceExDocs + ExternalDocs = OpenApiExternalDocsTests.AdvanceExDocs, + Extensions = new Dictionary + { + { "x-tag-extension", new OpenApiNull() } + } }; + + [Theory] + [InlineData(OpenApiSpecVersion.OpenApi3_0, OpenApiFormat.Json, "{ }")] + [InlineData(OpenApiSpecVersion.OpenApi2_0, OpenApiFormat.Json, "{ }")] + [InlineData(OpenApiSpecVersion.OpenApi3_0, OpenApiFormat.Yaml, "")] + [InlineData(OpenApiSpecVersion.OpenApi2_0, OpenApiFormat.Yaml, "")] + public void SerializeBasicTagWorks(OpenApiSpecVersion version, + OpenApiFormat format, string expect) + { + // Arrange & Act + string actual = BasicTag.Serialize(version, format); + + // Assert + Assert.Equal(expect, actual); + } + + [Theory] + [InlineData(OpenApiSpecVersion.OpenApi3_0)] + [InlineData(OpenApiSpecVersion.OpenApi2_0)] + public void SerializeAdvanceTagAsJsonWorks(OpenApiSpecVersion version) + { + // Arrange + string expect = @" +{ + ""name"": ""pet"", + ""description"": ""Pets operations"", + ""externalDocs"": { + ""description"": ""Find more info here"", + ""url"": ""https://example.com"" + }, + ""x-tag-extension"": null +}"; + + // Act + string actual = AdvanceTag.SerializeAsJson(version); + + // Assert + Assert.Equal(expect, actual); + } + + [Theory] + [InlineData(OpenApiSpecVersion.OpenApi3_0)] + [InlineData(OpenApiSpecVersion.OpenApi2_0)] + public void SerializeAdvanceTagAsYamlWorks(OpenApiSpecVersion version) + { + // Arrange + string expect = @" +name: pet +description: Pets operations +externalDocs: + description: Find more info here + url: https://example.com +x-tag-extension: "; + + // Act + string actual = AdvanceTag.SerializeAsYaml(version); + + // Assert + Assert.Equal(expect, actual); + } } }