Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 72 additions & 36 deletions TransactionProcessor.Aggregates.Tests/SettlementAggregateTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Shouldly;
using SimpleResults;
using TransactionProcessor.Testing;

namespace TransactionProcessor.Aggregates.Tests
Expand All @@ -17,7 +18,9 @@ public void SettlementAggregate_CanBeCreated_IsCreated()
public void PendingSettlementAggregate_Create_AggregateIsCreated()
{
SettlementAggregate aggregate = SettlementAggregate.Create(TestData.SettlementAggregateId);
aggregate.Create(TestData.EstateId,TestData.MerchantId, TestData.SettlementDate);
Result result = aggregate.Create(TestData.EstateId,TestData.MerchantId, TestData.SettlementDate);
result.IsSuccess.ShouldBeTrue();

aggregate.EstateId.ShouldBe(TestData.EstateId);
aggregate.SettlementDate.ShouldBe(TestData.SettlementDate.Date);
aggregate.IsCreated.ShouldBeTrue();
Expand All @@ -30,10 +33,8 @@ public void SettlementAggregate_Create_AlreadyCreated_ErrorThrown()
SettlementAggregate aggregate = SettlementAggregate.Create(TestData.SettlementAggregateId);
aggregate.Create(TestData.EstateId, TestData.MerchantId, TestData.SettlementDate);

Should.Throw<InvalidOperationException>(() =>
{
aggregate.Create(TestData.EstateId, TestData.MerchantId, TestData.SettlementDate);
});
Result result = aggregate.Create(TestData.EstateId, TestData.MerchantId, TestData.SettlementDate);
result.IsSuccess.ShouldBeTrue();
}

[Fact]
Expand Down Expand Up @@ -84,16 +85,12 @@ public void SettlementAggregate_AddFee_TwoFeesAdded_SameFeeIdDifferentTransactio
}

[Fact]
public void SettlementAggregate_AddFee_AggregateNotCreated_ErrorThrown()
{
public void SettlementAggregate_AddFee_AggregateNotCreated_ErrorThrown() {
SettlementAggregate aggregate = SettlementAggregate.Create(TestData.SettlementAggregateId);

Should.Throw<InvalidOperationException>(() =>
{
aggregate.AddFee(TestData.MerchantId,
TestData.TransactionId,
TestData.CalculatedFeeMerchantFee());
});
Result result = aggregate.AddFee(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee());
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
Expand Down Expand Up @@ -129,10 +126,41 @@ public void SettlementAggregate_AddFee_InvalidFeeType_ErrorThrown()
{
SettlementAggregate aggregate = SettlementAggregate.Create(TestData.SettlementAggregateId);
aggregate.Create(TestData.EstateId, TestData.MerchantId, TestData.SettlementDate);
Should.Throw<InvalidOperationException>(() =>
{
aggregate.AddFee(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeServiceProviderFee());
});
Result result = aggregate.AddFee(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeServiceProviderFee());
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
public void SettlementAggregate_AddFee_InvalidMerchantId_ErrorThrown() {
SettlementAggregate aggregate = SettlementAggregate.Create(TestData.SettlementAggregateId);
aggregate.Create(TestData.EstateId, TestData.MerchantId, TestData.SettlementDate);

Result result = aggregate.AddFee(Guid.Empty, TestData.TransactionId, TestData.CalculatedFeeMerchantFee());
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
public void SettlementAggregate_AddFee_InvalidTransactionId_ErrorThrown()
{
SettlementAggregate aggregate = SettlementAggregate.Create(TestData.SettlementAggregateId);
aggregate.Create(TestData.EstateId, TestData.MerchantId, TestData.SettlementDate);

Result result = aggregate.AddFee(TestData.MerchantId, Guid.Empty, TestData.CalculatedFeeMerchantFee());
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
public void SettlementAggregate_AddFee_InvalidFee_ErrorThrown()
{
SettlementAggregate aggregate = SettlementAggregate.Create(TestData.SettlementAggregateId);
aggregate.Create(TestData.EstateId, TestData.MerchantId, TestData.SettlementDate);

Result result = aggregate.AddFee(TestData.MerchantId, TestData.TransactionId, null);
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
Expand All @@ -144,7 +172,8 @@ public void SettlementAggregate_MarkFeeAsSettled_FeeIsSettledAndSettlementComple

aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(1);

aggregate.MarkFeeAsSettled(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee().FeeId, TestData.SettlementDate);
Result result = aggregate.MarkFeeAsSettled(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee().FeeId, TestData.SettlementDate);
result.IsSuccess.ShouldBeTrue();

aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(0);
aggregate.GetNumberOfFeesSettled().ShouldBe(1);
Expand All @@ -161,7 +190,8 @@ public void SettlementAggregate_MarkFeeAsSettled_FeeIsSettled_SettlementNotCompl

aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(2);

aggregate.MarkFeeAsSettled(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee().FeeId, TestData.SettlementDate);
Result result = aggregate.MarkFeeAsSettled(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee().FeeId, TestData.SettlementDate);
result.IsSuccess.ShouldBeTrue();

aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(1);
aggregate.GetNumberOfFeesSettled().ShouldBe(1);
Expand All @@ -174,7 +204,8 @@ public void SettlementAggregate_MarkFeeAsSettled_PendingFeeNotFound_NoErrorThrow
SettlementAggregate aggregate = SettlementAggregate.Create(TestData.SettlementAggregateId);
aggregate.Create(TestData.EstateId, TestData.MerchantId, TestData.SettlementDate);

aggregate.MarkFeeAsSettled(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee().FeeId, TestData.SettlementDate);
Result result = aggregate.MarkFeeAsSettled(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee().FeeId, TestData.SettlementDate);
result.IsSuccess.ShouldBeTrue();

aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(0);
aggregate.GetNumberOfFeesSettled().ShouldBe(0);
Expand All @@ -189,7 +220,8 @@ public void SettlementAggregate_MarkFeeAsSettled_FeeAlreadySettled_NoErrorThrown

aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(1);

aggregate.MarkFeeAsSettled(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee().FeeId, TestData.SettlementDate);
Result result = aggregate.MarkFeeAsSettled(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee().FeeId, TestData.SettlementDate);
result.IsSuccess.ShouldBeTrue();

aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(0);
aggregate.GetNumberOfFeesSettled().ShouldBe(1);
Expand All @@ -206,7 +238,8 @@ public void SettlementAggregate_ImmediatelyMarkFeeAsSettled_FeeIsSettledAndSettl

aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(1);

aggregate.ImmediatelyMarkFeeAsSettled(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee().FeeId);
Result result = aggregate.ImmediatelyMarkFeeAsSettled(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee().FeeId);
result.IsSuccess.ShouldBeTrue();

aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(0);
aggregate.GetNumberOfFeesSettled().ShouldBe(1);
Expand All @@ -222,8 +255,9 @@ public void SettlementAggregate_ImmediatelyMarkFeeAsSettled_FeeIsAlreadySettled(

aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(1);

aggregate.ImmediatelyMarkFeeAsSettled(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee().FeeId);

Result result = aggregate.ImmediatelyMarkFeeAsSettled(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee().FeeId);
result.IsSuccess.ShouldBeTrue();

aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(0);
aggregate.GetNumberOfFeesSettled().ShouldBe(1);
aggregate.SettlementComplete.ShouldBeFalse();
Expand All @@ -234,7 +268,8 @@ public void SettlementAggregate_StartProcessing_ProcessingStarted()
{
SettlementAggregate aggregate = SettlementAggregate.Create(TestData.SettlementAggregateId);
aggregate.Create(TestData.EstateId, TestData.MerchantId, TestData.SettlementDate);
aggregate.StartProcessing(TestData.SettlementProcessingStartedDateTime);
Result result = aggregate.StartProcessing(TestData.SettlementProcessingStartedDateTime);
result.IsSuccess.ShouldBeTrue();

aggregate.ProcessingStarted.ShouldBeTrue();
aggregate.ProcessingStartedDateTime.ShouldBe(TestData.SettlementProcessingStartedDateTime);
Expand All @@ -245,20 +280,22 @@ public void SettlementAggregate_StartProcessing_CalledTwice_ProcessingStarted(){
SettlementAggregate aggregate = SettlementAggregate.Create(TestData.SettlementAggregateId);
aggregate.Create(TestData.EstateId, TestData.MerchantId, TestData.SettlementDate);
aggregate.StartProcessing(TestData.SettlementProcessingStartedDateTime);
aggregate.StartProcessing(TestData.SettlementProcessingStartedDateTimeSecondCall);
Result result = aggregate.StartProcessing(TestData.SettlementProcessingStartedDateTimeSecondCall);

aggregate.ProcessingStarted.ShouldBeTrue();
aggregate.ProcessingStartedDateTime.ShouldBe(TestData.SettlementProcessingStartedDateTimeSecondCall);
result.IsSuccess.ShouldBeTrue();

aggregate.ProcessingStarted.ShouldBeTrue();
aggregate.ProcessingStartedDateTime.ShouldBe(TestData.SettlementProcessingStartedDateTime);
}

[Fact]
public void SettlementAggregate_StartProcessing_SettlementNotCreated_ErrorThron()
{
SettlementAggregate aggregate = SettlementAggregate.Create(TestData.SettlementAggregateId);

Should.Throw<InvalidOperationException>(() => {
aggregate.StartProcessing(TestData.SettlementProcessingStartedDateTime);
});
Result result = aggregate.StartProcessing(TestData.SettlementProcessingStartedDateTime);
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
Expand All @@ -285,13 +322,12 @@ public void SettlementAggregate_ManuallyComplete_CalledTwice_SettlementCompleted
}

[Fact]
public void SettlementAggregate_ManuallyComplete_SettlementNotCreated_ErrorThron()
{
public void SettlementAggregate_ManuallyComplete_SettlementNotCreated_ErrorThron() {
SettlementAggregate aggregate = SettlementAggregate.Create(TestData.SettlementAggregateId);

Should.Throw<InvalidOperationException>(() => {
aggregate.ManuallyComplete();
});
Result result = aggregate.ManuallyComplete();
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
Expand Down
Loading
Loading