From 959e33071372e07be8424b961724e27f641b1975 Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Tue, 29 Mar 2022 12:56:59 +0100 Subject: [PATCH] Removed exception throw from fee checks --- .../SettlementAggregateTests.cs | 13 ++++++------ .../SettlementAggregate.cs | 10 ++++----- .../TransactionAggregateTests.cs | 11 ++++++---- .../TransactionAggregate.cs | 21 +++++++------------ 4 files changed, 25 insertions(+), 30 deletions(-) diff --git a/TransactionProcessor.SettlementAggregates.Tests/SettlementAggregateTests.cs b/TransactionProcessor.SettlementAggregates.Tests/SettlementAggregateTests.cs index fe97c930..0473ed0e 100644 --- a/TransactionProcessor.SettlementAggregates.Tests/SettlementAggregateTests.cs +++ b/TransactionProcessor.SettlementAggregates.Tests/SettlementAggregateTests.cs @@ -88,18 +88,17 @@ public void SettlementAggregate_AddFee_AggregateNotCreated_ErrorThrown() } [Fact] - public void SettlementAggregate_AddFee_DuplicateFee_ErrorThrown() + public void SettlementAggregate_AddFee_DuplicateFee_NoErrorThrown() { SettlementAggregate aggregate = SettlementAggregate.Create(TestData.SettlementAggregateId); aggregate.Create(TestData.EstateId, TestData.SettlementDate); aggregate.AddFee(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee()); - Should.Throw(() => - { - aggregate.AddFee(TestData.MerchantId, - TestData.TransactionId, - TestData.CalculatedFeeMerchantFee()); - }); + Should.NotThrow(() => + { + aggregate.AddFee(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee()); + }); + aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(1); } [Fact] diff --git a/TransactionProcessor.SettlementAggregates/SettlementAggregate.cs b/TransactionProcessor.SettlementAggregates/SettlementAggregate.cs index 83fe92f3..2209f142 100644 --- a/TransactionProcessor.SettlementAggregates/SettlementAggregate.cs +++ b/TransactionProcessor.SettlementAggregates/SettlementAggregate.cs @@ -113,7 +113,8 @@ public void AddFee(Guid merchantId, Guard.ThrowIfNull(calculatedFee, nameof(calculatedFee)); this.CheckHasBeenCreated(); - this.CheckFeeHasNotAlreadyBeenAdded(transactionId, calculatedFee); + if (this.HasFeeAlreadyBeenAdded(transactionId, calculatedFee)) + return; DomainEventRecord.DomainEvent @event = null; if (calculatedFee.FeeType == FeeType.Merchant) @@ -184,12 +185,9 @@ protected override Object GetMetadata() return null; } - private void CheckFeeHasNotAlreadyBeenAdded(Guid transactionId, CalculatedFee calculatedFee) + private Boolean HasFeeAlreadyBeenAdded(Guid transactionId, CalculatedFee calculatedFee) { - if (this.CalculatedFeesPendingSettlement.Any(c => c.calculatedFee.FeeId == calculatedFee.FeeId && c.transactionId == transactionId)) - { - throw new InvalidOperationException($"Fee with Id [{calculatedFee.FeeId}] for Transaction Id [{transactionId}] has already been added to this days pending settlement"); - } + return this.CalculatedFeesPendingSettlement.Any(c => c.calculatedFee.FeeId == calculatedFee.FeeId && c.transactionId == transactionId); } private void CheckHasBeenCreated() diff --git a/TransactionProcessor.TransactionAggregate.Tests/TransactionAggregateTests.cs b/TransactionProcessor.TransactionAggregate.Tests/TransactionAggregateTests.cs index 058429c9..0a5d46ed 100644 --- a/TransactionProcessor.TransactionAggregate.Tests/TransactionAggregateTests.cs +++ b/TransactionProcessor.TransactionAggregate.Tests/TransactionAggregateTests.cs @@ -1100,7 +1100,7 @@ public void TransactionAggregate_AddFee_TransactionNotCompleted_ErrorThrown(Tran [Theory] [InlineData(TransactionType.Sale, FeeType.ServiceProvider)] - public void TransactionAggregate_AddFee_FeeAlreadyAdded_ErrorThrown(TransactionType transactionType, FeeType feeType) + public void TransactionAggregate_AddFee_FeeAlreadyAdded_NoErrorThrown(TransactionType transactionType, FeeType feeType) { TransactionAggregate transactionAggregate = TransactionAggregate.Create(TestData.TransactionId); transactionAggregate.StartTransaction(TestData.TransactionDateTime, TestData.TransactionNumber, transactionType, TestData.TransactionReference, TestData.EstateId, TestData.MerchantId, TestData.DeviceIdentifier, @@ -1111,10 +1111,11 @@ public void TransactionAggregate_AddFee_FeeAlreadyAdded_ErrorThrown(TransactionT transactionAggregate.CompleteTransaction(); transactionAggregate.AddFee(this.GetCalculatedFeeToAdd(feeType)); - Should.Throw(() => + Should.NotThrow(() => { transactionAggregate.AddFee(this.GetCalculatedFeeToAdd(feeType)); }); + transactionAggregate.GetFees().Count.ShouldBe(1); } [Theory] @@ -1239,7 +1240,7 @@ public void TransactionAggregate_AddSettledFee_TransactionNotCompleted_ErrorThro [Theory] [InlineData(TransactionType.Sale, FeeType.Merchant)] - public void TransactionAggregate_AddSettledFee_FeeAlreadyAdded_ErrorThrown(TransactionType transactionType, FeeType feeType) + public void TransactionAggregate_AddSettledFee_FeeAlreadyAdded_NoErrorThrown(TransactionType transactionType, FeeType feeType) { TransactionAggregate transactionAggregate = TransactionAggregate.Create(TestData.TransactionId); transactionAggregate.StartTransaction(TestData.TransactionDateTime, TestData.TransactionNumber, transactionType, TestData.TransactionReference, TestData.EstateId, TestData.MerchantId, TestData.DeviceIdentifier, @@ -1250,10 +1251,12 @@ public void TransactionAggregate_AddSettledFee_FeeAlreadyAdded_ErrorThrown(Trans transactionAggregate.CompleteTransaction(); transactionAggregate.AddSettledFee(this.GetCalculatedFeeToAdd(feeType), TestData.TransactionFeeSettlementDueDate, TestData.SettlementDate); - Should.Throw(() => + Should.NotThrow(() => { transactionAggregate.AddSettledFee(this.GetCalculatedFeeToAdd(feeType), TestData.TransactionFeeSettlementDueDate, TestData.SettlementDate); }); + + transactionAggregate.GetFees().Count.ShouldBe(1); } [Theory] diff --git a/TransactionProcessor.TransactionAgrgegate/TransactionAggregate.cs b/TransactionProcessor.TransactionAgrgegate/TransactionAggregate.cs index 91bed829..6a42c591 100644 --- a/TransactionProcessor.TransactionAgrgegate/TransactionAggregate.cs +++ b/TransactionProcessor.TransactionAgrgegate/TransactionAggregate.cs @@ -281,7 +281,9 @@ public void AddFee(CalculatedFee calculatedFee) { Guard.ThrowIfNull(calculatedFee, nameof(calculatedFee)); - this.CheckFeeHasNotAlreadyBeenAdded(calculatedFee); + if (HasFeeAlreadyBeenAdded(calculatedFee) == true) + return; + this.CheckTransactionHasBeenAuthorised(); this.CheckTransactionHasBeenCompleted(); this.CheckTransactionCanAttractFees(); @@ -317,7 +319,9 @@ public void AddSettledFee(CalculatedFee calculatedFee, DateTime settlementDueDat throw new ArgumentNullException(nameof(calculatedFee)); } - this.CheckFeeHasNotAlreadyBeenAdded(calculatedFee); + if (this.HasFeeAlreadyBeenAdded(calculatedFee) == true) + return; + this.CheckTransactionHasBeenAuthorised(); this.CheckTransactionHasBeenCompleted(); this.CheckTransactionCanAttractFees(); @@ -689,18 +693,9 @@ private void CheckCustomerHasNotAlreadyRequestedEmailReceipt() } } - /// - /// Checks the fee has not already been added. - /// - /// The calculated fee. - /// Fee with Id [{calculatedFee.FeeId}] has already been added to this transaction - /// Fee with Id [{calculatedFee.FeeId}] has already been added to this transaction - private void CheckFeeHasNotAlreadyBeenAdded(CalculatedFee calculatedFee) + private Boolean HasFeeAlreadyBeenAdded(CalculatedFee calculatedFee) { - if (this.CalculatedFees.Any(c => c.FeeId == calculatedFee.FeeId)) - { - throw new InvalidOperationException($"Fee with Id [{calculatedFee.FeeId}] has already been added to this transaction"); - } + return this.CalculatedFees.Any(c => c.FeeId == calculatedFee.FeeId); } ///