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
152 changes: 88 additions & 64 deletions TransactionProcessor.Aggregates.Tests/VoucherAggregateTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using Shouldly;
using SimpleResults;
using TransactionProcessor.Models;
using TransactionProcessor.Testing;

namespace TransactionProcessor.Aggregates.Tests;
Expand All @@ -17,9 +19,10 @@ public void VoucherAggregate_CanBeCreated_IsCreated()
public void VoucherAggregate_Generate_VoucherIsGenerated()
{
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);
aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);

var voucher = aggregate.GetVoucher();
Result result = aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);
result.IsSuccess.ShouldBeTrue();

Voucher voucher = aggregate.GetVoucher();

voucher.IsGenerated.ShouldBeTrue();
voucher.EstateId.ShouldBe(TestData.EstateId);
Expand All @@ -35,10 +38,8 @@ public void VoucherAggregate_Generate_VoucherAlreadyGenerated_ErrorThrown()
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);
aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);

Should.Throw<InvalidOperationException>(() =>
{
aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);
});
Result result = aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);
result.IsSuccess.ShouldBeTrue();
}

[Fact]
Expand All @@ -47,32 +48,48 @@ public void VoucherAggregate_Generate_VoucherAlreadyIssued_ErrorThrown()
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);
aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);
aggregate.Issue(TestData.RecipientEmail, TestData.RecipientMobile, TestData.IssuedDateTime);
Should.Throw<InvalidOperationException>(() =>
{
aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.IssuedDateTime, TestData.Value);
});
var result = aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.IssuedDateTime, TestData.Value);
result.IsSuccess.ShouldBeTrue();
}

[Fact]
public void VoucherAggregate_Generate_InvalidOperatorIdentifier_ErrorIsThrown()
{
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);

Should.Throw<ArgumentNullException>(() =>
{
aggregate.Generate(Guid.Empty, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);
});
Result result = aggregate.Generate(Guid.Empty, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
[Fact]
public void VoucherAggregate_Generate_InvalidTransactionIdentifier_ErrorIsThrown()
{
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);

Result result = aggregate.Generate(TestData.OperatorId, TestData.EstateId, Guid.Empty, TestData.GeneratedDateTime, TestData.Value);
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
public void VoucherAggregate_Generate_InvalidGeneratedDateTime_ErrorIsThrown()
{
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);

Result result = aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, DateTime.MinValue, TestData.Value);
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
public void VoucherAggregate_Generate_InvalidEstateId_ErrorIsThrown()
{
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);

Should.Throw<ArgumentNullException>(() =>
{
aggregate.Generate(TestData.OperatorId, Guid.Empty, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);
});
Result result = aggregate.Generate(TestData.OperatorId, Guid.Empty, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Theory]
Expand All @@ -82,19 +99,20 @@ public void VoucherAggregate_Generate_InvalidValue_ErrorIsThrown(Decimal value)
{
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);

Should.Throw<ArgumentOutOfRangeException>(() =>
{
aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, value);
});
Result result = aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, value);
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
public void VoucherAggregate_Issue_VoucherIsIssued()
{
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);
aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);
aggregate.Issue(TestData.RecipientEmail, TestData.RecipientMobile, TestData.IssuedDateTime);
var voucher = aggregate.GetVoucher();
Result result = aggregate.Issue(TestData.RecipientEmail, TestData.RecipientMobile, TestData.IssuedDateTime);
result.IsSuccess.ShouldBeTrue();

Voucher voucher = aggregate.GetVoucher();
voucher.IsIssued.ShouldBeTrue();
}

Expand All @@ -103,22 +121,20 @@ public void VoucherAggregate_Issue_VoucherNotGenerated_ErrorThrown()
{
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);

Should.Throw<InvalidOperationException>(() =>
{
aggregate.Issue(TestData.RecipientEmail, TestData.RecipientMobile, TestData.IssuedDateTime);
});
Result result = aggregate.Issue(TestData.RecipientEmail, TestData.RecipientMobile, TestData.IssuedDateTime);
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
public void VoucherAggregate_Issue_VoucherAlreadyIssued_ErrorThrown()
{
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);
aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);
aggregate.Issue(TestData.RecipientEmail, TestData.RecipientMobile, TestData.IssuedDateTime);

Should.Throw<InvalidOperationException>(() =>
{
aggregate.Issue(TestData.RecipientEmail, TestData.RecipientMobile, TestData.IssuedDateTime);
});
Result result = aggregate.Issue(TestData.RecipientEmail, TestData.RecipientMobile, TestData.IssuedDateTime);
result.IsSuccess.ShouldBeTrue();
}

[Theory]
Expand All @@ -130,45 +146,54 @@ public void VoucherAggregate_Issue_EitherEmailOrMobileIsRequired_ErrorThrown(Str
{
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);
aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);
Should.Throw<ArgumentNullException>(() =>
{
aggregate.Issue(recipientEmail, recipientMobile, TestData.IssuedDateTime);
});
Result result = aggregate.Issue(recipientEmail, recipientMobile, TestData.IssuedDateTime);
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
public void VoucherAggregate_AddBarcode_BarcodeIsAdded()
{
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);
aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);
aggregate.AddBarcode(TestData.Barcode);
var voucher = aggregate.GetVoucher();
Result result = aggregate.AddBarcode(TestData.Barcode);
result.IsSuccess.ShouldBeTrue();

Voucher voucher = aggregate.GetVoucher();
voucher.Barcode.ShouldBe(TestData.Barcode);
}

[Theory]
[InlineData(null)]
[InlineData("")]
public void VoucherAggregate_AddBarcode_InvalidBarcode_ErrorThrown(String barcode)
{
public void VoucherAggregate_AddBarcode_InvalidBarcode_ErrorThrown(String barcode) {
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);
aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);

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

[Fact]
public void VoucherAggregate_AddBarcode_VoucherNotGenerated_ErrorThrown()
{
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);

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

[Fact]
public void VoucherAggregate_AddBarcode_AlreadyIssued_ErrorThrown() {
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);
aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);
aggregate.Issue(TestData.RecipientEmail, TestData.RecipientMobile, TestData.IssuedDateTime);

Result result = aggregate.AddBarcode(TestData.Barcode);
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
Expand All @@ -188,22 +213,21 @@ public void VoucherAggregate_Redeem_VoucherNotGenerated_ErrorThrown()
{
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);

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

[Fact]
public void VoucherAggregate_Redeem_VoucherNotIssued_ErrorThrown()
{
Aggregates.VoucherAggregate aggregate = Aggregates.VoucherAggregate.Create(TestData.VoucherId);
aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);
Should.Throw<InvalidOperationException>(() =>
{
aggregate.Redeem(TestData.RedeemedDateTime);
});
}

Result result = aggregate.Redeem(TestData.RedeemedDateTime);
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}

[Fact]
public void VoucherAggregate_Redeem_VoucherAlreadyRedeemed_ErrorThrown()
Expand All @@ -212,9 +236,9 @@ public void VoucherAggregate_Redeem_VoucherAlreadyRedeemed_ErrorThrown()
aggregate.Generate(TestData.OperatorId, TestData.EstateId, TestData.TransactionId, TestData.GeneratedDateTime, TestData.Value);
aggregate.Issue(TestData.RecipientEmail, TestData.RecipientMobile, TestData.IssuedDateTime);
aggregate.Redeem(TestData.RedeemedDateTime);
Should.Throw<InvalidOperationException>(() =>
{
aggregate.Redeem(TestData.RedeemedDateTime);
});

Result result = aggregate.Redeem(TestData.RedeemedDateTime);
result.IsFailed.ShouldBeTrue();
result.Status.ShouldBe(ResultStatus.Invalid);
}
}
Loading
Loading