From 4697af47cb974386867e8b13118eff2e928abb4e Mon Sep 17 00:00:00 2001 From: "vitaly.melnik" Date: Fri, 22 Aug 2025 20:35:13 +0300 Subject: [PATCH 1/2] fix: missing examples when one example is with an empty array. Signed-off-by: Vincent Biret --- .../Models/OpenApiExample.cs | 5 +++- .../Models/OpenApiMediaType.cs | 30 +------------------ .../V3Tests/OpenApiMediaTypeTests.cs | 9 ++++++ .../examplesWithEmptyArray.json | 7 +++++ 4 files changed, 21 insertions(+), 30 deletions(-) diff --git a/src/Microsoft.OpenApi/Models/OpenApiExample.cs b/src/Microsoft.OpenApi/Models/OpenApiExample.cs index c78353127..78b02d9fc 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiExample.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiExample.cs @@ -138,7 +138,10 @@ public void Serialize(IOpenApiWriter writer, OpenApiSpecVersion version) writer.WriteProperty(OpenApiConstants.Description, Description); // value - writer.WriteOptionalObject(OpenApiConstants.Value, Value, (w, v) => w.WriteAny(v)); + if (Value is not null) + { + writer.WriteRequiredObject(OpenApiConstants.Value, Value, (w, v) => w.WriteAny(v)); + } // externalValue writer.WriteProperty(OpenApiConstants.ExternalValue, ExternalValue); diff --git a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs index 1ee1ce176..592154971 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs @@ -79,7 +79,7 @@ public void SerializeAsV3(IOpenApiWriter writer) // examples if (Examples != null && Examples.Any()) { - SerializeExamples(writer, Examples); + writer.WriteOptionalMap(OpenApiConstants.Examples, Examples, (w, e) => e.SerializeAsV3(w)); } // encoding @@ -98,33 +98,5 @@ public void SerializeAsV2(IOpenApiWriter writer) { // Media type does not exist in V2. } - - private static void SerializeExamples(IOpenApiWriter writer, IDictionary examples) - { - /* Special case for writing out empty arrays as valid response examples - * Check if there is any example with an empty array as its value and set the flag `hasEmptyArray` to true - * */ - var hasEmptyArray = examples.Values.Any( static example => - example.Value is OpenApiArray arr && arr.Count == 0 - ); - - if (hasEmptyArray) - { - writer.WritePropertyName(OpenApiConstants.Examples); - writer.WriteStartObject(); - foreach (var kvp in examples.Where(static kvp => kvp.Value.Value is OpenApiArray arr && arr.Count == 0)) - { - writer.WritePropertyName(kvp.Key); - writer.WriteStartObject(); - writer.WriteRequiredObject(OpenApiConstants.Value, kvp.Value.Value, (w, v) => w.WriteAny(v)); - writer.WriteEndObject(); - } - writer.WriteEndObject(); - } - else - { - writer.WriteOptionalMap(OpenApiConstants.Examples, examples, (w, e) => e.SerializeAsV3(w)); - } - } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs index 266809561..db704c29b 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs @@ -98,7 +98,16 @@ public void ParseMediaTypeWithEmptyArrayInExamplesWorks() }, ""examples"": { ""Success response - no results"": { + ""summary"": ""empty array summary"", + ""description"": ""empty array description"", ""value"": [ ] + }, + ""Success response - with results"": { + ""summary"": ""array summary"", + ""description"": ""array description"", + ""value"": [ + 1 + ] } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiMediaType/examplesWithEmptyArray.json b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiMediaType/examplesWithEmptyArray.json index 0d13dcaf2..c2b0a09e4 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiMediaType/examplesWithEmptyArray.json +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiMediaType/examplesWithEmptyArray.json @@ -12,7 +12,14 @@ }, "examples": { "Success response - no results": { + "summary": "empty array summary", + "description": "empty array description", "value": [] + }, + "Success response - with results": { + "summary": "array summary", + "description": "array description", + "value": [ 1 ] } } } \ No newline at end of file From e9def6387f8823f830eab978395a5ecc59eccd05 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 22 Aug 2025 14:34:11 -0400 Subject: [PATCH 2/2] chore: aligns new test value with expected serialization format Signed-off-by: Vincent Biret --- .../V3Tests/OpenApiMediaTypeTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs index db704c29b..e699171bc 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs @@ -106,7 +106,7 @@ public void ParseMediaTypeWithEmptyArrayInExamplesWorks() ""summary"": ""array summary"", ""description"": ""array description"", ""value"": [ - 1 + ""1"" ] } }