Skip to content

Commit 429ff70

Browse files
Merge pull request #159 from TransactionProcessing/task/#156_pendingsettlement
Minor bug fixes to settlement processing
2 parents 63d1882 + 5cacc11 commit 429ff70

File tree

5 files changed

+33
-13
lines changed

5 files changed

+33
-13
lines changed

TransactionProcessor.BusinessLogic/EventHandling/TransactionDomainEventHandler.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,10 @@ private async Task HandleSpecificDomainEvent(TransactionHasBeenCompletedEvent do
229229
await this.TransactionAggregateManager.AddFee(transactionAggregate.EstateId, transactionAggregate.AggregateId, calculatedFee, cancellationToken);
230230
}
231231
}
232+
else if (merchant.SettlementSchedule == SettlementSchedule.NotSet)
233+
{
234+
throw new NotSupportedException($"Merchant {merchant.MerchantId} does not have a settlement schedule configured");
235+
}
232236
else
233237
{
234238
foreach (CalculatedFee calculatedFee in merchantFees)

TransactionProcessor.IntegrationTests/Settlement/Settlement.feature.cs

Lines changed: 11 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

TransactionProcessor.SettlementAggregates.Tests/PendingSettlementAggregateTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,18 @@ public void PendingSettlementAggregate_AddFee_TwoFeesAdded_FeesAreAdded()
6161
aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(2);
6262
}
6363

64+
[Fact]
65+
public void PendingSettlementAggregate_AddFee_TwoFeesAdded_SameFeeIdDifferentTransaction_FeesAreAdded()
66+
{
67+
PendingSettlementAggregate aggregate = PendingSettlementAggregate.Create(TestData.PendingSettlementAggregateId);
68+
aggregate.Create(TestData.EstateId, TestData.SettlementDate);
69+
aggregate.AddFee(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee);
70+
aggregate.AddFee(TestData.MerchantId, TestData.TransactionId2, TestData.CalculatedFeeMerchantFee);
71+
72+
aggregate.AggregateId.ShouldBe(TestData.PendingSettlementAggregateId);
73+
aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(2);
74+
}
75+
6476
[Fact]
6577
public void PendingSettlementAggregate_AddFee_AggregateNotCreated_ErrorThrown()
6678
{

TransactionProcessor.SettlementAggregates/PendingSettlementAggregate.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public void AddFee(Guid merchantId,
7272
}
7373

7474
this.CheckHasBeenCreated();
75-
this.CheckFeeHasNotAlreadyBeenAdded(calculatedFee);
75+
this.CheckFeeHasNotAlreadyBeenAdded(transactionId, calculatedFee);
7676

7777
DomainEventRecord.DomainEvent @event = null;
7878
if (calculatedFee.FeeType == FeeType.Merchant)
@@ -137,11 +137,11 @@ protected override Object GetMetadata()
137137
return null;
138138
}
139139

140-
private void CheckFeeHasNotAlreadyBeenAdded(CalculatedFee calculatedFee)
140+
private void CheckFeeHasNotAlreadyBeenAdded(Guid transactionId, CalculatedFee calculatedFee)
141141
{
142-
if (this.CalculatedFeesPendingSettlement.Any(c => c.calculatedFee.FeeId == calculatedFee.FeeId))
142+
if (this.CalculatedFeesPendingSettlement.Any(c => c.calculatedFee.FeeId == calculatedFee.FeeId && c.transactionId == transactionId))
143143
{
144-
throw new InvalidOperationException($"Fee with Id [{calculatedFee.FeeId}] has already been added to this days pending settlement");
144+
throw new InvalidOperationException($"Fee with Id [{calculatedFee.FeeId}] for Transaction Id [{transactionId}] has already been added to this days pending settlement");
145145
}
146146
}
147147

TransactionProcessor.Testing/TestData.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ public class TestData
7272

7373
public static Guid TransactionId = Guid.Parse("AE89B2F6-307B-46F4-A8E7-CEF27097D766");
7474

75+
public static Guid TransactionId2 = Guid.Parse("760E702C-682E-41B1-A582-3D4ECA0F38C3");
76+
7577
public static Guid PendingSettlementAggregateId = Guid.Parse("BAEBA232-CD7F-46F5-AE2E-3204FE69A441");
7678

7779
public static String TransactionNumber = "0001";

0 commit comments

Comments
 (0)