diff --git a/TransactionProcessor.FloatAggregate.Tests/FloatAggregateTests.cs b/TransactionProcessor.FloatAggregate.Tests/FloatAggregateTests.cs index 72b47dc0..294beddf 100644 --- a/TransactionProcessor.FloatAggregate.Tests/FloatAggregateTests.cs +++ b/TransactionProcessor.FloatAggregate.Tests/FloatAggregateTests.cs @@ -99,16 +99,16 @@ public void FloatAggregate_RecordCreditPurchase_MultipleCreditPurchases_AllCredi } [Fact] - public void FloatAggregate_RecordCreditPurchase_DuplicateCreditPurchase_ErrorThrown() + public void FloatAggregate_RecordCreditPurchase_DuplicateCreditPurchase_NoErrorThrown() { FloatAggregate aggregate = FloatAggregate.Create(TestData.FloatAggregateId); aggregate.CreateFloat(TestData.EstateId, TestData.ContractId, TestData.ProductId, TestData.FloatCreatedDateTime); DateTime purchaseDateTime = DateTime.Now; aggregate.RecordCreditPurchase(purchaseDateTime, 1000, 900); - Should.Throw(() => { - aggregate.RecordCreditPurchase(purchaseDateTime, 1000, 900); - }); + Should.NotThrow(() => { + aggregate.RecordCreditPurchase(purchaseDateTime, 1000, 900); + }); } [Fact] diff --git a/TransactionProcessor.FloatAggregate/FloatAggregate.cs b/TransactionProcessor.FloatAggregate/FloatAggregate.cs index 77457ead..9a1ee61f 100644 --- a/TransactionProcessor.FloatAggregate/FloatAggregate.cs +++ b/TransactionProcessor.FloatAggregate/FloatAggregate.cs @@ -52,7 +52,9 @@ public static void RecordCreditPurchase(this FloatAggregate aggregate, DateTime { aggregate.ValidateFloatIsAlreadyCreated(); - aggregate.ValidateCreditIsNotADuplicate(creditPurchasedDate,amount,costPrice); + Boolean isCreditADuplicate = aggregate.IsCreditADuplicate(creditPurchasedDate,amount,costPrice); + if (isCreditADuplicate) + return; FloatCreditPurchasedEvent floatCreditPurchasedEvent = new FloatCreditPurchasedEvent(aggregate.AggregateId, aggregate.EstateId, creditPurchasedDate, amount, costPrice); @@ -86,11 +88,9 @@ public static void ValidateFloatIsNotAlreadyCreated(this FloatAggregate aggregat } } - public static void ValidateCreditIsNotADuplicate(this FloatAggregate aggregate, DateTime creditPurchasedDate, Decimal amount, Decimal costPrice){ + public static Boolean IsCreditADuplicate(this FloatAggregate aggregate, DateTime creditPurchasedDate, Decimal amount, Decimal costPrice){ Boolean isDuplicate = aggregate.Credits.Any(c => c.costPrice == costPrice && c.amount == amount && c.creditPurchasedDate == creditPurchasedDate); - if (isDuplicate == true){ - throw new InvalidOperationException($"Float Aggregate Id {aggregate.AggregateId} already has a credit with this information recorded"); - } + return isDuplicate; } public static void ValidateTransactionIsNotADuplicate(this FloatAggregate aggregate, Guid transactionId)