Skip to content

Commit e897df5

Browse files
committed
tests: adds unit tests to validate the lossy nature of null conversions
Signed-off-by: Vincent Biret <vibiret@microsoft.com>
1 parent 994184b commit e897df5

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

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

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,68 @@ public void DefaultEmptyCollectionShouldRoundTrip()
349349
Assert.Empty(resultingArray);
350350
}
351351

352+
[Fact]
353+
public void DefaultNullIsLossyDuringRoundTripJson()
354+
{
355+
// Given
356+
var serializedSchema =
357+
"""
358+
{
359+
"type": ["string", "null"],
360+
"default": null
361+
}
362+
""";
363+
using var textWriter = new StringWriter();
364+
var writer = new OpenApiJsonWriter(textWriter);
365+
366+
// When
367+
var schema = OpenApiModelFactory.Parse<OpenApiSchema>(serializedSchema, OpenApiSpecVersion.OpenApi3_1, new(), out _, "json", SettingsFixture.ReaderSettings);
368+
369+
Assert.Null(schema.Default);
370+
371+
schema.SerializeAsV31(writer);
372+
var roundTrippedSchema = textWriter.ToString();
373+
374+
// Then
375+
var parsedResult = JsonNode.Parse(roundTrippedSchema);
376+
var parsedExpected = JsonNode.Parse(serializedSchema);
377+
Assert.False(JsonNode.DeepEquals(parsedExpected, parsedResult));
378+
var resultingDefault = parsedResult["default"];
379+
Assert.Null(resultingDefault);
380+
}
381+
382+
[Fact]
383+
public void DefaultNullIsLossyDuringRoundTripYaml()
384+
{
385+
// Given
386+
var serializedSchema =
387+
"""
388+
type:
389+
- string
390+
- 'null'
391+
default: null
392+
""";
393+
using var textWriter = new StringWriter();
394+
var writer = new OpenApiYamlWriter(textWriter);
395+
396+
// When
397+
var schema = OpenApiModelFactory.Parse<OpenApiSchema>(serializedSchema, OpenApiSpecVersion.OpenApi3_1, new(), out _, "yaml", SettingsFixture.ReaderSettings);
398+
399+
Assert.Null(schema.Default);
400+
401+
schema.SerializeAsV31(writer);
402+
var roundTrippedSchema = textWriter.ToString();
403+
404+
// Then
405+
Assert.Equal(
406+
"""
407+
type:
408+
- 'null'
409+
- string
410+
""".MakeLineBreaksEnvironmentNeutral(),
411+
roundTrippedSchema.MakeLineBreaksEnvironmentNeutral());
412+
}
413+
352414
[Fact]
353415
public async Task SerializeV31SchemaWithMultipleTypesAsV3Works()
354416
{

0 commit comments

Comments
 (0)