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
136 changes: 59 additions & 77 deletions TransactionProcessor.Aggregates.Tests/ReconciliationAggregateTests.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 @@ -18,9 +19,10 @@ public void ReconciliationAggregate_StartReconciliation_ReconciliationIsStarted(
{
Aggregates.ReconciliationAggregate reconciliationAggregate = Aggregates.ReconciliationAggregate.Create(TestData.TransactionId);

reconciliationAggregate.StartReconciliation(TestData.TransactionDateTime, TestData.EstateId, TestData.MerchantId);
Result result = reconciliationAggregate.StartReconciliation(TestData.TransactionDateTime, TestData.EstateId, TestData.MerchantId);
result.IsSuccess.ShouldBeTrue();

reconciliationAggregate.IsStarted.ShouldBeTrue();
reconciliationAggregate.HasBeenStarted.ShouldBeTrue();
reconciliationAggregate.EstateId.ShouldBe(TestData.EstateId);
reconciliationAggregate.MerchantId.ShouldBe(TestData.MerchantId);
}
Expand All @@ -33,26 +35,26 @@ public void ReconciliationAggregate_StartReconciliation_InvalidData_ErrorThrown(
Boolean validEstateId,
Boolean validMerchantId)
{
Aggregates.ReconciliationAggregate reconciliationAggregate = Aggregates.ReconciliationAggregate.Create(TestData.TransactionId);
ReconciliationAggregate reconciliationAggregate = ReconciliationAggregate.Create(TestData.TransactionId);

DateTime transactionDateTime = validDateTime ? TestData.TransactionDateTime : DateTime.MinValue;
Guid estateId = validEstateId ? TestData.EstateId : Guid.Empty;
Guid merchantId = validMerchantId ? TestData.MerchantId : Guid.Empty;

Should.Throw<ArgumentException>(() => { reconciliationAggregate.StartReconciliation(transactionDateTime, estateId, merchantId); });
Result result = reconciliationAggregate.StartReconciliation(transactionDateTime, estateId, merchantId);
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
public void ReconciliationAggregate_StartReconciliation_ReconciliationAlreadyStarted_ErrorThrown()
public void ReconciliationAggregate_StartReconciliation_ReconciliationAlreadyStarted_NoErrorThrown()
{
Aggregates.ReconciliationAggregate reconciliationAggregate = Aggregates.ReconciliationAggregate.Create(TestData.TransactionId);

reconciliationAggregate.StartReconciliation(TestData.TransactionDateTime, TestData.EstateId, TestData.MerchantId);

Should.Throw<InvalidOperationException>(() =>
{
reconciliationAggregate.StartReconciliation(TestData.TransactionDateTime, TestData.EstateId, TestData.MerchantId);
});
Result result = reconciliationAggregate.StartReconciliation(TestData.TransactionDateTime, TestData.EstateId, TestData.MerchantId);
result.IsSuccess.ShouldBeTrue();
}

[Fact]
Expand All @@ -65,52 +67,48 @@ public void ReconciliationAggregate_StartReconciliation_ReconciliationAlreadyCom
reconciliationAggregate.Authorise(TestData.ResponseCode, TestData.ResponseMessage);
reconciliationAggregate.CompleteReconciliation();

Should.Throw<InvalidOperationException>(() =>
{
reconciliationAggregate.StartReconciliation(TestData.TransactionDateTime, TestData.EstateId, TestData.MerchantId);
});
Result result = reconciliationAggregate.StartReconciliation(TestData.TransactionDateTime, TestData.EstateId, TestData.MerchantId);
result.IsSuccess.ShouldBeTrue();
}


[Fact]
public void ReconciliationAggregate_RecordOverallTotals_OverallTotalsAreRecorded()
{
Aggregates.ReconciliationAggregate reconciliationAggregate = Aggregates.ReconciliationAggregate.Create(TestData.TransactionId);

reconciliationAggregate.StartReconciliation(TestData.TransactionDateTime, TestData.EstateId, TestData.MerchantId);
reconciliationAggregate.RecordOverallTotals(TestData.ReconciliationTransactionCount, TestData.ReconciliationTransactionValue);

Result result = reconciliationAggregate.RecordOverallTotals(TestData.ReconciliationTransactionCount, TestData.ReconciliationTransactionValue);
result.IsSuccess.ShouldBeTrue();

reconciliationAggregate.TransactionCount.ShouldBe(TestData.ReconciliationTransactionCount);
reconciliationAggregate.TransactionValue.ShouldBe(TestData.ReconciliationTransactionValue);
}

[Fact]
public void ReconciliationAggregate_RecordOverallTotals_ReconciliationNotStarted_ErrorThrown()
{
Aggregates.ReconciliationAggregate reconciliationAggregate = Aggregates.ReconciliationAggregate.Create(TestData.TransactionId);
ReconciliationAggregate reconciliationAggregate = ReconciliationAggregate.Create(TestData.TransactionId);

Should.Throw<InvalidOperationException>(() =>
{
reconciliationAggregate.RecordOverallTotals(TestData.ReconciliationTransactionCount,
Result result = reconciliationAggregate.RecordOverallTotals(TestData.ReconciliationTransactionCount,
TestData.ReconciliationTransactionValue);
});
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
public void ReconciliationAggregate_RecordOverallTotals_ReconciliationAlreadyCompleted_ErrorThrown()
{
Aggregates.ReconciliationAggregate reconciliationAggregate = Aggregates.ReconciliationAggregate.Create(TestData.TransactionId);
ReconciliationAggregate reconciliationAggregate = ReconciliationAggregate.Create(TestData.TransactionId);

reconciliationAggregate.StartReconciliation(TestData.TransactionDateTime, TestData.EstateId, TestData.MerchantId);
reconciliationAggregate.RecordOverallTotals(TestData.ReconciliationTransactionCount, TestData.ReconciliationTransactionValue);
reconciliationAggregate.Authorise(TestData.ResponseCode, TestData.ResponseMessage);
reconciliationAggregate.CompleteReconciliation();

Should.Throw<InvalidOperationException>(() =>
{
reconciliationAggregate.RecordOverallTotals(TestData.ReconciliationTransactionCount,
Result result = reconciliationAggregate.RecordOverallTotals(TestData.ReconciliationTransactionCount,
TestData.ReconciliationTransactionValue);
});
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
Expand All @@ -120,7 +118,8 @@ public void ReconciliationAggregate_Authorise_ReconciliationIsAuthorised()

reconciliationAggregate.StartReconciliation(TestData.TransactionDateTime, TestData.EstateId, TestData.MerchantId);
reconciliationAggregate.RecordOverallTotals(TestData.ReconciliationTransactionCount, TestData.ReconciliationTransactionValue);
reconciliationAggregate.Authorise(TestData.ResponseCode, TestData.ResponseMessage);
Result result = reconciliationAggregate.Authorise(TestData.ResponseCode, TestData.ResponseMessage);
result.IsSuccess.ShouldBeTrue();

reconciliationAggregate.ResponseCode.ShouldBe(TestData.ResponseCode);
reconciliationAggregate.ResponseMessage.ShouldBe(TestData.ResponseMessage);
Expand All @@ -132,25 +131,22 @@ public void ReconciliationAggregate_Authorise_ReconciliationNotStarted_ErrorThro
{
Aggregates.ReconciliationAggregate reconciliationAggregate = Aggregates.ReconciliationAggregate.Create(TestData.TransactionId);

Should.Throw<InvalidOperationException>(() =>
{
reconciliationAggregate.Authorise(TestData.ResponseCode, TestData.ResponseMessage);
});
Result result = reconciliationAggregate.Authorise(TestData.ResponseCode, TestData.ResponseMessage);
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
public void ReconciliationAggregate_Authorise_ReconciliationAlreadyAuthorised_ErrorThrown()
public void ReconciliationAggregate_Authorise_ReconciliationAlreadyAuthorised_NoErrorThrown()
{
Aggregates.ReconciliationAggregate reconciliationAggregate = Aggregates.ReconciliationAggregate.Create(TestData.TransactionId);

reconciliationAggregate.StartReconciliation(TestData.TransactionDateTime, TestData.EstateId, TestData.MerchantId);
reconciliationAggregate.RecordOverallTotals(TestData.ReconciliationTransactionCount, TestData.ReconciliationTransactionValue);
reconciliationAggregate.Authorise(TestData.ResponseCode, TestData.ResponseMessage);

Should.Throw<InvalidOperationException>(() =>
{
reconciliationAggregate.Authorise(TestData.ResponseCode, TestData.ResponseMessage);
});
Result result = reconciliationAggregate.Authorise(TestData.ResponseCode, TestData.ResponseMessage);
result.IsSuccess.ShouldBeTrue();
}

[Fact]
Expand All @@ -162,10 +158,8 @@ public void ReconciliationAggregate_Authorise_ReconciliationAlreadyDeclined_Erro
reconciliationAggregate.RecordOverallTotals(TestData.ReconciliationTransactionCount, TestData.ReconciliationTransactionValue);
reconciliationAggregate.Decline(TestData.ResponseCode, TestData.ResponseMessage);

Should.Throw<InvalidOperationException>(() =>
{
reconciliationAggregate.Authorise(TestData.ResponseCode, TestData.ResponseMessage);
});
Result result = reconciliationAggregate.Authorise(TestData.ResponseCode, TestData.ResponseMessage);
result.IsSuccess.ShouldBeTrue();
}

[Fact]
Expand All @@ -178,10 +172,8 @@ public void ReconciliationAggregate_Authorise_ReconciliationAlreadyCompleted_Err
reconciliationAggregate.Authorise(TestData.ResponseCode, TestData.ResponseMessage);
reconciliationAggregate.CompleteReconciliation();

Should.Throw<InvalidOperationException>(() =>
{
reconciliationAggregate.Authorise(TestData.ResponseCode, TestData.ResponseMessage);
});
Result result = reconciliationAggregate.Authorise(TestData.ResponseCode, TestData.ResponseMessage);
result.IsSuccess.ShouldBeTrue();
}

[Fact]
Expand All @@ -191,7 +183,8 @@ public void ReconciliationAggregate_Decline_ReconciliationIsDeclined()

reconciliationAggregate.StartReconciliation(TestData.TransactionDateTime, TestData.EstateId, TestData.MerchantId);
reconciliationAggregate.RecordOverallTotals(TestData.ReconciliationTransactionCount, TestData.ReconciliationTransactionValue);
reconciliationAggregate.Decline(TestData.ResponseCode, TestData.ResponseMessage);
Result result = reconciliationAggregate.Decline(TestData.ResponseCode, TestData.ResponseMessage);
result.IsSuccess.ShouldBeTrue();

reconciliationAggregate.ResponseCode.ShouldBe(TestData.ResponseCode);
reconciliationAggregate.ResponseMessage.ShouldBe(TestData.ResponseMessage);
Expand All @@ -203,10 +196,9 @@ public void ReconciliationAggregate_Decline_ReconciliationNotStarted_ErrorThrown
{
Aggregates.ReconciliationAggregate reconciliationAggregate = Aggregates.ReconciliationAggregate.Create(TestData.TransactionId);

Should.Throw<InvalidOperationException>(() =>
{
reconciliationAggregate.Decline(TestData.ResponseCode, TestData.ResponseMessage);
});
Result result = reconciliationAggregate.Decline(TestData.ResponseCode, TestData.ResponseMessage);
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
Expand All @@ -218,29 +210,25 @@ public void ReconciliationAggregate_Decline_ReconciliationAlreadyAuthorised_Erro
reconciliationAggregate.RecordOverallTotals(TestData.ReconciliationTransactionCount, TestData.ReconciliationTransactionValue);
reconciliationAggregate.Authorise(TestData.ResponseCode, TestData.ResponseMessage);

Should.Throw<InvalidOperationException>(() =>
{
reconciliationAggregate.Decline(TestData.ResponseCode, TestData.ResponseMessage);
});
Result result = reconciliationAggregate.Decline(TestData.ResponseCode, TestData.ResponseMessage);
result.IsSuccess.ShouldBeTrue();
}

[Fact]
public void ReconciliationAggregate_Decline_ReconciliationAlreadyDecline_ErrorThrown()
public void ReconciliationAggregate_Decline_ReconciliationAlreadyDecline_NoErrorThrown()
{
Aggregates.ReconciliationAggregate reconciliationAggregate = Aggregates.ReconciliationAggregate.Create(TestData.TransactionId);

reconciliationAggregate.StartReconciliation(TestData.TransactionDateTime, TestData.EstateId, TestData.MerchantId);
reconciliationAggregate.RecordOverallTotals(TestData.ReconciliationTransactionCount, TestData.ReconciliationTransactionValue);
reconciliationAggregate.Decline(TestData.ResponseCode, TestData.ResponseMessage);

Should.Throw<InvalidOperationException>(() =>
{
reconciliationAggregate.Decline(TestData.ResponseCode, TestData.ResponseMessage);
});
Result result = reconciliationAggregate.Decline(TestData.ResponseCode, TestData.ResponseMessage);
result.IsSuccess.ShouldBeTrue();
}

[Fact]
public void ReconciliationAggregate_Decline_ReconciliationAlreadyCompleted_ErrorThrown()
public void ReconciliationAggregate_Decline_ReconciliationAlreadyCompleted_NoErrorThrown()
{
Aggregates.ReconciliationAggregate reconciliationAggregate = Aggregates.ReconciliationAggregate.Create(TestData.TransactionId);

Expand All @@ -249,10 +237,8 @@ public void ReconciliationAggregate_Decline_ReconciliationAlreadyCompleted_Error
reconciliationAggregate.Decline(TestData.ResponseCode, TestData.ResponseMessage);
reconciliationAggregate.CompleteReconciliation();

Should.Throw<InvalidOperationException>(() =>
{
reconciliationAggregate.Decline(TestData.ResponseCode, TestData.ResponseMessage);
});
Result result = reconciliationAggregate.Decline(TestData.ResponseCode, TestData.ResponseMessage);
result.IsSuccess.ShouldBeTrue();
}

[Theory]
Expand All @@ -273,22 +259,21 @@ public void ReconciliationAggregate_CompleteReconciliation_ReconciliationIsCompl
reconciliationAggregate.Decline(TestData.ResponseCode, TestData.ResponseMessage);
}

reconciliationAggregate.CompleteReconciliation();
Result result = reconciliationAggregate.CompleteReconciliation();
result.IsSuccess.ShouldBeTrue();

reconciliationAggregate.IsAuthorised.ShouldBe(isAuthorised);
reconciliationAggregate.IsCompleted.ShouldBeTrue();
reconciliationAggregate.IsStarted.ShouldBeFalse();
}

[Fact]
public void ReconciliationAggregate_CompleteReconciliation_ReconciliationNotStarted_ErrorThrown()
{
Aggregates.ReconciliationAggregate reconciliationAggregate = Aggregates.ReconciliationAggregate.Create(TestData.TransactionId);

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

[Fact]
Expand All @@ -299,10 +284,9 @@ public void ReconciliationAggregate_CompleteReconciliation_NotAuthorisedOrDeclin
reconciliationAggregate.StartReconciliation(TestData.TransactionDateTime, TestData.EstateId, TestData.MerchantId);
reconciliationAggregate.RecordOverallTotals(TestData.ReconciliationTransactionCount, TestData.ReconciliationTransactionValue);

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

[Theory]
Expand All @@ -325,10 +309,8 @@ public void ReconciliationAggregate_CompleteReconciliation_ReconciliationAlready

reconciliationAggregate.CompleteReconciliation();

Should.Throw<InvalidOperationException>(() =>
{
reconciliationAggregate.CompleteReconciliation();
});
Result result = reconciliationAggregate.CompleteReconciliation();
result.IsSuccess.ShouldBeTrue();
}
}
}
Loading
Loading