Skip to content

Refactor benchmarks and improve currency initialization. #3

Refactor benchmarks and improve currency initialization.

Refactor benchmarks and improve currency initialization. #3

GitHub Actions / unittests failed Jan 11, 2025 in 1s

1244 passed, 106 failed and 8 skipped

Tests failed

Report Passed Failed Skipped Time
./artifacts/_fv-az1913-517_2025-01-11_12_58_15.trx 210ms
./artifacts/_fv-az1913-517_2025-01-11_12_58_15[1].trx 164ms
./artifacts/_fv-az1913-517_2025-01-11_12_58_16.trx 622✅ 53❌ 4⚪ 3s
./artifacts/_fv-az1913-517_2025-01-11_12_58_16[1].trx 622✅ 53❌ 4⚪ 3s

✅ ./artifacts/_fv-az1913-517_2025-01-11_12_58_15.trx

No tests found

✅ ./artifacts/_fv-az1913-517_2025-01-11_12_58_15[1].trx

No tests found

❌ ./artifacts/_fv-az1913-517_2025-01-11_12_58_16.trx

679 tests were completed in 3s with 622 passed, 53 failed and 4 skipped.

Test suite Passed Failed Skipped Time
NodaMoney.Tests.CurrencyInfoBuilderSpec.GivenIWantToCreateCustomCurrencyInfo 9✅ 17ms
NodaMoney.Tests.CurrencyInfoBuilderSpec.GivenIWantToReplaceIsoCurrencyWithOwnVersion 1✅ 0ms
NodaMoney.Tests.CurrencyInfoBuilderSpec.GivenIWantToUnregisterCurrency 5✅ 6ms
NodaMoney.Tests.CurrencyInfoSpec.GivenIWantCurrencyFromRegionOrCulture 8✅ 118ms
NodaMoney.Tests.CurrencyInfoSpec.GivenIWantCurrencyInfoFromIsoCode 4✅ 2ms
NodaMoney.Tests.CurrencyInfoSpec.GivenIWantCurrentCurrency 3✅ 1ms
NodaMoney.Tests.CurrencyInfoSpec.GivenIWantToInitiateInternallyACurrency 6✅ 64ms
NodaMoney.Tests.CurrencyInfoSpec.GivenIWantToKnowAllCurrencies 1✅ 12ms
NodaMoney.Tests.CurrencyInfoSpec.GivenIWantToKnowSmallestPossibleAmountOfCurrency 5✅ 8ms
NodaMoney.Tests.CurrencyInfoSpec.GivenIWantToValidateTheDateRange 3✅ 33ms
NodaMoney.Tests.CurrencySpec.GivenIWantCurrencyFromIsoCode 4✅ 2ms
NodaMoney.Tests.CurrencySpec.GivenIWantDefaultCurrency 2✅ 32ms
NodaMoney.Tests.CurrencySpec.GivenIWantToCompareCurrencies 4✅ 3ms
NodaMoney.Tests.CurrencySpec.GivenIWantToDeconstructCurrency 1✅ 0ms
NodaMoney.Tests.CurrencyUnitSpec.CreateCurrencyV2 11✅ 15ms
NodaMoney.Tests.ExchangeRateSpec.GivenIWantToCompareExchangeRates 5✅ 1ms
NodaMoney.Tests.ExchangeRateSpec.GivenIWantToConvertExchangeRateToString 2✅ 1ms
NodaMoney.Tests.ExchangeRateSpec.GivenIWantToConvertMoney 3✅ 2ms
NodaMoney.Tests.ExchangeRateSpec.GivenIWantToCreateAnExchangeRateWithCurrencies 9✅ 38ms
NodaMoney.Tests.ExchangeRateSpec.GivenIWantToCreateAnExchangeRateWithCurrenciesAsStrings 6✅ 7ms
NodaMoney.Tests.ExchangeRateSpec.GivenIWantToDeconstructExchangeRate 1✅ 0ms
NodaMoney.Tests.ExchangeRateSpec.GivenIWantToParseACurrencyPair 6✅ 5ms
NodaMoney.Tests.ExchangeRateSpec.GivenIWantToTryParseACurrencyPair 6✅ 4ms
NodaMoney.Tests.Extensions.MoneyExtensionsSafeDivideSpec.GivenIWantToSafelyDivideMoney 6✅ 60ms
NodaMoney.Tests.Iso4127Spec.GivenIWantToCompareNodaMoneyWithIso4127 4✅ 1⚪ 14ms
NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToAddAndSubtractMoney 48✅ 45ms
NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToAddAndSubtractMoneyWithDecimal 24✅ 4ms
NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney 34✅ 10❌ 343ms
NodaMoney.Tests.MoneyComparableSpec.GivenIWantToCompareMoney 10✅ 78ms
NodaMoney.Tests.MoneyConvertibleSpec.GivenIWantToCastNumericTypeToMoneyWithImplicitCurrencyFromTheCurrentCulture 11✅ 4ms
NodaMoney.Tests.MoneyConvertibleSpec.GivenIWantToConvertMoney 3✅ 11ms
NodaMoney.Tests.MoneyConvertibleSpec.GivenIWantToExplicitCastMoneyToNumericType 7✅ 17ms
NodaMoney.Tests.MoneyFiveMostUsedCurrenciesSpec.GivenIWantDollars 6✅ 12ms
NodaMoney.Tests.MoneyFiveMostUsedCurrenciesSpec.GivenIWantEuros 6✅ 38ms
NodaMoney.Tests.MoneyFiveMostUsedCurrenciesSpec.GivenIWantPonds 6✅ 11ms
NodaMoney.Tests.MoneyFiveMostUsedCurrenciesSpec.GivenIWantYens 6✅ 2ms
NodaMoney.Tests.MoneyFiveMostUsedCurrenciesSpec.GivenIWantYuan 6✅ 2ms
NodaMoney.Tests.MoneyFormattableSpec.GivenIWantMoneyAsString 12✅ 9ms
NodaMoney.Tests.MoneyFormattableSpec.GivenIWantMoneyAsStringWithCurrencyCode 8✅ 6ms
NodaMoney.Tests.MoneyFormattableSpec.GivenIWantMoneyAsStringWithCurrencySymbol 8✅ 6ms
NodaMoney.Tests.MoneyFormattableSpec.GivenIWantMoneyAsStringWithEnglishCurrencyName 7✅ 11ms
NodaMoney.Tests.MoneyParsableSpec.GivenIWantToParseExplicitCurrency 12✅ 10ms
NodaMoney.Tests.MoneyParsableSpec.GivenIWantToParseImplicitCurrency 13✅ 29ms
NodaMoney.Tests.MoneyParsableSpec.GivenIWantToParseMoneyWithMoreDecimalPossibleForCurrency 2✅ 1ms
NodaMoney.Tests.MoneyParsableSpec.GivenIWantToParseNegativeMoney 6✅ 5ms
NodaMoney.Tests.MoneyParsableSpec.GivenIWantToTryParseExplicitCurrency 8✅ 6ms
NodaMoney.Tests.MoneyParsableSpec.GivenIWantToTryParseImplicitCurrency 11✅ 7ms
NodaMoney.Tests.MoneySpec.GivenIWantDefaultMoney 1✅ 1ms
NodaMoney.Tests.MoneySpec.GivenIWantMoneyFromNumericTypeAndAnExplicitCurrencyObject 16✅ 15ms
NodaMoney.Tests.MoneySpec.GivenIWantMoneyFromNumericTypeAndAnExplicitIsoCurrencyCode 12✅ 4ms
NodaMoney.Tests.MoneySpec.GivenIWantMoneyImplicit 4✅ 15ms
NodaMoney.Tests.MoneySpec.GivenIWantMoneyInMalagasyAriaryWhichHasFiveSubunits 29✅ 1ms
NodaMoney.Tests.MoneySpec.GivenIWantMoneyWithDifferentRounding 1✅ 1❌ 7ms
NodaMoney.Tests.MoneySpec.GivenIWantToCreateMoneyWithDoubleValue 2✅ 2❌ 11ms
NodaMoney.Tests.MoneySpec.GivenIWantToDeconstructMoney 1✅ 0ms
NodaMoney.Tests.Serialization.BinaryFormatterSpec.GivenIWantToSerializeMoney 3⚪ 3ms
NodaMoney.Tests.Serialization.DataContractSerializerSpec.GivenIWantToSerializeMoney 3✅ 112ms
NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToDeserializeMoney 17✅ 39❌ 153ms
NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToSerializeCurrency 6✅ 1ms
NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToSerializeMoney 24✅ 172ms
NodaMoney.Tests.Serialization.RavenDbSerializationSpec.GivenIWantToStoreInRavenDb 1❌ 818ms
NodaMoney.Tests.Serialization.SystemTextJsonSerializationSpec.GivenIWantToDeserializeMoney 56✅ 285ms
NodaMoney.Tests.Serialization.SystemTextJsonSerializationSpec.GivenIWantToSerializeCurrency 6✅ 219ms
NodaMoney.Tests.Serialization.SystemTextJsonSerializationSpec.GivenIWantToSerializeMoney 19✅ 66ms
NodaMoney.Tests.Serialization.XmlSerializationSpec.GivenIWantToDeserializeMoney 23✅ 58ms
NodaMoney.Tests.Serialization.XmlSerializationSpec.GivenIWantToSerializeCurrencyWithXmlSerializer 3✅ 18ms
NodaMoney.Tests.Serialization.XmlSerializationSpec.GivenIWantToSerializeMoney 20✅ 69ms
NodaMoney.Tests.UnaryOperatorsSpec.GivenIWantToAddAndSubtractMoneyUnary 2✅ 1ms
NodaMoney.Tests.UnaryOperatorsSpec.GivenIWantToIncrementAndDecrementMoneyUnary 8✅ 36ms

❌ NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney

✅ WhenUsingDivisionMethodWithDecimal_ThenMoneyShouldBeDivided(expected: -100.12, divider: 0.5, value: -50.06)
✅ WhenUsingDivisionMethodWithDecimal_ThenMoneyShouldBeDivided(expected: -100.12, divider: 5, value: -500.60)
✅ WhenUsingDivisionMethodWithDecimal_ThenMoneyShouldBeDivided(expected: 10, divider: 15, value: 150)
✅ WhenUsingDivisionMethodWithDecimal_ThenMoneyShouldBeDivided(expected: 100.12, divider: 0.5, value: 50.06)
✅ WhenUsingDivisionMethodWithDecimal_ThenMoneyShouldBeDivided(expected: 100.12, divider: 5, value: 500.60)
✅ WhenUsingDivisionMethodWithInteger_ThenMoneyShouldBeDivided(expected: -100.12, divider: 3, value: -300.36)
✅ WhenUsingDivisionMethodWithInteger_ThenMoneyShouldBeDivided(expected: -100.12, divider: 5, value: -500.60)
✅ WhenUsingDivisionMethodWithInteger_ThenMoneyShouldBeDivided(expected: 10, divider: 15, value: 150)
✅ WhenUsingDivisionMethodWithInteger_ThenMoneyShouldBeDivided(expected: 100.12, divider: 3, value: 300.36)
✅ WhenUsingDivisionMethodWithInteger_ThenMoneyShouldBeDivided(expected: 100.12, divider: 5, value: 500.60)
❌ WhenUsingDivisionMethodWithMoney_ThenResultShouldBeRatio(value1: 100.12, value2: 3, expected: 33.373333333333333333333333333)
	Expected result to be 33.373333333333333333333333333M, but found 33.333333333333333333333333333M (difference of -0.040000000000000000000000000).
✅ WhenUsingDivisionMethodWithMoney_ThenResultShouldBeRatio(value1: 150, value2: 15, expected: 10)
✅ WhenUsingDivisionOperatorWithDecimal_ThenMoneyShouldBeDivided(expected: -100.12, divider: 0.5, value: -50.06)
✅ WhenUsingDivisionOperatorWithDecimal_ThenMoneyShouldBeDivided(expected: -100.12, divider: 5, value: -500.60)
✅ WhenUsingDivisionOperatorWithDecimal_ThenMoneyShouldBeDivided(expected: 10, divider: 15, value: 150)
✅ WhenUsingDivisionOperatorWithDecimal_ThenMoneyShouldBeDivided(expected: 100.12, divider: 0.5, value: 50.06)
✅ WhenUsingDivisionOperatorWithDecimal_ThenMoneyShouldBeDivided(expected: 100.12, divider: 5, value: 500.60)
✅ WhenUsingDivisionOperatorWithInteger_ThenMoneyShouldBeDivided(expected: -100.12, divider: 3, value: -300.36)
✅ WhenUsingDivisionOperatorWithInteger_ThenMoneyShouldBeDivided(expected: -100.12, divider: 5, value: -500.60)
✅ WhenUsingDivisionOperatorWithInteger_ThenMoneyShouldBeDivided(expected: 10, divider: 15, value: 150)
✅ WhenUsingDivisionOperatorWithInteger_ThenMoneyShouldBeDivided(expected: 100.12, divider: 3, value: 300.36)
✅ WhenUsingDivisionOperatorWithInteger_ThenMoneyShouldBeDivided(expected: 100.12, divider: 5, value: 500.60)
❌ WhenUsingDivisionOperatorWithMoney_ThenResultShouldBeRatio(value1: 100.12, value2: 3, expected: 33.373333333333333333333333333)
	Expected result to be 33.373333333333333333333333333M, but found 33.333333333333333333333333333M (difference of -0.040000000000000000000000000).
✅ WhenUsingDivisionOperatorWithMoney_ThenResultShouldBeRatio(value1: 150, value2: 15, expected: 10)
✅ WhenUsingMultiplyMethodWithDecimal_ThenMoneyShouldBeMultiplied(value: -100.12, multiplier: 0.5, expected: -50.06)
❌ WhenUsingMultiplyMethodWithDecimal_ThenMoneyShouldBeMultiplied(value: -100.12, multiplier: 5, expected: -500.60)
	Expected result to be equal to (¤501), but found (¤500).
✅ WhenUsingMultiplyMethodWithDecimal_ThenMoneyShouldBeMultiplied(value: 10, multiplier: 15, expected: 150)
✅ WhenUsingMultiplyMethodWithDecimal_ThenMoneyShouldBeMultiplied(value: 100.12, multiplier: 0.5, expected: 50.06)
❌ WhenUsingMultiplyMethodWithDecimal_ThenMoneyShouldBeMultiplied(value: 100.12, multiplier: 5, expected: 500.60)
	Expected result to be equal to ¤501, but found ¤500.
✅ WhenUsingMultiplyMethodWithInteger_ThenMoneyShouldBeMultiplied(value: -100.12, multiplier: 3, expected: -300.36)
❌ WhenUsingMultiplyMethodWithInteger_ThenMoneyShouldBeMultiplied(value: -100.12, multiplier: 5, expected: -500.60)
	Expected result to be equal to (¤501), but found (¤500).
✅ WhenUsingMultiplyMethodWithInteger_ThenMoneyShouldBeMultiplied(value: 10, multiplier: 15, expected: 150)
✅ WhenUsingMultiplyMethodWithInteger_ThenMoneyShouldBeMultiplied(value: 100.12, multiplier: 3, expected: 300.36)
❌ WhenUsingMultiplyMethodWithInteger_ThenMoneyShouldBeMultiplied(value: 100.12, multiplier: 5, expected: 500.60)
	Expected result to be equal to ¤501, but found ¤500.
✅ WhenUsingMultiplyOperatorWithDecimal_ThenMoneyShouldBeMultiplied(value: -100.12, multiplier: 0.5, expected: -50.06)
❌ WhenUsingMultiplyOperatorWithDecimal_ThenMoneyShouldBeMultiplied(value: -100.12, multiplier: 5, expected: -500.60)
	Expected result1 to be equal to (¤501), but found (¤500).
✅ WhenUsingMultiplyOperatorWithDecimal_ThenMoneyShouldBeMultiplied(value: 10, multiplier: 15, expected: 150)
✅ WhenUsingMultiplyOperatorWithDecimal_ThenMoneyShouldBeMultiplied(value: 100.12, multiplier: 0.5, expected: 50.06)
❌ WhenUsingMultiplyOperatorWithDecimal_ThenMoneyShouldBeMultiplied(value: 100.12, multiplier: 5, expected: 500.60)
	Expected result1 to be equal to ¤501, but found ¤500.
✅ WhenUsingMultiplyOperatorWithInteger_ThenMoneyShouldBeMultiplied(value: -100.12, multiplier: 3, expected: -300.36)
❌ WhenUsingMultiplyOperatorWithInteger_ThenMoneyShouldBeMultiplied(value: -100.12, multiplier: 5, expected: -500.60)
	Expected result1 to be equal to (¤501), but found (¤500).
✅ WhenUsingMultiplyOperatorWithInteger_ThenMoneyShouldBeMultiplied(value: 10, multiplier: 15, expected: 150)
✅ WhenUsingMultiplyOperatorWithInteger_ThenMoneyShouldBeMultiplied(value: 100.12, multiplier: 3, expected: 300.36)
❌ WhenUsingMultiplyOperatorWithInteger_ThenMoneyShouldBeMultiplied(value: 100.12, multiplier: 5, expected: 500.60)
	Expected result1 to be equal to ¤501, but found ¤500.

❌ NodaMoney.Tests.MoneySpec.GivenIWantMoneyWithDifferentRounding

✅ WhenAmountAndCode_ThenItShouldRoundUp
❌ WhenOnlyAmount_ThenItShouldRoundUp
	Expected defaultRounding.Amount to be 0.52M, but found 1M (difference of 0.48).

❌ NodaMoney.Tests.MoneySpec.GivenIWantToCreateMoneyWithDoubleValue

✅ WhenValueIsDoubleAndWithCurrency_ThenMoneyShouldBeCorrect(input: 0.029999999999999999, expected: 0.03)
✅ WhenValueIsDoubleAndWithCurrency_ThenMoneyShouldBeCorrect(input: 0.33333333333333331, expected: 0.33)
❌ WhenValueIsDoubleWithoutCurrency_ThenMoneyShouldBeCorrect(input: 0.029999999999999999, expected: 0.03)
	Expected money.Amount to be 0.03M, but found 0M (difference of -0.03).
❌ WhenValueIsDoubleWithoutCurrency_ThenMoneyShouldBeCorrect(input: 0.33333333333333331, expected: 0.33)
	Expected money.Amount to be 0.33M, but found 0M (difference of -0.33).

❌ NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToDeserializeMoney

❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"amount\": \"234.25\", \"currency\": \"EUR;ISO-"···, expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'amount', line 1, position 11.
❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"Amount\": \"234.25\", \"Currency\": \"EUR;ISO-"···, expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Amount', line 1, position 11.
❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"amount\": \"234.25\", \"currency\": \"EUR\" }", expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'amount', line 1, position 11.
❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"Amount\": \"234.25\", \"Currency\": \"EUR\" }", expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Amount', line 1, position 11.
❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"Amount\": 234.25, \"Currency\": \"EUR;\" }", expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Amount', line 1, position 11.
❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"amount\": 234.25, \"currency\": \"EUR;ISO-4217"···, expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'amount', line 1, position 11.
❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"Amount\": 234.25, \"Currency\": \"EUR;ISO-4217"···, expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Amount', line 1, position 11.
❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"amount\": 234.25, \"currency\": \"EUR\" }", expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'amount', line 1, position 11.
❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"Amount\": 234.25, \"Currency\": \"EUR\" }", expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Amount', line 1, position 11.
❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"currency\": \"EUR;ISO-4217\", \"amount\": \"23"···, expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'currency', line 1, position 13.
❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"Currency\": \"EUR;ISO-4217\", \"Amount\": \"23"···, expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Currency', line 1, position 13.
❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"currency\": \"EUR;ISO-4217\", \"amount\": 234."···, expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'currency', line 1, position 13.
❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"Currency\": \"EUR;ISO-4217\", \"Amount\": 234."···, expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Currency', line 1, position 13.
❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"currency\": \"EUR\", \"amount\": \"234.25\" }", expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'currency', line 1, position 13.
❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"Currency\": \"EUR\", \"Amount\": \"234.25\" }", expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Currency', line 1, position 13.
❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"currency\": \"EUR\", \"amount\": 234.25 }", expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'currency', line 1, position 13.
❌ WhenDeserializingV1_ThenThisShouldSucceed(json: "{ \"Currency\": \"EUR\", \"Amount\": 234.25 }", expected: €234.25)
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Currency', line 1, position 13.
✅ WhenDeserializingV2_ThenThisShouldSucceed(json: "\"234.25 BTC\"", expected: ₿234.25000000)
✅ WhenDeserializingV2_ThenThisShouldSucceed(json: "\"234.25 EUR\"", expected: €234.25)
✅ WhenDeserializingV2_ThenThisShouldSucceed(json: "\"BTC 234.25\"", expected: ₿234.25000000)
✅ WhenDeserializingV2_ThenThisShouldSucceed(json: "\"EUR 234.25\"", expected: €234.25)
❌ WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail(json: "{ \"Amount\": \"234.25\" }")
	Expected a <System.Runtime.Serialization.SerializationException> to be thrown, but found <Newtonsoft.Json.JsonSerializationException>:
	Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Amount', line 1, position 11.
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
	   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
	   at NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToDeserializeMoney.<>c__DisplayClass1_0.<WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail>b__0() in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/Serialization/NewtonsoftJsonSerializer.cs:line 110
	   at FluentAssertions.Specialized.ActionAssertions.InvokeSubject()
	   at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception().
❌ WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail(json: "{ \"Amount\": \"ABC\", \"Currency\": \"EUR\" }")
	Expected a <System.Runtime.Serialization.SerializationException> to be thrown, but found <Newtonsoft.Json.JsonSerializationException>:
	Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Amount', line 1, position 11.
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
	   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
	   at NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToDeserializeMoney.<>c__DisplayClass1_0.<WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail>b__0() in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/Serialization/NewtonsoftJsonSerializer.cs:line 110
	   at FluentAssertions.Specialized.ActionAssertions.InvokeSubject()
	   at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception().
❌ WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail(json: "{ \"amount\": 234.25 }")
	Expected a <System.Runtime.Serialization.SerializationException> to be thrown, but found <Newtonsoft.Json.JsonSerializationException>:
	Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'amount', line 1, position 11.
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
	   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
	   at NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToDeserializeMoney.<>c__DisplayClass1_0.<WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail>b__0() in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/Serialization/NewtonsoftJsonSerializer.cs:line 110
	   at FluentAssertions.Specialized.ActionAssertions.InvokeSubject()
	   at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception().
❌ WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail(json: "{ \"Amount\": 234.25 }")
	Expected a <System.Runtime.Serialization.SerializationException> to be thrown, but found <Newtonsoft.Json.JsonSerializationException>:
	Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Amount', line 1, position 11.
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
	   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
	   at NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToDeserializeMoney.<>c__DisplayClass1_0.<WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail>b__0() in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/Serialization/NewtonsoftJsonSerializer.cs:line 110
	   at FluentAssertions.Specialized.ActionAssertions.InvokeSubject()
	   at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception().
❌ WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail(json: "{ \"currency\": \"EUR\" }")
	Expected a <System.Runtime.Serialization.SerializationException> to be thrown, but found <Newtonsoft.Json.JsonSerializationException>:
	Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'currency', line 1, position 13.
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
	   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
	   at NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToDeserializeMoney.<>c__DisplayClass1_0.<WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail>b__0() in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/Serialization/NewtonsoftJsonSerializer.cs:line 110
	   at FluentAssertions.Specialized.ActionAssertions.InvokeSubject()
	   at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception().
❌ WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail(json: "{ \"Currency\": \"EUR\" }")
	Expected a <System.Runtime.Serialization.SerializationException> to be thrown, but found <Newtonsoft.Json.JsonSerializationException>:
	Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Currency', line 1, position 13.
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
	   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
	   at NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToDeserializeMoney.<>c__DisplayClass1_0.<WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail>b__0() in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/Serialization/NewtonsoftJsonSerializer.cs:line 110
	   at FluentAssertions.Specialized.ActionAssertions.InvokeSubject()
	   at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception().
❌ WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail(json: "{ Amount: '234.25' }")
	Expected a <System.Runtime.Serialization.SerializationException> to be thrown, but found <Newtonsoft.Json.JsonSerializationException>:
	Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Amount', line 1, position 9.
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
	   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
	   at NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToDeserializeMoney.<>c__DisplayClass1_0.<WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail>b__0() in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/Serialization/NewtonsoftJsonSerializer.cs:line 110
	   at FluentAssertions.Specialized.ActionAssertions.InvokeSubject()
	   at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception().
❌ WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail(json: "{ Amount: \"234.25\" }")
	Expected a <System.Runtime.Serialization.SerializationException> to be thrown, but found <Newtonsoft.Json.JsonSerializationException>:
	Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Amount', line 1, position 9.
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
	   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
	   at NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToDeserializeMoney.<>c__DisplayClass1_0.<WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail>b__0() in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/Serialization/NewtonsoftJsonSerializer.cs:line 110
	   at FluentAssertions.Specialized.ActionAssertions.InvokeSubject()
	   at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception().
❌ WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail(json: "{ amount: 234.25 }")
	Expected a <System.Runtime.Serialization.SerializationException> to be thrown, but found <Newtonsoft.Json.JsonSerializationException>:
	Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'amount', line 1, position 9.
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
	   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
	   at NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToDeserializeMoney.<>c__DisplayClass1_0.<WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail>b__0() in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/Serialization/NewtonsoftJsonSerializer.cs:line 110
	   at FluentAssertions.Specialized.ActionAssertions.InvokeSubject()
	   at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception().
❌ WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail(json: "{ Amount: 234.25 }")
	Expected a <System.Runtime.Serialization.SerializationException> to be thrown, but found <Newtonsoft.Json.JsonSerializationException>:
	Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Amount', line 1, position 9.
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
	   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
	   at NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToDeserializeMoney.<>c__DisplayClass1_0.<WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail>b__0() in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/Serialization/NewtonsoftJsonSerializer.cs:line 110
	   at FluentAssertions.Specialized.ActionAssertions.InvokeSubject()
	   at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception().
❌ WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail(json: "{ currency: 'EUR' }")
	Expected a <System.Runtime.Serialization.SerializationException> to be thrown, but found <Newtonsoft.Json.JsonSerializationException>:
	Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'currency', line 1, position 11.
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
	   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
	   at NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToDeserializeMoney.<>c__DisplayClass1_0.<WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail>b__0() in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/Serialization/NewtonsoftJsonSerializer.cs:line 110
	   at FluentAssertions.Specialized.ActionAssertions.InvokeSubject()
	   at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception().
❌ WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail(json: "{ Currency: 'EUR' }")
	Expected a <System.Runtime.Serialization.SerializationException> to be thrown, but found <Newtonsoft.Json.JsonSerializationException>:
	Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Currency', line 1, position 11.
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
	   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
	   at NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToDeserializeMoney.<>c__DisplayClass1_0.<WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail>b__0() in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/Serialization/NewtonsoftJsonSerializer.cs:line 110
	   at FluentAssertions.Specialized.ActionAssertions.InvokeSubject()
	   at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception().
❌ WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail(json: "{ currency: \"EUR\" }")
	Expected a <System.Runtime.Serialization.SerializationException> to be thrown, but found <Newtonsoft.Json.JsonSerializationException>:
	Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'currency', line 1, position 11.
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
	   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
	   at NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToDeserializeMoney.<>c__DisplayClass1_0.<WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail>b__0() in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/Serialization/NewtonsoftJsonSerializer.cs:line 110
	   at FluentAssertions.Specialized.ActionAssertions.InvokeSubject()
	   at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception().
❌ WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail(json: "{ Currency: \"EUR\" }")
	Expected a <System.Runtime.Serialization.SerializationException> to be thrown, but found <Newtonsoft.Json.JsonSerializationException>:
	Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Currency', line 1, position 11.
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
	   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
	   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
	   at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
	   at NodaMoney.Tests.Serialization.NewtonsoftJsonSerializerSpec.GivenIWantToDeserializeMoney.<>c__DisplayClass1_0.<WhenDeserializingWithInvalidJSONV1_ThenThisShouldFail>b__0() in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/Serialization/NewtonsoftJsonSerializer.cs:line 110
	   at FluentAssertions.Specialized.ActionAssertions.InvokeSubject()
	   at FluentAssertions.Specialized.DelegateAssertions`2.InvokeSubjectWithInterception().
✅ WhenDeserializingWithInvalidJSONV2_ThenThisShouldFail(json: "\"234.25 234.25\"")
✅ WhenDeserializingWithInvalidJSONV2_ThenThisShouldFail(json: "\"234.25\"")
✅ WhenDeserializingWithInvalidJSONV2_ThenThisShouldFail(json: "\"234.25EUR\"")
✅ WhenDeserializingWithInvalidJSONV2_ThenThisShouldFail(json: "\"EUR 234.25 123 EUR\"")
✅ WhenDeserializingWithInvalidJSONV2_ThenThisShouldFail(json: "\"EUR 234.25 123\"")
✅ WhenDeserializingWithInvalidJSONV2_ThenThisShouldFail(json: "\"EUR 234.25 EUR 123\"")
✅ WhenDeserializingWithInvalidJSONV2_ThenThisShouldFail(json: "\"EUR 234.25 EUR\"")
✅ WhenDeserializingWithInvalidJSONV2_ThenThisShouldFail(json: "\"EUR EUR\"")
✅ WhenDeserializingWithInvalidJSONV2_ThenThisShouldFail(json: "\"EUR\"")
✅ WhenDeserializingWithInvalidJSONV2_ThenThisShouldFail(json: "\"EUR234.25\"")
✅ WhenDeserializingWithInvalidJSONV2_ThenThisShouldFail(json: "EUR 234.25")
❌ WhenDeserializingWithNestedV1_ThenThisShouldSucceed(json: "{ \"id\": 123, \"name\": \"Abc\", \"total\": { \"a"···, expected: Order { Id = 123, Name = "Abc", Total = €234.25 })
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'total.amount', line 1, position 48.
❌ WhenDeserializingWithNestedV1_ThenThisShouldSucceed(json: "{ \"id\": 123, \"name\": \"Abc\", \"total\": { \"a"···, expected: Order { Id = 123, Name = "Abc", Total = €234.25 })
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'total.amount', line 1, position 48.
❌ WhenDeserializingWithNestedV1_ThenThisShouldSucceed(json: "{ \"Id\": 123, \"Name\": \"Abc\", \"Total\": { \"A"···, expected: Order { Id = 123, Name = "Abc", Total = €234.25 })
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.
	To fix this error either change the JSON to a JSON string value or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
	Path 'Total.Amount', line 1, position 48.
❌ WhenDeserializingWithNestedV1_ThenThisShouldSucceed(json: "{ \"Id\": 123, \"Name\": \"Abc\", \"Total\": { \"A"···, expected: Order { Id = 123, Name = "Abc", Total = €234.25 })
	Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'NodaMoney.Money' because the type requires a JSON string value to deserialize correctly.

Report exceeded GitHub limit of 65535 bytes and has been trimmed

Annotations

Check failure on line 327 in tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs

See this annotation in the file changed.

@github-actions github-actions / unittests

NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney ► WhenUsingDivisionMethodWithMoney_ThenResultShouldBeRatio(value1: 100.12, value2: 3, expected: 33.373333333333333333333333333)

Failed test found in:
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16.trx
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16[1].trx
Error:
  Expected result to be 33.373333333333333333333333333M, but found 33.333333333333333333333333333M (difference of -0.040000000000000000000000000).
Raw output
Expected result to be 33.373333333333333333333333333M, but found 33.333333333333333333333333333M (difference of -0.040000000000000000000000000).
   at FluentAssertions.Execution.XUnit2TestFramework.Throw(String message)
   at FluentAssertions.Execution.TestFrameworkProvider.Throw(String message)
   at FluentAssertions.Execution.DefaultAssertionStrategy.HandleFailure(String message)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(String message, Object[] args)
   at FluentAssertions.Numeric.NumericAssertions`2.Be(T expected, String because, Object[] becauseArgs)
   at NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney.WhenUsingDivisionMethodWithMoney_ThenResultShouldBeRatio(Decimal value1, Decimal value2, Decimal expected) in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs:line 327
   at InvokeStub_GivenIWantToMultiplyAndDivideMoney.WhenUsingDivisionMethodWithMoney_ThenResultShouldBeRatio(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

Check failure on line 316 in tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs

See this annotation in the file changed.

@github-actions github-actions / unittests

NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney ► WhenUsingDivisionOperatorWithMoney_ThenResultShouldBeRatio(value1: 100.12, value2: 3, expected: 33.373333333333333333333333333)

Failed test found in:
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16.trx
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16[1].trx
Error:
  Expected result to be 33.373333333333333333333333333M, but found 33.333333333333333333333333333M (difference of -0.040000000000000000000000000).
Raw output
Expected result to be 33.373333333333333333333333333M, but found 33.333333333333333333333333333M (difference of -0.040000000000000000000000000).
   at FluentAssertions.Execution.XUnit2TestFramework.Throw(String message)
   at FluentAssertions.Execution.TestFrameworkProvider.Throw(String message)
   at FluentAssertions.Execution.DefaultAssertionStrategy.HandleFailure(String message)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(String message, Object[] args)
   at FluentAssertions.Numeric.NumericAssertions`2.Be(T expected, String because, Object[] becauseArgs)
   at NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney.WhenUsingDivisionOperatorWithMoney_ThenResultShouldBeRatio(Decimal value1, Decimal value2, Decimal expected) in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs:line 316
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)

Check failure on line 220 in tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs

See this annotation in the file changed.

@github-actions github-actions / unittests

NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney ► WhenUsingMultiplyMethodWithDecimal_ThenMoneyShouldBeMultiplied(value: -100.12, multiplier: 5, expected: -500.60)

Failed test found in:
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16.trx
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16[1].trx
Error:
  Expected result to be equal to (¤501), but found (¤500).
Raw output
Expected result to be equal to (¤501), but found (¤500).
   at FluentAssertions.Execution.XUnit2TestFramework.Throw(String message)
   at FluentAssertions.Execution.TestFrameworkProvider.Throw(String message)
   at FluentAssertions.Execution.DefaultAssertionStrategy.HandleFailure(String message)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(String message, Object[] args)
   at FluentAssertions.Numeric.ComparableTypeAssertions`2.Be(T expected, String because, Object[] becauseArgs)
   at NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney.WhenUsingMultiplyMethodWithDecimal_ThenMoneyShouldBeMultiplied(Decimal value, Decimal multiplier, Decimal expected) in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs:line 220
   at InvokeStub_GivenIWantToMultiplyAndDivideMoney.WhenUsingMultiplyMethodWithDecimal_ThenMoneyShouldBeMultiplied(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

Check failure on line 220 in tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs

See this annotation in the file changed.

@github-actions github-actions / unittests

NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney ► WhenUsingMultiplyMethodWithDecimal_ThenMoneyShouldBeMultiplied(value: 100.12, multiplier: 5, expected: 500.60)

Failed test found in:
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16.trx
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16[1].trx
Error:
  Expected result to be equal to ¤501, but found ¤500.
Raw output
Expected result to be equal to ¤501, but found ¤500.
   at FluentAssertions.Execution.XUnit2TestFramework.Throw(String message)
   at FluentAssertions.Execution.TestFrameworkProvider.Throw(String message)
   at FluentAssertions.Execution.DefaultAssertionStrategy.HandleFailure(String message)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(String message, Object[] args)
   at FluentAssertions.Numeric.ComparableTypeAssertions`2.Be(T expected, String because, Object[] becauseArgs)
   at NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney.WhenUsingMultiplyMethodWithDecimal_ThenMoneyShouldBeMultiplied(Decimal value, Decimal multiplier, Decimal expected) in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs:line 220
   at InvokeStub_GivenIWantToMultiplyAndDivideMoney.WhenUsingMultiplyMethodWithDecimal_ThenMoneyShouldBeMultiplied(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

Check failure on line 276 in tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs

See this annotation in the file changed.

@github-actions github-actions / unittests

NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney ► WhenUsingMultiplyMethodWithInteger_ThenMoneyShouldBeMultiplied(value: -100.12, multiplier: 5, expected: -500.60)

Failed test found in:
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16.trx
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16[1].trx
Error:
  Expected result to be equal to (¤501), but found (¤500).
Raw output
Expected result to be equal to (¤501), but found (¤500).
   at FluentAssertions.Execution.XUnit2TestFramework.Throw(String message)
   at FluentAssertions.Execution.TestFrameworkProvider.Throw(String message)
   at FluentAssertions.Execution.DefaultAssertionStrategy.HandleFailure(String message)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(String message, Object[] args)
   at FluentAssertions.Numeric.ComparableTypeAssertions`2.Be(T expected, String because, Object[] becauseArgs)
   at NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney.WhenUsingMultiplyMethodWithInteger_ThenMoneyShouldBeMultiplied(Decimal value, Int32 multiplier, Decimal expected) in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs:line 276
   at InvokeStub_GivenIWantToMultiplyAndDivideMoney.WhenUsingMultiplyMethodWithInteger_ThenMoneyShouldBeMultiplied(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

Check failure on line 276 in tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs

See this annotation in the file changed.

@github-actions github-actions / unittests

NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney ► WhenUsingMultiplyMethodWithInteger_ThenMoneyShouldBeMultiplied(value: 100.12, multiplier: 5, expected: 500.60)

Failed test found in:
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16.trx
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16[1].trx
Error:
  Expected result to be equal to ¤501, but found ¤500.
Raw output
Expected result to be equal to ¤501, but found ¤500.
   at FluentAssertions.Execution.XUnit2TestFramework.Throw(String message)
   at FluentAssertions.Execution.TestFrameworkProvider.Throw(String message)
   at FluentAssertions.Execution.DefaultAssertionStrategy.HandleFailure(String message)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(String message, Object[] args)
   at FluentAssertions.Numeric.ComparableTypeAssertions`2.Be(T expected, String because, Object[] becauseArgs)
   at NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney.WhenUsingMultiplyMethodWithInteger_ThenMoneyShouldBeMultiplied(Decimal value, Int32 multiplier, Decimal expected) in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs:line 276
   at InvokeStub_GivenIWantToMultiplyAndDivideMoney.WhenUsingMultiplyMethodWithInteger_ThenMoneyShouldBeMultiplied(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

Check failure on line 207 in tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs

See this annotation in the file changed.

@github-actions github-actions / unittests

NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney ► WhenUsingMultiplyOperatorWithDecimal_ThenMoneyShouldBeMultiplied(value: -100.12, multiplier: 5, expected: -500.60)

Failed test found in:
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16.trx
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16[1].trx
Error:
  Expected result1 to be equal to (¤501), but found (¤500).
Raw output
Expected result1 to be equal to (¤501), but found (¤500).
   at FluentAssertions.Execution.XUnit2TestFramework.Throw(String message)
   at FluentAssertions.Execution.TestFrameworkProvider.Throw(String message)
   at FluentAssertions.Execution.DefaultAssertionStrategy.HandleFailure(String message)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(String message, Object[] args)
   at FluentAssertions.Numeric.ComparableTypeAssertions`2.Be(T expected, String because, Object[] becauseArgs)
   at NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney.WhenUsingMultiplyOperatorWithDecimal_ThenMoneyShouldBeMultiplied(Decimal value, Decimal multiplier, Decimal expected) in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs:line 207
   at InvokeStub_GivenIWantToMultiplyAndDivideMoney.WhenUsingMultiplyOperatorWithDecimal_ThenMoneyShouldBeMultiplied(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

Check failure on line 207 in tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs

See this annotation in the file changed.

@github-actions github-actions / unittests

NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney ► WhenUsingMultiplyOperatorWithDecimal_ThenMoneyShouldBeMultiplied(value: 100.12, multiplier: 5, expected: 500.60)

Failed test found in:
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16.trx
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16[1].trx
Error:
  Expected result1 to be equal to ¤501, but found ¤500.
Raw output
Expected result1 to be equal to ¤501, but found ¤500.
   at FluentAssertions.Execution.XUnit2TestFramework.Throw(String message)
   at FluentAssertions.Execution.TestFrameworkProvider.Throw(String message)
   at FluentAssertions.Execution.DefaultAssertionStrategy.HandleFailure(String message)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(String message, Object[] args)
   at FluentAssertions.Numeric.ComparableTypeAssertions`2.Be(T expected, String because, Object[] becauseArgs)
   at NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney.WhenUsingMultiplyOperatorWithDecimal_ThenMoneyShouldBeMultiplied(Decimal value, Decimal multiplier, Decimal expected) in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs:line 207
   at InvokeStub_GivenIWantToMultiplyAndDivideMoney.WhenUsingMultiplyOperatorWithDecimal_ThenMoneyShouldBeMultiplied(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

Check failure on line 263 in tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs

See this annotation in the file changed.

@github-actions github-actions / unittests

NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney ► WhenUsingMultiplyOperatorWithInteger_ThenMoneyShouldBeMultiplied(value: -100.12, multiplier: 5, expected: -500.60)

Failed test found in:
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16.trx
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16[1].trx
Error:
  Expected result1 to be equal to (¤501), but found (¤500).
Raw output
Expected result1 to be equal to (¤501), but found (¤500).
   at FluentAssertions.Execution.XUnit2TestFramework.Throw(String message)
   at FluentAssertions.Execution.TestFrameworkProvider.Throw(String message)
   at FluentAssertions.Execution.DefaultAssertionStrategy.HandleFailure(String message)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(String message, Object[] args)
   at FluentAssertions.Numeric.ComparableTypeAssertions`2.Be(T expected, String because, Object[] becauseArgs)
   at NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney.WhenUsingMultiplyOperatorWithInteger_ThenMoneyShouldBeMultiplied(Decimal value, Int32 multiplier, Decimal expected) in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs:line 263
   at InvokeStub_GivenIWantToMultiplyAndDivideMoney.WhenUsingMultiplyOperatorWithInteger_ThenMoneyShouldBeMultiplied(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

Check failure on line 263 in tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs

See this annotation in the file changed.

@github-actions github-actions / unittests

NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney ► WhenUsingMultiplyOperatorWithInteger_ThenMoneyShouldBeMultiplied(value: 100.12, multiplier: 5, expected: 500.60)

Failed test found in:
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16.trx
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16[1].trx
Error:
  Expected result1 to be equal to ¤501, but found ¤500.
Raw output
Expected result1 to be equal to ¤501, but found ¤500.
   at FluentAssertions.Execution.XUnit2TestFramework.Throw(String message)
   at FluentAssertions.Execution.TestFrameworkProvider.Throw(String message)
   at FluentAssertions.Execution.DefaultAssertionStrategy.HandleFailure(String message)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(String message, Object[] args)
   at FluentAssertions.Numeric.ComparableTypeAssertions`2.Be(T expected, String because, Object[] becauseArgs)
   at NodaMoney.Tests.MoneyBinaryOperatorsSpec.GivenIWantToMultiplyAndDivideMoney.WhenUsingMultiplyOperatorWithInteger_ThenMoneyShouldBeMultiplied(Decimal value, Int32 multiplier, Decimal expected) in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/MoneyBinaryOperatorsSpec.cs:line 263
   at InvokeStub_GivenIWantToMultiplyAndDivideMoney.WhenUsingMultiplyOperatorWithInteger_ThenMoneyShouldBeMultiplied(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

Check failure on line 308 in tests/NodaMoney.Tests/MoneySpec.cs

See this annotation in the file changed.

@github-actions github-actions / unittests

NodaMoney.Tests.MoneySpec.GivenIWantMoneyWithDifferentRounding ► WhenOnlyAmount_ThenItShouldRoundUp

Failed test found in:
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16.trx
  ./artifacts/_fv-az1913-517_2025-01-11_12_58_16[1].trx
Error:
  Expected defaultRounding.Amount to be 0.52M, but found 1M (difference of 0.48).
Raw output
Expected defaultRounding.Amount to be 0.52M, but found 1M (difference of 0.48).
   at FluentAssertions.Execution.XUnit2TestFramework.Throw(String message)
   at FluentAssertions.Execution.TestFrameworkProvider.Throw(String message)
   at FluentAssertions.Execution.DefaultAssertionStrategy.HandleFailure(String message)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(Func`1 failReasonFunc)
   at FluentAssertions.Execution.AssertionScope.FailWith(String message, Object[] args)
   at FluentAssertions.Numeric.NumericAssertions`2.Be(T expected, String because, Object[] becauseArgs)
   at NodaMoney.Tests.MoneySpec.GivenIWantMoneyWithDifferentRounding.WhenOnlyAmount_ThenItShouldRoundUp() in /home/runner/work/NodaMoney/NodaMoney/tests/NodaMoney.Tests/MoneySpec.cs:line 308
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)