From 1ff9824cc29296a9fca91de67958aa693af35ef0 Mon Sep 17 00:00:00 2001 From: Andrei Sergeev Date: Sat, 8 Jun 2024 10:38:38 +0400 Subject: [PATCH] v3.0.0; Add serialization tests with dto --- src/core-unit/Unit.Tests/Unit.Tests.csproj | 2 +- ...rializationTests.DeserializeArrayToUnit.cs | 19 ++++++++++++++ ...onTests.DeserializeNonEmptyObjectToUnit.cs | 19 ++++++++++++++ ...erializationTests.DeserializeNullToUnit.cs | 22 +++++++++++++--- ...ationTests.DeserializeSimpleValueToUnit.cs | 19 ++++++++++++++ .../UnitSerializationTests.DeserializeUnit.cs | 16 ++++++++++++ .../UnitSerializationTests.SerializeUnit.cs | 18 +++++++++++++ .../UnitSerializationTests.cs | 25 ++++++++++++++++++- src/core-unit/Unit/Unit.csproj | 2 +- 9 files changed, 135 insertions(+), 7 deletions(-) diff --git a/src/core-unit/Unit.Tests/Unit.Tests.csproj b/src/core-unit/Unit.Tests/Unit.Tests.csproj index eb4c6c0..ba90b0b 100644 --- a/src/core-unit/Unit.Tests/Unit.Tests.csproj +++ b/src/core-unit/Unit.Tests/Unit.Tests.csproj @@ -16,7 +16,7 @@ - $(NoWarn);xUnit1044 + $(NoWarn);xUnit1044;xUnit1045 diff --git a/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeArrayToUnit.cs b/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeArrayToUnit.cs index b3a4803..0aeb91a 100644 --- a/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeArrayToUnit.cs +++ b/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeArrayToUnit.cs @@ -25,6 +25,25 @@ public static void DeserializeArrayToUnitFromObject_ExpectNoException( _ = JsonSerializer.Deserialize(source, options); } + [Theory] + [MemberData(nameof(DeserializeArrayToUnit_ExpectNoException_Cases))] + public static void DeserializeDtoWithArrayToDtoWithUnitFromString_ExpectNoException( + JsonArray source, + JsonSerializerOptions? options) + { + var sourceString = JsonSerializer.Serialize(BuildDtoWithArbitraryValueNode(source)); + _ = JsonSerializer.Deserialize(sourceString, options); + } + + [Theory] + [MemberData(nameof(DeserializeArrayToUnit_ExpectNoException_Cases))] + public static void DeserializeDtoWithArrayToDtoWithUnitFromObject_ExpectNoException( + JsonArray source, + JsonSerializerOptions? options) + { + _ = JsonSerializer.Deserialize(BuildDtoWithArbitraryValueNode(source), options); + } + public static TheoryData DeserializeArrayToUnit_ExpectNoException_Cases { get diff --git a/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeNonEmptyObjectToUnit.cs b/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeNonEmptyObjectToUnit.cs index bd16e33..3abe949 100644 --- a/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeNonEmptyObjectToUnit.cs +++ b/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeNonEmptyObjectToUnit.cs @@ -25,6 +25,25 @@ public static void DeserializeNonEmptyObjectToUnitFromObject_ExpectNoException( _ = JsonSerializer.Deserialize(source, options); } + [Theory] + [MemberData(nameof(DeserializeNonEmptyObjectToUnit_ExpectNoException_Cases))] + public static void DeserializeDtoWithNonEmptyObjectToDtoWithUnitFromString_ExpectNoException( + JsonObject source, + JsonSerializerOptions? options) + { + var sourceString = JsonSerializer.Serialize(BuildDtoWithArbitraryValueNode(source)); + _ = JsonSerializer.Deserialize(sourceString, options); + } + + [Theory] + [MemberData(nameof(DeserializeNonEmptyObjectToUnit_ExpectNoException_Cases))] + public static void DeserializeDtoWithNonEmptyObjectToDtoWithUnitFromObject_ExpectNoException( + JsonObject source, + JsonSerializerOptions? options) + { + _ = JsonSerializer.Deserialize(BuildDtoWithArbitraryValueNode(source), options); + } + public static TheoryData DeserializeNonEmptyObjectToUnit_ExpectNoException_Cases { get diff --git a/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeNullToUnit.cs b/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeNullToUnit.cs index 1efc4a2..1ceb51a 100644 --- a/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeNullToUnit.cs +++ b/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeNullToUnit.cs @@ -10,15 +10,29 @@ partial class UnitSerializationTests [MemberData(nameof(JsonSerializerOptionsCases))] public static void DeserializeNullToUnitFromString_ExpectNoException(JsonSerializerOptions? options) { - var source = JsonSerializer.Serialize(null); - _ = JsonSerializer.Deserialize(source, options); + var sourceString = JsonSerializer.Serialize(null); + _ = JsonSerializer.Deserialize(sourceString, options); } [Theory] [MemberData(nameof(JsonSerializerOptionsCases))] public static void DeserializeNullToUnitFromNode_ExpectNoException(JsonSerializerOptions? options) { - JsonNode? source = null; - _ = JsonSerializer.Deserialize(source, options); + _ = JsonSerializer.Deserialize((JsonNode?)null, options); + } + + [Theory] + [MemberData(nameof(JsonSerializerOptionsCases))] + public static void DeserializeDtoWithNullToDtoWithUnitFromString_ExpectNoException(JsonSerializerOptions? options) + { + var sourceString = JsonSerializer.Serialize(BuildDtoWithNullValueNode()); + _ = JsonSerializer.Deserialize(sourceString, options); + } + + [Theory] + [MemberData(nameof(JsonSerializerOptionsCases))] + public static void DeserializeDtoWithNullToDtoWithUnitFromNode_ExpectNoException(JsonSerializerOptions? options) + { + _ = JsonSerializer.Deserialize(BuildDtoWithNullValueNode(), options); } } diff --git a/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeSimpleValueToUnit.cs b/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeSimpleValueToUnit.cs index 7cb8fd9..dfa2ed8 100644 --- a/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeSimpleValueToUnit.cs +++ b/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeSimpleValueToUnit.cs @@ -25,6 +25,25 @@ public static void DeserializeSimpleValueToUnitFromObject_ExpectNoException( _ = JsonSerializer.Deserialize(source, options); } + [Theory] + [MemberData(nameof(DeserializeSimpleValueToUnit_ExpectNoException_Cases))] + public static void DeserializeDtoWithSimpleValueToDtoWithUnitFromString_ExpectNoException( + JsonNode source, + JsonSerializerOptions? options) + { + var sourceString = JsonSerializer.Serialize(BuildDtoWithArbitraryValueNode(source)); + _ = JsonSerializer.Deserialize(sourceString, options); + } + + [Theory] + [MemberData(nameof(DeserializeSimpleValueToUnit_ExpectNoException_Cases))] + public static void DeserializeDtoWithSimpleValueToDtoWithUnitFromObject_ExpectNoException( + JsonNode source, + JsonSerializerOptions? options) + { + _ = JsonSerializer.Deserialize(BuildDtoWithArbitraryValueNode(source), options); + } + public static TheoryData DeserializeSimpleValueToUnit_ExpectNoException_Cases { get diff --git a/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeUnit.cs b/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeUnit.cs index 68fc55d..ec95646 100644 --- a/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeUnit.cs +++ b/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.DeserializeUnit.cs @@ -21,4 +21,20 @@ public static void DeserializeUnitFromNode_ExpectNoException(JsonSerializerOptio var source = new JsonObject(); _ = JsonSerializer.Deserialize(source, options); } + + [Theory] + [MemberData(nameof(JsonSerializerOptionsCases))] + public static void DeserializeDtoWithUnitFromString_ExpectNoException(JsonSerializerOptions? options) + { + var source = JsonSerializer.Serialize(BuildDtoWithUnitValueNode()); // default options expected + _ = JsonSerializer.Deserialize(source, options); + } + + [Theory] + [MemberData(nameof(JsonSerializerOptionsCases))] + public static void DeserializeDtoWithUnitFromNode_ExpectNoException(JsonSerializerOptions? options) + { + var source = BuildDtoWithUnitValueNode(); + _ = JsonSerializer.Deserialize(source, options); + } } diff --git a/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.SerializeUnit.cs b/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.SerializeUnit.cs index c4d8b9a..3fc7d16 100644 --- a/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.SerializeUnit.cs +++ b/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.SerializeUnit.cs @@ -23,4 +23,22 @@ public static void SerializeUnitToNode_ExpectEmptyJsonObject(JsonSerializerOptio var expected = new JsonObject(); Assert.Equal(expected, actual); } + + [Theory] + [MemberData(nameof(JsonSerializerOptionsCases))] + public static void SerializeDtoWithUnitToString_ExpectEmptyJsonObject(JsonSerializerOptions? options) + { + var actual = JsonSerializer.Serialize(new DtoWithUnit(), options); + var expected = JsonSerializer.Serialize(BuildDtoWithUnitValueNode()); // default options expected + Assert.Equal(expected, actual); + } + + [Theory] + [MemberData(nameof(JsonSerializerOptionsCases))] + public static void SerializeDtoWithUnitToNode_ExpectEmptyJsonObject(JsonSerializerOptions? options) + { + var actual = JsonSerializer.SerializeToNode(new DtoWithUnit(), options); + var expected = BuildDtoWithUnitValueNode(); + Assert.Equal(expected, actual); + } } diff --git a/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.cs b/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.cs index f31b6cb..bca7c21 100644 --- a/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.cs +++ b/src/core-unit/Unit.Tests/UnitSerializationTests/UnitSerializationTests.cs @@ -1,11 +1,16 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using System.Text.Json; +using System.Text.Json.Nodes; +using System.Text.Json.Serialization; namespace PrimeFuncPack.Core.Tests; public static partial class UnitSerializationTests { + private const string ValueName = "value"; + public static TheoryData JsonSerializerOptionsCases => new(BuildJsonSerializerOptionsCollection().ToArray()); @@ -17,4 +22,22 @@ public static TheoryData JsonSerializerOptionsCases yield return new(JsonSerializerDefaults.General); yield return new(JsonSerializerDefaults.Web); } + + private static JsonObject BuildDtoWithUnitValueNode() + => + new() { [ValueName] = new JsonObject() }; + + private static JsonObject BuildDtoWithNullValueNode() + => + new() { [ValueName] = null }; + + private static JsonObject BuildDtoWithArbitraryValueNode(JsonNode value) + => + new() { [ValueName] = value.DeepClone() }; + + private sealed record DtoWithUnit + { + [JsonPropertyName(ValueName)] + public Unit Value { get; init; } + } } diff --git a/src/core-unit/Unit/Unit.csproj b/src/core-unit/Unit/Unit.csproj index b2b2047..1ee763a 100644 --- a/src/core-unit/Unit/Unit.csproj +++ b/src/core-unit/Unit/Unit.csproj @@ -18,7 +18,7 @@ PrimeFuncPack Core.Unit is a core library for .NET consisting of Unit type targeted for use in functional programming. System PrimeFuncPack.Core.Unit - 3.0.0-rc.1 + 3.0.0