Skip to content

Commit 059b79b

Browse files
Merge pull request #251 from TransactionProcessing/task/#225_silenthandlefeealreadyadded
Removed exception throw from fee checks
2 parents 25529fe + 959e330 commit 059b79b

4 files changed

Lines changed: 25 additions & 30 deletions

File tree

TransactionProcessor.SettlementAggregates.Tests/SettlementAggregateTests.cs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,18 +88,17 @@ public void SettlementAggregate_AddFee_AggregateNotCreated_ErrorThrown()
8888
}
8989

9090
[Fact]
91-
public void SettlementAggregate_AddFee_DuplicateFee_ErrorThrown()
91+
public void SettlementAggregate_AddFee_DuplicateFee_NoErrorThrown()
9292
{
9393
SettlementAggregate aggregate = SettlementAggregate.Create(TestData.SettlementAggregateId);
9494
aggregate.Create(TestData.EstateId, TestData.SettlementDate);
9595
aggregate.AddFee(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee());
9696

97-
Should.Throw<InvalidOperationException>(() =>
98-
{
99-
aggregate.AddFee(TestData.MerchantId,
100-
TestData.TransactionId,
101-
TestData.CalculatedFeeMerchantFee());
102-
});
97+
Should.NotThrow(() =>
98+
{
99+
aggregate.AddFee(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee());
100+
});
101+
aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(1);
103102
}
104103

105104
[Fact]

TransactionProcessor.SettlementAggregates/SettlementAggregate.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@ public void AddFee(Guid merchantId,
113113
Guard.ThrowIfNull(calculatedFee, nameof(calculatedFee));
114114

115115
this.CheckHasBeenCreated();
116-
this.CheckFeeHasNotAlreadyBeenAdded(transactionId, calculatedFee);
116+
if (this.HasFeeAlreadyBeenAdded(transactionId, calculatedFee))
117+
return;
117118

118119
DomainEventRecord.DomainEvent @event = null;
119120
if (calculatedFee.FeeType == FeeType.Merchant)
@@ -184,12 +185,9 @@ protected override Object GetMetadata()
184185
return null;
185186
}
186187

187-
private void CheckFeeHasNotAlreadyBeenAdded(Guid transactionId, CalculatedFee calculatedFee)
188+
private Boolean HasFeeAlreadyBeenAdded(Guid transactionId, CalculatedFee calculatedFee)
188189
{
189-
if (this.CalculatedFeesPendingSettlement.Any(c => c.calculatedFee.FeeId == calculatedFee.FeeId && c.transactionId == transactionId))
190-
{
191-
throw new InvalidOperationException($"Fee with Id [{calculatedFee.FeeId}] for Transaction Id [{transactionId}] has already been added to this days pending settlement");
192-
}
190+
return this.CalculatedFeesPendingSettlement.Any(c => c.calculatedFee.FeeId == calculatedFee.FeeId && c.transactionId == transactionId);
193191
}
194192

195193
private void CheckHasBeenCreated()

TransactionProcessor.TransactionAggregate.Tests/TransactionAggregateTests.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,7 +1100,7 @@ public void TransactionAggregate_AddFee_TransactionNotCompleted_ErrorThrown(Tran
11001100

11011101
[Theory]
11021102
[InlineData(TransactionType.Sale, FeeType.ServiceProvider)]
1103-
public void TransactionAggregate_AddFee_FeeAlreadyAdded_ErrorThrown(TransactionType transactionType, FeeType feeType)
1103+
public void TransactionAggregate_AddFee_FeeAlreadyAdded_NoErrorThrown(TransactionType transactionType, FeeType feeType)
11041104
{
11051105
TransactionAggregate transactionAggregate = TransactionAggregate.Create(TestData.TransactionId);
11061106
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
11111111
transactionAggregate.CompleteTransaction();
11121112
transactionAggregate.AddFee(this.GetCalculatedFeeToAdd(feeType));
11131113

1114-
Should.Throw<InvalidOperationException>(() =>
1114+
Should.NotThrow(() =>
11151115
{
11161116
transactionAggregate.AddFee(this.GetCalculatedFeeToAdd(feeType));
11171117
});
1118+
transactionAggregate.GetFees().Count.ShouldBe(1);
11181119
}
11191120

11201121
[Theory]
@@ -1239,7 +1240,7 @@ public void TransactionAggregate_AddSettledFee_TransactionNotCompleted_ErrorThro
12391240

12401241
[Theory]
12411242
[InlineData(TransactionType.Sale, FeeType.Merchant)]
1242-
public void TransactionAggregate_AddSettledFee_FeeAlreadyAdded_ErrorThrown(TransactionType transactionType, FeeType feeType)
1243+
public void TransactionAggregate_AddSettledFee_FeeAlreadyAdded_NoErrorThrown(TransactionType transactionType, FeeType feeType)
12431244
{
12441245
TransactionAggregate transactionAggregate = TransactionAggregate.Create(TestData.TransactionId);
12451246
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
12501251
transactionAggregate.CompleteTransaction();
12511252
transactionAggregate.AddSettledFee(this.GetCalculatedFeeToAdd(feeType), TestData.TransactionFeeSettlementDueDate, TestData.SettlementDate);
12521253

1253-
Should.Throw<InvalidOperationException>(() =>
1254+
Should.NotThrow(() =>
12541255
{
12551256
transactionAggregate.AddSettledFee(this.GetCalculatedFeeToAdd(feeType), TestData.TransactionFeeSettlementDueDate, TestData.SettlementDate);
12561257
});
1258+
1259+
transactionAggregate.GetFees().Count.ShouldBe(1);
12571260
}
12581261

12591262
[Theory]

TransactionProcessor.TransactionAgrgegate/TransactionAggregate.cs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,9 @@ public void AddFee(CalculatedFee calculatedFee)
281281
{
282282
Guard.ThrowIfNull(calculatedFee, nameof(calculatedFee));
283283

284-
this.CheckFeeHasNotAlreadyBeenAdded(calculatedFee);
284+
if (HasFeeAlreadyBeenAdded(calculatedFee) == true)
285+
return;
286+
285287
this.CheckTransactionHasBeenAuthorised();
286288
this.CheckTransactionHasBeenCompleted();
287289
this.CheckTransactionCanAttractFees();
@@ -317,7 +319,9 @@ public void AddSettledFee(CalculatedFee calculatedFee, DateTime settlementDueDat
317319
throw new ArgumentNullException(nameof(calculatedFee));
318320
}
319321

320-
this.CheckFeeHasNotAlreadyBeenAdded(calculatedFee);
322+
if (this.HasFeeAlreadyBeenAdded(calculatedFee) == true)
323+
return;
324+
321325
this.CheckTransactionHasBeenAuthorised();
322326
this.CheckTransactionHasBeenCompleted();
323327
this.CheckTransactionCanAttractFees();
@@ -689,18 +693,9 @@ private void CheckCustomerHasNotAlreadyRequestedEmailReceipt()
689693
}
690694
}
691695

692-
/// <summary>
693-
/// Checks the fee has not already been added.
694-
/// </summary>
695-
/// <param name="calculatedFee">The calculated fee.</param>
696-
/// <exception cref="System.InvalidOperationException">Fee with Id [{calculatedFee.FeeId}] has already been added to this transaction</exception>
697-
/// <exception cref="InvalidOperationException">Fee with Id [{calculatedFee.FeeId}] has already been added to this transaction</exception>
698-
private void CheckFeeHasNotAlreadyBeenAdded(CalculatedFee calculatedFee)
696+
private Boolean HasFeeAlreadyBeenAdded(CalculatedFee calculatedFee)
699697
{
700-
if (this.CalculatedFees.Any(c => c.FeeId == calculatedFee.FeeId))
701-
{
702-
throw new InvalidOperationException($"Fee with Id [{calculatedFee.FeeId}] has already been added to this transaction");
703-
}
698+
return this.CalculatedFees.Any(c => c.FeeId == calculatedFee.FeeId);
704699
}
705700

706701
/// <summary>

0 commit comments

Comments
 (0)