Skip to content

Commit 1b73724

Browse files
authored
✅ Add tests around records the required keyword (#19)
1 parent 5c87c6b commit 1b73724

File tree

2 files changed

+42
-3
lines changed

2 files changed

+42
-3
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System.Text.Json;
2+
3+
using Shouldly;
4+
5+
namespace OptionalValues.Tests.Json;
6+
7+
public class RecordTest
8+
{
9+
private static readonly JsonSerializerOptions Options = new JsonSerializerOptions()
10+
.AddOptionalValueSupport();
11+
12+
private record RecordModel(OptionalValue<string> Name);
13+
14+
[Fact]
15+
public void CanSerializeEmpty()
16+
{
17+
var model = new RecordModel(default);
18+
var result = JsonSerializer.Serialize(model, Options);
19+
20+
Assert.Equal("{}", result);
21+
}
22+
23+
[Fact]
24+
public void CanDeserializeEmpty()
25+
{
26+
var json = "{}";
27+
28+
RecordModel? result = JsonSerializer.Deserialize<RecordModel>(json, Options);
29+
Assert.NotNull(result);
30+
result.Name.IsSpecified.ShouldBeFalse();
31+
}
32+
}

test/OptionalValues.Tests/Json/RequiredKeywordTest.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@ public class RequiredKeywordTest
99
private static readonly JsonSerializerOptions Options = new JsonSerializerOptions()
1010
.AddOptionalValueSupport();
1111

12-
public class RequiredKeywordModel
12+
public class RequiredKeywordClassModel
13+
{
14+
public required OptionalValue<string> NotRequired { get; init; }
15+
}
16+
17+
public record RequiredKeywordRecordModel
1318
{
1419
public required OptionalValue<string> NotRequired { get; init; }
1520
}
@@ -24,10 +29,12 @@ public void ShouldNotMarkOptionalValueAsRequiredEvenWithRequiredKeyword()
2429
{
2530
var json = "{}";
2631

27-
RequiredKeywordModel? requiredKeywordModel = JsonSerializer.Deserialize<RequiredKeywordModel>(json, Options);
32+
RequiredKeywordClassModel? requiredKeywordClassModel = JsonSerializer.Deserialize<RequiredKeywordClassModel>(json, Options);
33+
RequiredKeywordRecordModel? requiredKeywordRecordModel = JsonSerializer.Deserialize<RequiredKeywordRecordModel>(json, Options);
2834
Func<ReferenceModel?> actReference = () => JsonSerializer.Deserialize<ReferenceModel>(json, Options);
2935

30-
requiredKeywordModel!.NotRequired.IsSpecified.ShouldBeFalse();
36+
requiredKeywordClassModel!.NotRequired.IsSpecified.ShouldBeFalse();
37+
requiredKeywordRecordModel!.NotRequired.IsSpecified.ShouldBeFalse();
3138
actReference.ShouldThrow<JsonException>();
3239
}
3340
}

0 commit comments

Comments
 (0)