Skip to content

Commit d03170f

Browse files
committed
Add test covering required+nullable preservation with NonNullableReferenceTypesAsRequired
1 parent 6254b15 commit d03170f

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

test/Swashbuckle.AspNetCore.SwaggerGen.Test/SchemaGenerator/JsonSerializerSchemaGeneratorTests.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,31 @@ public void GenerateSchema_SetsRequiredAndNullable_IfPropertyHasRequiredKeywordA
483483
AssertIsNullable(schema.Properties["RequiredNonNullableString"], false);
484484
Assert.Contains("RequiredNonNullableString", schema.Required.ToArray());
485485
}
486+
487+
[Fact]
488+
public void GenerateSchema_NonNullableReferenceTypesAsRequired_PreservesNullable_IfPropertyHasRequiredKeywordAndIsNullable()
489+
{
490+
var schemaRepository = new SchemaRepository();
491+
492+
var referenceSchema = Subject(configureGenerator: (c) => c.NonNullableReferenceTypesAsRequired = true).GenerateSchema(typeof(TypeWithNullableReferenceTypes), schemaRepository);
493+
494+
var reference = Assert.IsType<OpenApiSchemaReference>(referenceSchema);
495+
496+
Assert.NotNull(reference);
497+
Assert.NotNull(reference.Reference);
498+
Assert.NotNull(reference.Reference.Id);
499+
500+
var schema = schemaRepository.Schemas[reference.Reference.Id];
501+
Assert.NotNull(schema.Properties);
502+
503+
// required string? — must be present (required) AND may be null (nullable: true)
504+
AssertIsNullable(schema.Properties["RequiredNullableString"]);
505+
Assert.Contains("RequiredNullableString", schema.Required.ToArray());
506+
507+
// required string — must be present (required) AND must have a value (nullable: false)
508+
AssertIsNullable(schema.Properties["RequiredNonNullableString"], false);
509+
Assert.Contains("RequiredNonNullableString", schema.Required.ToArray());
510+
}
486511
#nullable disable
487512

488513
[Theory]

0 commit comments

Comments
 (0)