Skip to content

Commit f702dbc

Browse files
authored
Merge pull request #2556 from microsoft/fix/empty-default
fix/empty default
2 parents 5fa053a + 4c4d257 commit f702dbc

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

src/Microsoft.OpenApi/Writers/OpenApiWriterExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,9 @@ public static void WriteOptionalObject<T>(
141141
{
142142
if (value != null)
143143
{
144-
if (value is IEnumerable values && !values.GetEnumerator().MoveNext())
144+
if (value is IEnumerable values && value is not JsonArray && !values.GetEnumerator().MoveNext())
145145
{
146-
return; // Don't render optional empty collections
146+
return; // Don't render optional empty collections except for the Default properties which are JsonArray
147147
}
148148

149149
writer.WriteRequiredObject(name, value, action);

test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,40 @@ public void CloningSchemaWithExamplesAndEnumsShouldSucceed()
315315
Assert.Equivalent(6, clone.Default.GetValue<int>());
316316
}
317317

318+
[Fact]
319+
public void DefaultEmptyCollectionShouldRoundTrip()
320+
{
321+
// Given
322+
var serializedSchema =
323+
"""
324+
{
325+
"type": "array",
326+
"items": {
327+
"type": "string",
328+
"default": []
329+
}
330+
}
331+
""";
332+
using var textWriter = new StringWriter();
333+
var writer = new OpenApiJsonWriter(textWriter);
334+
335+
// When
336+
var schema = OpenApiModelFactory.Parse<OpenApiSchema>(serializedSchema, OpenApiSpecVersion.OpenApi3_1, new(), out _, "json", SettingsFixture.ReaderSettings);
337+
338+
var deserializedArray = Assert.IsType<JsonArray>(schema.Items.Default);
339+
Assert.Empty(deserializedArray);
340+
341+
schema.SerializeAsV31(writer);
342+
var roundTrippedSchema = textWriter.ToString();
343+
344+
// Then
345+
var parsedResult = JsonNode.Parse(roundTrippedSchema);
346+
var parsedExpected = JsonNode.Parse(serializedSchema);
347+
Assert.True(JsonNode.DeepEquals(parsedExpected, parsedResult));
348+
var resultingArray = Assert.IsType<JsonArray>(parsedResult["items"]?["default"]);
349+
Assert.Empty(resultingArray);
350+
}
351+
318352
[Fact]
319353
public async Task SerializeV31SchemaWithMultipleTypesAsV3Works()
320354
{

0 commit comments

Comments
 (0)