From 05fdd4c74539b523fb21138e3a004580e5c51d7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Gonz=C3=A1lez=20Garc=C3=ADa?= Date: Tue, 16 Apr 2024 15:24:15 +0200 Subject: [PATCH 1/2] test projects are net8 --- .../NMoneys.Serialization.Tests.csproj | 2 +- tests/NMoneys.Tests/NMoneys.Tests.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/NMoneys.Serialization.Tests/NMoneys.Serialization.Tests.csproj b/tests/NMoneys.Serialization.Tests/NMoneys.Serialization.Tests.csproj index cc922bb..8ca225d 100644 --- a/tests/NMoneys.Serialization.Tests/NMoneys.Serialization.Tests.csproj +++ b/tests/NMoneys.Serialization.Tests/NMoneys.Serialization.Tests.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 enable enable diff --git a/tests/NMoneys.Tests/NMoneys.Tests.csproj b/tests/NMoneys.Tests/NMoneys.Tests.csproj index 206924f..f5ccdd1 100644 --- a/tests/NMoneys.Tests/NMoneys.Tests.csproj +++ b/tests/NMoneys.Tests/NMoneys.Tests.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 enable enable From 6034e1b0e7c436802809f2035cf79e05525996c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Gonz=C3=A1lez=20Garc=C3=ADa?= Date: Tue, 16 Apr 2024 15:24:22 +0200 Subject: [PATCH 2/2] fix tests --- .../Json_NET/QuantityConverterTester.cs | 224 +++++------------- 1 file changed, 63 insertions(+), 161 deletions(-) diff --git a/tests/NMoneys.Serialization.Tests/Json_NET/QuantityConverterTester.cs b/tests/NMoneys.Serialization.Tests/Json_NET/QuantityConverterTester.cs index 323571f..5d8198b 100644 --- a/tests/NMoneys.Serialization.Tests/Json_NET/QuantityConverterTester.cs +++ b/tests/NMoneys.Serialization.Tests/Json_NET/QuantityConverterTester.cs @@ -15,84 +15,57 @@ public class QuantityConverterTester # region serialization [Test] - public void Serialize_DefaultResolver_PascalCasedAndNumericCurrency() + public void Serialize_DefaultResolver_QuantityString() { var toSerialize = new Money(14.3m, CurrencyIsoCode.XTS); var subject = new QuantityConverter(); string actual = JsonConvert.SerializeObject(toSerialize, subject); - Assert.That(actual, Is.EqualTo("{'Amount':14.3,'Currency':963}".Jsonify())); + Assert.That(actual, Is.EqualTo("'XTS 14.3'".Jsonify())); } [Test] - public void Serialize_DefaultResolverWithForcedStringCurrency_PascalCasedAndStringCurrency() + public void Serialize_CustomResolverAndEnumFormat_ConfigurationDoesNotApply() { var toSerialize = new Money(14.3m, CurrencyIsoCode.XTS); - var subject = new MoneyConverter(true); - string actual = JsonConvert.SerializeObject(toSerialize, subject); - - Assert.That(actual, Is.EqualTo("{'Amount':14.3,'Currency':'XTS'}".Jsonify())); - } - - [Test] - public void Serialize_CustomResolverAndEnumFormat_FollowsCaseAndCurrencyFormat() - { - var toSerialize = new Money(14.3m, CurrencyIsoCode.XTS); - - var subject = new MoneyConverter(); - var settings = new JsonSerializerSettings - { - ContractResolver = new CamelCasePropertyNamesContractResolver(), - Converters = new JsonConverter[] { new StringEnumConverter(), subject } - }; - string actual = JsonConvert.SerializeObject(toSerialize, settings); - - Assert.That(actual, Is.EqualTo("{'amount':14.3,'currency':'XTS'}".Jsonify())); - } - - [Test] - public void Serialize_CustomResolverAndForcedString_FollowsCaseAndOverridesCurrencyFormat() - { - var toSerialize = new Money(14.3m, CurrencyIsoCode.XTS); - - var subject = new MoneyConverter(true); + var subject = new QuantityConverter(); var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), - Converters = new JsonConverter[] { subject } + Converters = [new StringEnumConverter(), subject] }; string actual = JsonConvert.SerializeObject(toSerialize, settings); - Assert.That(actual, Is.EqualTo("{'amount':14.3,'currency':'XTS'}".Jsonify())); + Assert.That(actual, Is.EqualTo("'XTS 14.3'".Jsonify())); } [Test] public void Serialize_Null_DefaultNullable() { - Money? @null = default(Money?); + Money? @null = default; - var subject = new MoneyConverter(); + var subject = new QuantityConverter(); string actual = JsonConvert.SerializeObject(@null, subject); Assert.That(actual, Is.EqualTo("null")); } [Test] - public void Serialize_DefaultResolverRecord_PascalCasedAndNumericCurrency() + public void Serialize_DefaultResolverRecord_QuantityString() { var money = new Money(14.3m, CurrencyIsoCode.XTS); var toSerialize = new MoneyRecord("s", money, 42); - var subject = new MoneyConverter(); + var subject = new QuantityConverter(); string actual = JsonConvert.SerializeObject(toSerialize, subject); - Assert.That(actual, Is.EqualTo("{'S':'s','M':{'Amount':14.3,'Currency':963},'N':42}".Jsonify())); + Assert.That(actual, Is.EqualTo("{'S':'s','M':'XTS 14.3','N':42}".Jsonify())); } [Test] - public void Serialize_CustomContainer_FollowsConfiguration() + public void Serialize_CustomContainer_ConfigurationDoesNotApply() { var money = new Money(14.3m, CurrencyIsoCode.XTS); var toSerialize = new MoneyContainer @@ -102,15 +75,15 @@ public void Serialize_CustomContainer_FollowsConfiguration() N = 42 }; - var subject = new MoneyConverter(); + var subject = new QuantityConverter(); var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), - Converters = new JsonConverter[] { new StringEnumConverter(), subject } + Converters = [new StringEnumConverter(), subject] }; string actual = JsonConvert.SerializeObject(toSerialize, settings); - Assert.That(actual, Is.EqualTo("{'s':'s','m':{'amount':14.3,'currency':'XTS'},'n':42}".Jsonify())); + Assert.That(actual, Is.EqualTo("{'s':'s','m':'XTS 14.3','n':42}".Jsonify())); } [Test] @@ -121,7 +94,7 @@ public void Serialize_DefaultResolverNullableContainer_PascalCasedAndNumericCurr N = 42 }; - var subject = new MoneyConverter(); + var subject = new QuantityConverter(); string actual = JsonConvert.SerializeObject(toSerialize, subject); Assert.That(actual, Is.EqualTo("{'S':null,'M':null,'N':42}".Jsonify())); @@ -132,11 +105,11 @@ public void Serialize_CustomNullableRecord_FollowsConfiguration() { var toSerialize = new NullableMoneyRecord(null, null, 42); - var subject = new MoneyConverter(); + var subject = new QuantityConverter(); var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), - Converters = new JsonConverter[] { new StringEnumConverter(), subject } + Converters = [new StringEnumConverter(), subject] }; string actual = JsonConvert.SerializeObject(toSerialize, settings); @@ -148,12 +121,12 @@ public void Serialize_CustomNullableRecord_FollowsConfiguration() #region deserialization [Test] - public void Deserialize_DefaultResolver_PascalCasedAndNumericCurrency() + public void Deserialize_DefaultResolver_QuantityString() { - string json = "{'Amount':14.3,'Currency':963}".Jsonify(); + string json = "'XTS 14.3'".Jsonify(); var expected = new Money(14.3m, CurrencyIsoCode.XTS); - var subject = new MoneyConverter(); + var subject = new QuantityConverter(); Money deserialized = JsonConvert.DeserializeObject(json, subject); Assert.That(deserialized, Is.EqualTo(expected)); @@ -164,31 +137,7 @@ public void Deserialize_DefaultResolver_CanRoundtrip() { var original = new Money(14.3m, CurrencyIsoCode.XTS); - var subject = new MoneyConverter(); - string json = JsonConvert.SerializeObject(original, subject); - var deserialized = JsonConvert.DeserializeObject(json, subject); - - Assert.That(deserialized, Is.EqualTo(original)); - } - - [Test] - public void Deserialize_DefaultResolverWithForcedStringCurrency_PascalCasedAndStringCurrency() - { - string json = "{'Amount':14.3,'Currency':'XTS'}".Jsonify(); - var expected = new Money(14.3m, CurrencyIsoCode.XTS); - - var subject = new MoneyConverter(true); - Money deserialized = JsonConvert.DeserializeObject(json, subject); - - Assert.That(deserialized, Is.EqualTo(expected)); - } - - [Test] - public void Deserialize_DefaultResolverWithForcedStringCurrency_CanRoundtrip() - { - var original = new Money(14.3m, CurrencyIsoCode.XTS); - - var subject = new MoneyConverter(true); + var subject = new QuantityConverter(); string json = JsonConvert.SerializeObject(original, subject); var deserialized = JsonConvert.DeserializeObject(json, subject); @@ -196,16 +145,16 @@ public void Deserialize_DefaultResolverWithForcedStringCurrency_CanRoundtrip() } [Test] - public void Deserialize_CustomResolverAndEnumFormat_FollowsCaseAndCurrencyFormat() + public void Deserialize_CustomResolverAndEnumFormat_IgnoresConfig() { - string json = "{'amount':14.3,'currency':'XTS'}".Jsonify(); + string json = "'963 14.3'".Jsonify(); var expected = new Money(14.3m, CurrencyIsoCode.XTS); - var subject = new MoneyConverter(); + var subject = new QuantityConverter(); var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), - Converters = new JsonConverter[] { new StringEnumConverter(), subject } + Converters = [new StringEnumConverter(), subject] }; var actual = JsonConvert.DeserializeObject(json, settings); @@ -217,11 +166,11 @@ public void Deserialize_CustomResolverAndEnumFormat_CanRoundtrip() { var original = new Money(14.3m, CurrencyIsoCode.XTS); - var subject = new MoneyConverter(); + var subject = new QuantityConverter(); var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), - Converters = new JsonConverter[] { new StringEnumConverter(), subject } + Converters = [new StringEnumConverter(), subject] }; string json = JsonConvert.SerializeObject(original, settings); var deserialized = JsonConvert.DeserializeObject(json, settings); @@ -229,44 +178,10 @@ public void Deserialize_CustomResolverAndEnumFormat_CanRoundtrip() Assert.That(deserialized, Is.EqualTo(original)); } - [Test] - public void Deserialize_CustomResolverAndForcedString_FollowsCaseAndOverridesCurrencyFormat() - { - string json = "{'amount':14.3,'currency':'XTS'}".Jsonify(); - var expected = new Money(14.3m, CurrencyIsoCode.XTS); - - var subject = new MoneyConverter(true); - var settings = new JsonSerializerSettings - { - ContractResolver = new CamelCasePropertyNamesContractResolver(), - Converters = new JsonConverter[] { subject } - }; - var actual = JsonConvert.DeserializeObject(json, settings); - - Assert.That(actual, Is.EqualTo(expected)); - } - - [Test] - public void Deserialize_CustomResolverAndForcedString_CanRoundtrip() - { - var original = new Money(14.3m, CurrencyIsoCode.XTS); - - var subject = new MoneyConverter(true); - var settings = new JsonSerializerSettings - { - ContractResolver = new CamelCasePropertyNamesContractResolver(), - Converters = new JsonConverter[] { subject } - }; - var json = JsonConvert.SerializeObject(original, settings); - var deserialized = JsonConvert.DeserializeObject(json, settings); - - Assert.That(deserialized, Is.EqualTo(original)); - } - [Test] public void Deserialize_Null_DefaultNullable() { - var subject = new MoneyConverter(); + var subject = new QuantityConverter(); var actual = JsonConvert.DeserializeObject("null", subject); Assert.That(actual, Is.Null); @@ -275,11 +190,11 @@ public void Deserialize_Null_DefaultNullable() [Test] public void Deserialize_DefaultResolverRecord_PascalCasedAndNumericCurrency() { - string json = "{'S':'s','M':{'Amount':14.3,'Currency':963},'N':42}".Jsonify(); + string json = "{'S':'s','M':'XTS 14.3','N':42}".Jsonify(); var money = new Money(14.3m, CurrencyIsoCode.XTS); var expected = new MoneyRecord("s", money, 42); - var subject = new MoneyConverter(); + var subject = new QuantityConverter(); MoneyRecord? actual = JsonConvert.DeserializeObject(json, subject); Assert.That(actual, Is.EqualTo(expected)); @@ -288,14 +203,14 @@ public void Deserialize_DefaultResolverRecord_PascalCasedAndNumericCurrency() [Test] public void Deserialize_CustomContainer_FollowsConfiguration() { - string json = "{'s':'s','m':{'amount':14.3,'currency':'XTS'},'n':42}".Jsonify(); + string json = "{'s':'s','m':'XTS 14.3','n':42}".Jsonify(); var money = new Money(14.3m, CurrencyIsoCode.XTS); - var subject = new MoneyConverter(); + var subject = new QuantityConverter(); var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), - Converters = new JsonConverter[] { new StringEnumConverter(), subject } + Converters = [new StringEnumConverter(), subject] }; var actual = JsonConvert.DeserializeObject(json, settings); @@ -310,7 +225,7 @@ public void Deserialize_DefaultResolverNullableContainer_PascalCasedAndNumericCu { string json = "{'S':null,'M':null,'N':42}".Jsonify(); - var subject = new MoneyConverter(); + var subject = new QuantityConverter(); var actual = JsonConvert.DeserializeObject(json, subject); Assert.That(actual, Has.Property("S").Null); @@ -324,11 +239,11 @@ public void Deserialize_CustomNullableRecord_FollowsConfiguration() string json = "{'s':null,'m':null,'n':42}".Jsonify(); var expected = new NullableMoneyRecord(null, null, 42); - var subject = new MoneyConverter(); + var subject = new QuantityConverter(); var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), - Converters = new JsonConverter[] { new StringEnumConverter(), subject } + Converters = [new StringEnumConverter(), subject] }; var actual = JsonConvert.DeserializeObject(json, settings); @@ -341,42 +256,37 @@ public void Deserialize_CustomNullableRecord_FollowsConfiguration() public void Deserialize_DefaultNotAnObject_Exception() { string notAJsonObject = "'str'".Jsonify(); - var subject = new MoneyConverter(); + var subject = new QuantityConverter(); Assert.That(()=> JsonConvert.DeserializeObject(notAJsonObject, subject), - Throws.InstanceOf() - .With.Message.Contains("token 'Object'") - .And.Message.Contains("'String'")); + Throws.ArgumentException); } [Test] public void Deserialize_DefaultMissingAmount_Exception() { - string missingAmount = "{}".Jsonify(); - var subject = new MoneyConverter(); + string missingAmount = "'XTS '".Jsonify(); + var subject = new QuantityConverter(); Assert.That(()=> JsonConvert.DeserializeObject(missingAmount, subject), - Throws.InstanceOf() - .With.Message.Contains("Missing property") - .And.Message.Contains("'Amount'")); + Throws.InstanceOf()); } [Test] public void Deserialize_DefaultNonNumericAmount_Exception() { - string nonNumericAmount = "{'Amount':'lol'}".Jsonify(); - var subject = new MoneyConverter(); + string nonNumericAmount = "'XTS 'lol''".Jsonify(); + var subject = new QuantityConverter(); Assert.That(()=> JsonConvert.DeserializeObject(nonNumericAmount, subject), - Throws.InstanceOf() - .With.Message.Contains("input string 'lol'")); + Throws.InstanceOf()); } [Test] public void Deserialize_CaseDoesNotMatchContract_DoesntMatter() { - string caseMismatch = "{'Amount':1,'currency':963}".Jsonify(); - var subject = new MoneyConverter(); + string caseMismatch = "'963 1'".Jsonify(); + var subject = new QuantityConverter(); Assert.That(()=> JsonConvert.DeserializeObject(caseMismatch, subject), Throws.Nothing); @@ -385,10 +295,10 @@ public void Deserialize_CaseDoesNotMatchContract_DoesntMatter() } [Test] - public void Deserialize_MissingCurrency_ExceptionIgnoringCasing() + public void Deserialize_MissingCurrency_Exception() { - string missingCurrency = "{'amount':1}".Jsonify(); - var subject = new MoneyConverter(); + string missingCurrency = "'1'".Jsonify(); + var subject = new QuantityConverter(); var settings = new JsonSerializerSettings { @@ -396,16 +306,14 @@ public void Deserialize_MissingCurrency_ExceptionIgnoringCasing() Converters = { subject } }; Assert.That(()=> JsonConvert.DeserializeObject(missingCurrency, settings), - Throws.InstanceOf() - .With.Message.Contains("Missing property") - .And.Message.Contains("'Currency'"), "no camel-casing"); + Throws.InstanceOf()); } [Test] - public void Deserialize_MismatchCurrencyFormat_DoesNotMatter() + public void Deserialize_MismatchCurrencyFormat_MattersMuch() { - string currencyFormatMismatch = "{'amount':1,'currency':'XTS'}".Jsonify(); - var subject = new MoneyConverter(); + string currencyFormatMismatch = "'xts 1'".Jsonify(); + var subject = new QuantityConverter(); var settings = new JsonSerializerSettings { @@ -413,17 +321,14 @@ public void Deserialize_MismatchCurrencyFormat_DoesNotMatter() Converters = { subject } }; Assert.That(()=> JsonConvert.DeserializeObject(currencyFormatMismatch, settings), - Throws.Nothing); - - Money deserialized = JsonConvert.DeserializeObject(currencyFormatMismatch, settings); - Assert.That(deserialized, Is.EqualTo(1m.Xts())); + Throws.ArgumentException); } [Test] public void Deserialize_FunkyCurrencyValueCasing_DoesNotMatter() { - string funkyCurrencyValue = "{'amount':1,'currency':'XtS'}".Jsonify(); - var subject = new MoneyConverter(); + string funkyCurrencyValue = "'XtS 1'".Jsonify(); + var subject = new QuantityConverter(); var settings = new JsonSerializerSettings { @@ -431,17 +336,14 @@ public void Deserialize_FunkyCurrencyValueCasing_DoesNotMatter() Converters = { subject } }; Assert.That(()=> JsonConvert.DeserializeObject(funkyCurrencyValue, settings), - Throws.Nothing); - - Money deserialized = JsonConvert.DeserializeObject(funkyCurrencyValue, settings); - Assert.That(deserialized, Is.EqualTo(1m.Xts())); + Throws.ArgumentException); } [Test] public void Deserialize_UndefinedCurrency_Exception() { - string undefinedCurrency = "{'amount':1,'currency':1}".Jsonify(); - var subject = new MoneyConverter(); + string undefinedCurrency = "'AAA 1'".Jsonify(); + var subject = new QuantityConverter(); var settings = new JsonSerializerSettings { @@ -449,14 +351,14 @@ public void Deserialize_UndefinedCurrency_Exception() Converters = { subject } }; Assert.That(()=> JsonConvert.DeserializeObject(undefinedCurrency, settings), - Throws.InstanceOf()); + Throws.ArgumentException); } [Test] public void Deserialize_PoorlyConstructedJson_Exception() { - string missingObjectClose = "{'amount':1,'currency':1".Jsonify(); - var subject = new MoneyConverter(); + string missingObjectClose = "'XTS 1".Jsonify(); + var subject = new QuantityConverter(); Assert.That(()=> JsonConvert.DeserializeObject(missingObjectClose, subject), Throws.InstanceOf());