From f9a529bec2cb451ff236b88ec256c9658883b5cc Mon Sep 17 00:00:00 2001 From: Michael Mutunga Date: Thu, 20 Mar 2025 16:28:11 +0300 Subject: [PATCH 1/6] chore: update-discriminator-mapping --- .../Models/OpenApiDiscriminator.cs | 17 ++++++++------ .../V3/OpenApiDiscriminatorDeserializer.cs | 12 +++++++++- .../Reader/V3/OpenApiV3VersionService.cs | 4 +++- .../V31/OpenApiDiscriminatorDeserializer.cs | 15 +++++++++++-- .../Reader/V31/OpenApiV31VersionService.cs | 4 +++- .../OpenApiDocument/docWithExample.yaml | 6 +++-- .../V3Tests/OpenApiDiscriminatorTests.cs | 22 ++++++++++++------- .../basicDiscriminator.yaml | 6 +++-- .../PublicApi/PublicApi.approved.txt | 2 +- 9 files changed, 63 insertions(+), 25 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs b/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs index 3bbae4561..63ab7890f 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs @@ -1,8 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.Collections.Generic; using Microsoft.OpenApi.Interfaces; +using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Writers; namespace Microsoft.OpenApi.Models @@ -20,7 +22,7 @@ public class OpenApiDiscriminator : IOpenApiSerializable, IOpenApiExtensible /// /// An object to hold mappings between payload values and schema names or references. /// - public IDictionary? Mapping { get; set; } = new Dictionary(); + public IDictionary? Mapping { get; set; } = new Dictionary(); /// /// This object MAY be extended with Specification Extensions. @@ -38,7 +40,7 @@ public OpenApiDiscriminator() { } public OpenApiDiscriminator(OpenApiDiscriminator discriminator) { PropertyName = discriminator?.PropertyName ?? PropertyName; - Mapping = discriminator?.Mapping != null ? new Dictionary(discriminator.Mapping) : null; + Mapping = discriminator?.Mapping != null ? new Dictionary(discriminator.Mapping) : null; Extensions = discriminator?.Extensions != null ? new Dictionary(discriminator.Extensions) : null; } @@ -48,7 +50,8 @@ public OpenApiDiscriminator(OpenApiDiscriminator discriminator) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer); + SerializeInternal(writer, + (writer, referenceElement) => referenceElement.SerializeAsV31(writer)); // extensions writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_1); @@ -61,7 +64,8 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer); + SerializeInternal(writer, + (writer, referenceElement) => referenceElement.SerializeAsV3(writer)); writer.WriteEndObject(); } @@ -69,8 +73,7 @@ public void SerializeAsV3(IOpenApiWriter writer) /// /// Serialize to Open Api v3.0 /// - /// - private void SerializeInternal(IOpenApiWriter writer) + private void SerializeInternal(IOpenApiWriter writer, Action action) { Utils.CheckArgumentNull(writer); @@ -80,7 +83,7 @@ private void SerializeInternal(IOpenApiWriter writer) writer.WriteProperty(OpenApiConstants.PropertyName, PropertyName); // mapping - writer.WriteOptionalMap(OpenApiConstants.Mapping, Mapping, (w, s) => w.WriteValue(s)); + writer.WriteOptionalMap(OpenApiConstants.Mapping, Mapping, (w, key, reference) => action(w, reference)); } /// diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiDiscriminatorDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiDiscriminatorDeserializer.cs index 1493283c0..566ce0137 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiDiscriminatorDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiDiscriminatorDeserializer.cs @@ -1,8 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System.Collections.Generic; using System.Linq; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Reader.ParseNodes; namespace Microsoft.OpenApi.Reader.V3 @@ -22,7 +24,7 @@ internal static partial class OpenApiV3Deserializer }, { "mapping", - (o, n, _) => o.Mapping = n.CreateSimpleMap(LoadString).Where(kv => kv.Value is not null).ToDictionary(kv => kv.Key, kv => kv.Value!) + (o, n, doc) => o.Mapping = n.CreateMap(LoadMapping, doc) } }; @@ -40,5 +42,13 @@ public static OpenApiDiscriminator LoadDiscriminator(ParseNode node, OpenApiDocu return discriminator; } + public static OpenApiSchemaReference LoadMapping(ParseNode node, OpenApiDocument hostDocument) + { + var mapNode = node.CheckMapNode("mapping"); + + var pointer = mapNode.GetReferencePointer(); + var reference = GetReferenceIdAndExternalResource(pointer!); + return new OpenApiSchemaReference(reference.Item1, hostDocument, reference.Item2); + } } } diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs index d568b327c..5d46cf6c1 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs @@ -9,6 +9,7 @@ using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Properties; using Microsoft.OpenApi.Reader.ParseNodes; @@ -62,7 +63,8 @@ public OpenApiV3VersionService(OpenApiDiagnostic diagnostic) [typeof(OpenApiServer)] = OpenApiV3Deserializer.LoadServer, [typeof(OpenApiServerVariable)] = OpenApiV3Deserializer.LoadServerVariable, [typeof(OpenApiTag)] = OpenApiV3Deserializer.LoadTag, - [typeof(OpenApiXml)] = OpenApiV3Deserializer.LoadXml + [typeof(OpenApiXml)] = OpenApiV3Deserializer.LoadXml, + [typeof(OpenApiSchemaReference)] = OpenApiV3Deserializer.LoadMapping }; public OpenApiDocument LoadDocument(RootNode rootNode) diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiDiscriminatorDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiDiscriminatorDeserializer.cs index e94f408d2..c4d835f19 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiDiscriminatorDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiDiscriminatorDeserializer.cs @@ -1,7 +1,9 @@ using System; +using System.Collections.Generic; using System.Linq; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Reader.ParseNodes; namespace Microsoft.OpenApi.Reader.V31 @@ -22,9 +24,9 @@ internal static partial class OpenApiV31Deserializer } }, { - "mapping", (o, n, _) => + "mapping", (o, n, doc) => { - o.Mapping = n.CreateSimpleMap(LoadString).Where(kv => kv.Value is not null).ToDictionary(kv => kv.Key, kv => kv.Value!); + o.Mapping = n.CreateMap(LoadMapping, doc); } } }; @@ -47,5 +49,14 @@ public static OpenApiDiscriminator LoadDiscriminator(ParseNode node, OpenApiDocu return discriminator; } + + public static OpenApiSchemaReference LoadMapping(ParseNode node, OpenApiDocument hostDocument) + { + var mapNode = node.CheckMapNode("mapping"); + + var pointer = mapNode.GetReferencePointer(); + var reference = GetReferenceIdAndExternalResource(pointer!); + return new OpenApiSchemaReference(reference.Item1, hostDocument, reference.Item2); + } } } diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31VersionService.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31VersionService.cs index bb6cac930..3a7d547f8 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31VersionService.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31VersionService.cs @@ -9,6 +9,7 @@ using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Properties; using Microsoft.OpenApi.Reader.ParseNodes; using Microsoft.OpenApi.Reader.V3; @@ -61,7 +62,8 @@ public OpenApiV31VersionService(OpenApiDiagnostic diagnostic) [typeof(OpenApiServer)] = OpenApiV31Deserializer.LoadServer, [typeof(OpenApiServerVariable)] = OpenApiV31Deserializer.LoadServerVariable, [typeof(OpenApiTag)] = OpenApiV31Deserializer.LoadTag, - [typeof(OpenApiXml)] = OpenApiV31Deserializer.LoadXml + [typeof(OpenApiXml)] = OpenApiV31Deserializer.LoadXml, + [typeof(OpenApiSchemaReference)] = OpenApiV31Deserializer.LoadMapping }; public OpenApiDocument LoadDocument(RootNode rootNode) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiDocument/docWithExample.yaml b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiDocument/docWithExample.yaml index f2a5dae79..85de7fcdc 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiDocument/docWithExample.yaml +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiDocument/docWithExample.yaml @@ -75,8 +75,10 @@ components: # Reusable components for the API discriminator: # The discriminator for resolving the concrete schema type propertyName: petType mapping: - cat: '#/components/schemas/Cat' - dog: '#/components/schemas/Dog' + cat: + $ref: '#/components/schemas/Cat' + dog: + $ref: '#/components/schemas/Dog' Cat: # A schema for a cat object allOf: - $ref: '#/components/schemas/Pet' diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs index 1629e1939..70e361196 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs @@ -1,10 +1,15 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; +using System.Diagnostics; using System.IO; using System.Threading.Tasks; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Reader; +using Microsoft.VisualStudio.TestPlatform.Utilities; +using Newtonsoft.Json; using Xunit; namespace Microsoft.OpenApi.Readers.Tests.V3Tests @@ -25,19 +30,20 @@ public async Task ParseBasicDiscriminatorShouldSucceed() memoryStream.Position = 0; // Act - var discriminator = OpenApiModelFactory.Load(memoryStream, OpenApiSpecVersion.OpenApi3_0, OpenApiConstants.Yaml, new(), out var diagnostic, SettingsFixture.ReaderSettings); + var openApiDocument = new OpenApiDocument(); + var discriminator = OpenApiModelFactory.Load(memoryStream, OpenApiSpecVersion.OpenApi3_0, OpenApiConstants.Yaml, openApiDocument, out var diagnostic, SettingsFixture.ReaderSettings); // Assert Assert.Equivalent( - new OpenApiDiscriminator - { - PropertyName = "pet_type", - Mapping = + new OpenApiDiscriminator + { + PropertyName = "pet_type", + Mapping = { - ["puppy"] = "#/components/schemas/Dog", - ["kitten"] = "Cat" + ["puppy"] = new OpenApiSchemaReference("Dog", openApiDocument), + ["kitten"] = new OpenApiSchemaReference("Cat", openApiDocument) } - }, discriminator); + }, discriminator); } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml index 7397462f3..a3d0aeade 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml @@ -1,4 +1,6 @@ propertyName: pet_type mapping: - puppy: '#/components/schemas/Dog' - kitten: Cat \ No newline at end of file + puppy: + $ref: '#/components/schemas/Dog' + kitten: + $ref: '#/components/schemas/Cat' \ No newline at end of file diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index 0d691d05e..755a9e17e 100644 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -699,7 +699,7 @@ namespace Microsoft.OpenApi.Models public OpenApiDiscriminator() { } public OpenApiDiscriminator(Microsoft.OpenApi.Models.OpenApiDiscriminator discriminator) { } public System.Collections.Generic.IDictionary? Extensions { get; set; } - public System.Collections.Generic.IDictionary? Mapping { get; set; } + public System.Collections.Generic.IDictionary? Mapping { get; set; } public string? PropertyName { get; set; } public void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } public void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { } From 7eb8d6bd2f640bc521957c1d8201270534a64dd2 Mon Sep 17 00:00:00 2001 From: Michael Mutunga Date: Wed, 26 Mar 2025 00:38:09 +0300 Subject: [PATCH 2/6] Resolve PR comments --- .../Models/OpenApiDiscriminator.cs | 18 +++++++++++------- .../V3/OpenApiDiscriminatorDeserializer.cs | 10 ++++------ .../Reader/V3/OpenApiV3VersionService.cs | 3 --- .../V31/OpenApiDiscriminatorDeserializer.cs | 9 +++------ .../Reader/V31/OpenApiV31VersionService.cs | 3 --- .../OpenApiDocument/docWithExample.yaml | 6 ++---- .../V3Tests/OpenApiDiscriminatorTests.cs | 5 +---- .../basicDiscriminator.yaml | 6 ++---- 8 files changed, 23 insertions(+), 37 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs b/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs index 63ab7890f..32a828c5b 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; using System.Collections.Generic; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models.References; @@ -50,8 +49,7 @@ public OpenApiDiscriminator(OpenApiDiscriminator discriminator) /// public void SerializeAsV31(IOpenApiWriter writer) { - SerializeInternal(writer, - (writer, referenceElement) => referenceElement.SerializeAsV31(writer)); + SerializeInternal(writer); // extensions writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_1); @@ -64,8 +62,7 @@ public void SerializeAsV31(IOpenApiWriter writer) /// public void SerializeAsV3(IOpenApiWriter writer) { - SerializeInternal(writer, - (writer, referenceElement) => referenceElement.SerializeAsV3(writer)); + SerializeInternal(writer); writer.WriteEndObject(); } @@ -73,7 +70,8 @@ public void SerializeAsV3(IOpenApiWriter writer) /// /// Serialize to Open Api v3.0 /// - private void SerializeInternal(IOpenApiWriter writer, Action action) + /// + private void SerializeInternal(IOpenApiWriter writer) { Utils.CheckArgumentNull(writer); @@ -83,7 +81,13 @@ private void SerializeInternal(IOpenApiWriter writer, Action action(w, reference)); + writer.WriteOptionalMap(OpenApiConstants.Mapping, Mapping, (w, s) => + { + if (!string.IsNullOrEmpty(s.Reference.ReferenceV3) && s.Reference.ReferenceV3 is not null) + { + w.WriteValue(s.Reference.ReferenceV3); + } + }); } /// diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiDiscriminatorDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiDiscriminatorDeserializer.cs index 566ce0137..21d8b4171 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiDiscriminatorDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiDiscriminatorDeserializer.cs @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System.Collections.Generic; +using System; using System.Linq; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; @@ -24,7 +24,7 @@ internal static partial class OpenApiV3Deserializer }, { "mapping", - (o, n, doc) => o.Mapping = n.CreateMap(LoadMapping, doc) + (o, n, doc) => o.Mapping = n.CreateSimpleMap((node) => LoadMapping(node, doc)) } }; @@ -44,10 +44,8 @@ public static OpenApiDiscriminator LoadDiscriminator(ParseNode node, OpenApiDocu } public static OpenApiSchemaReference LoadMapping(ParseNode node, OpenApiDocument hostDocument) { - var mapNode = node.CheckMapNode("mapping"); - - var pointer = mapNode.GetReferencePointer(); - var reference = GetReferenceIdAndExternalResource(pointer!); + var pointer = node.GetScalarValue() ?? throw new InvalidOperationException("Could not get a pointer reference"); + var reference = GetReferenceIdAndExternalResource(pointer); return new OpenApiSchemaReference(reference.Item1, hostDocument, reference.Item2); } } diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs index 5d46cf6c1..364eb1d54 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3VersionService.cs @@ -5,12 +5,9 @@ using System.Collections.Generic; using System.Linq; using Microsoft.OpenApi.Any; -using Microsoft.OpenApi.Exceptions; -using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; -using Microsoft.OpenApi.Properties; using Microsoft.OpenApi.Reader.ParseNodes; namespace Microsoft.OpenApi.Reader.V3 diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiDiscriminatorDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiDiscriminatorDeserializer.cs index c4d835f19..7eb288fd2 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiDiscriminatorDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiDiscriminatorDeserializer.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Linq; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; @@ -26,7 +25,7 @@ internal static partial class OpenApiV31Deserializer { "mapping", (o, n, doc) => { - o.Mapping = n.CreateMap(LoadMapping, doc); + o.Mapping = n.CreateSimpleMap((node) => LoadMapping(node, doc)); } } }; @@ -52,10 +51,8 @@ public static OpenApiDiscriminator LoadDiscriminator(ParseNode node, OpenApiDocu public static OpenApiSchemaReference LoadMapping(ParseNode node, OpenApiDocument hostDocument) { - var mapNode = node.CheckMapNode("mapping"); - - var pointer = mapNode.GetReferencePointer(); - var reference = GetReferenceIdAndExternalResource(pointer!); + var pointer = node.GetScalarValue() ?? throw new InvalidOperationException("Could not get a pointer reference"); + var reference = GetReferenceIdAndExternalResource(pointer); return new OpenApiSchemaReference(reference.Item1, hostDocument, reference.Item2); } } diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31VersionService.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31VersionService.cs index 3a7d547f8..3e010be9b 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31VersionService.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31VersionService.cs @@ -5,12 +5,9 @@ using System.Collections.Generic; using System.Linq; using Microsoft.OpenApi.Any; -using Microsoft.OpenApi.Exceptions; -using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; -using Microsoft.OpenApi.Properties; using Microsoft.OpenApi.Reader.ParseNodes; using Microsoft.OpenApi.Reader.V3; diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiDocument/docWithExample.yaml b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiDocument/docWithExample.yaml index 85de7fcdc..f2a5dae79 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiDocument/docWithExample.yaml +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiDocument/docWithExample.yaml @@ -75,10 +75,8 @@ components: # Reusable components for the API discriminator: # The discriminator for resolving the concrete schema type propertyName: petType mapping: - cat: - $ref: '#/components/schemas/Cat' - dog: - $ref: '#/components/schemas/Dog' + cat: '#/components/schemas/Cat' + dog: '#/components/schemas/Dog' Cat: # A schema for a cat object allOf: - $ref: '#/components/schemas/Pet' diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs index 70e361196..53169abde 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs @@ -2,14 +2,11 @@ // Licensed under the MIT license. using System; -using System.Diagnostics; using System.IO; using System.Threading.Tasks; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Reader; -using Microsoft.VisualStudio.TestPlatform.Utilities; -using Newtonsoft.Json; using Xunit; namespace Microsoft.OpenApi.Readers.Tests.V3Tests @@ -41,7 +38,7 @@ public async Task ParseBasicDiscriminatorShouldSucceed() Mapping = { ["puppy"] = new OpenApiSchemaReference("Dog", openApiDocument), - ["kitten"] = new OpenApiSchemaReference("Cat", openApiDocument) + ["monster"] = new OpenApiSchemaReference("schema.json" , openApiDocument, "https://gigantic-server.com/schemas/Monster/schema.json") } }, discriminator); } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml index a3d0aeade..91cecada2 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml @@ -1,6 +1,4 @@ propertyName: pet_type mapping: - puppy: - $ref: '#/components/schemas/Dog' - kitten: - $ref: '#/components/schemas/Cat' \ No newline at end of file + puppy: '#/components/schemas/Dog' + monster: https://gigantic-server.com/schemas/Monster/schema.json \ No newline at end of file From 1a0298ffe239f163c314f10cca822c42a5ba4130 Mon Sep 17 00:00:00 2001 From: Michael Mutunga Date: Thu, 27 Mar 2025 16:13:29 +0300 Subject: [PATCH 3/6] Resolve PR comments --- .../V3Tests/OpenApiDiscriminatorTests.cs | 1 + .../V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs index 53169abde..d3d929e69 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs @@ -38,6 +38,7 @@ public async Task ParseBasicDiscriminatorShouldSucceed() Mapping = { ["puppy"] = new OpenApiSchemaReference("Dog", openApiDocument), + ["kitten"] = new OpenApiSchemaReference("Cat" , openApiDocument, "Cat"), ["monster"] = new OpenApiSchemaReference("schema.json" , openApiDocument, "https://gigantic-server.com/schemas/Monster/schema.json") } }, discriminator); diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml index 91cecada2..ddfd93437 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml @@ -1,4 +1,5 @@ propertyName: pet_type mapping: puppy: '#/components/schemas/Dog' + kitten: Cat monster: https://gigantic-server.com/schemas/Monster/schema.json \ No newline at end of file From 77349591ec7039ee8ce62770e5dea9d1d7e40b3a Mon Sep 17 00:00:00 2001 From: Michael Mutunga Date: Mon, 31 Mar 2025 14:43:11 +0300 Subject: [PATCH 4/6] Resolve PR comment --- .../V3Tests/OpenApiDiscriminatorTests.cs | 2 +- .../Samples/OpenApiDiscriminator/basicDiscriminator.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs index d3d929e69..b2045a1a2 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs @@ -38,7 +38,7 @@ public async Task ParseBasicDiscriminatorShouldSucceed() Mapping = { ["puppy"] = new OpenApiSchemaReference("Dog", openApiDocument), - ["kitten"] = new OpenApiSchemaReference("Cat" , openApiDocument, "Cat"), + ["kitten"] = new OpenApiSchemaReference("animals.json" , openApiDocument, "https://gigantic-server.com/schemas/animals.json"), ["monster"] = new OpenApiSchemaReference("schema.json" , openApiDocument, "https://gigantic-server.com/schemas/Monster/schema.json") } }, discriminator); diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml index ddfd93437..8538d0e52 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml @@ -1,5 +1,5 @@ propertyName: pet_type mapping: puppy: '#/components/schemas/Dog' - kitten: Cat + kitten: https://gigantic-server.com/schemas/animals.json monster: https://gigantic-server.com/schemas/Monster/schema.json \ No newline at end of file From fc1bbf891bbb04a41d34b88b3a9c63fec04994de Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 31 Mar 2025 08:43:49 -0400 Subject: [PATCH 5/6] Update test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs --- .../V3Tests/OpenApiDiscriminatorTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs index b2045a1a2..f1b047f08 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs @@ -38,7 +38,7 @@ public async Task ParseBasicDiscriminatorShouldSucceed() Mapping = { ["puppy"] = new OpenApiSchemaReference("Dog", openApiDocument), - ["kitten"] = new OpenApiSchemaReference("animals.json" , openApiDocument, "https://gigantic-server.com/schemas/animals.json"), + ["kitten"] = new OpenApiSchemaReference("Cat" , openApiDocument, "https://gigantic-server.com/schemas/animals.json"), ["monster"] = new OpenApiSchemaReference("schema.json" , openApiDocument, "https://gigantic-server.com/schemas/Monster/schema.json") } }, discriminator); From b0c8f9cdcf5d9581db89689b921c7788f63ee484 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 31 Mar 2025 08:53:37 -0400 Subject: [PATCH 6/6] chore: fixes mapping reference test schema Signed-off-by: Vincent Biret --- .../Samples/OpenApiDiscriminator/basicDiscriminator.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml index 8538d0e52..21e6adc6c 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiDiscriminator/basicDiscriminator.yaml @@ -1,5 +1,5 @@ propertyName: pet_type mapping: puppy: '#/components/schemas/Dog' - kitten: https://gigantic-server.com/schemas/animals.json + kitten: https://gigantic-server.com/schemas/animals.json#/components/schemas/Cat monster: https://gigantic-server.com/schemas/Monster/schema.json \ No newline at end of file