diff --git a/src/Microsoft.OpenApi.Readers/V2/OpenApiV2VersionService.cs b/src/Microsoft.OpenApi.Readers/V2/OpenApiV2VersionService.cs index c4d765734..718dcec04 100644 --- a/src/Microsoft.OpenApi.Readers/V2/OpenApiV2VersionService.cs +++ b/src/Microsoft.OpenApi.Readers/V2/OpenApiV2VersionService.cs @@ -34,6 +34,7 @@ public OpenApiV2VersionService(OpenApiDiagnostic diagnostic) private IDictionary> _loaders = new Dictionary> { [typeof(IOpenApiAny)] = OpenApiV2Deserializer.LoadAny, + [typeof(OpenApiContact)] = OpenApiV2Deserializer.LoadContact, [typeof(OpenApiExternalDocs)] = OpenApiV2Deserializer.LoadExternalDocs, [typeof(OpenApiHeader)] = OpenApiV2Deserializer.LoadHeader, [typeof(OpenApiInfo)] = OpenApiV2Deserializer.LoadInfo, diff --git a/src/Microsoft.OpenApi.Readers/V3/OpenApiV3VersionService.cs b/src/Microsoft.OpenApi.Readers/V3/OpenApiV3VersionService.cs index c967cde55..40b40e85a 100644 --- a/src/Microsoft.OpenApi.Readers/V3/OpenApiV3VersionService.cs +++ b/src/Microsoft.OpenApi.Readers/V3/OpenApiV3VersionService.cs @@ -35,6 +35,7 @@ public OpenApiV3VersionService(OpenApiDiagnostic diagnostic) [typeof(IOpenApiAny)] = OpenApiV3Deserializer.LoadAny, [typeof(OpenApiCallback)] = OpenApiV3Deserializer.LoadCallback, [typeof(OpenApiComponents)] = OpenApiV3Deserializer.LoadComponents, + [typeof(OpenApiContact)] = OpenApiV3Deserializer.LoadContact, [typeof(OpenApiEncoding)] = OpenApiV3Deserializer.LoadEncoding, [typeof(OpenApiExample)] = OpenApiV3Deserializer.LoadExample, [typeof(OpenApiExternalDocs)] = OpenApiV3Deserializer.LoadExternalDocs, diff --git a/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiContactTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiContactTests.cs new file mode 100644 index 000000000..71489d39f --- /dev/null +++ b/test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiContactTests.cs @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using FluentAssertions; +using Microsoft.OpenApi.Models; +using System; +using Xunit; + +namespace Microsoft.OpenApi.Readers.Tests.V2Tests +{ + public class OpenApiContactTests + { + [Fact] + public void ParseStringContactFragmentShouldSucceed() + { + var input = @" +{ + ""name"": ""API Support"", + ""url"": ""http://www.swagger.io/support"", + ""email"": ""support@swagger.io"" +} +"; + var reader = new OpenApiStringReader(); + var diagnostic = new OpenApiDiagnostic(); + + // Act + var contact = reader.ReadFragment(input, OpenApiSpecVersion.OpenApi2_0, out diagnostic); + + // Assert + diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); + + contact.Should().BeEquivalentTo( + new OpenApiContact + { + Email = "support@swagger.io", + Name = "API Support", + Url = new Uri("http://www.swagger.io/support") + }); + } + } +} diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiContactTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiContactTests.cs new file mode 100644 index 000000000..be78f942b --- /dev/null +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiContactTests.cs @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using FluentAssertions; +using Microsoft.OpenApi.Models; +using System; +using Xunit; + +namespace Microsoft.OpenApi.Readers.Tests.V3Tests +{ + public class OpenApiContactTests + { + [Fact] + public void ParseStringContactFragmentShouldSucceed() + { + var input = @" +{ + ""name"": ""API Support"", + ""url"": ""http://www.swagger.io/support"", + ""email"": ""support@swagger.io"" +} +"; + var reader = new OpenApiStringReader(); + var diagnostic = new OpenApiDiagnostic(); + + // Act + var contact = reader.ReadFragment(input, OpenApiSpecVersion.OpenApi3_0, out diagnostic); + + // Assert + diagnostic.Should().BeEquivalentTo(new OpenApiDiagnostic()); + + contact.Should().BeEquivalentTo( + new OpenApiContact + { + Email = "support@swagger.io", + Name = "API Support", + Url = new Uri("http://www.swagger.io/support") + }); + } + } +}