diff --git a/Directory.Packages.props b/Directory.Packages.props
index e7e206e8..f54e1863 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -43,7 +43,7 @@
-
+
diff --git a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/ContractDomainEventHandlerTests.cs b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/ContractDomainEventHandlerTests.cs
index 6600901f..22ed198b 100644
--- a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/ContractDomainEventHandlerTests.cs
+++ b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/ContractDomainEventHandlerTests.cs
@@ -1,4 +1,5 @@
-using Moq;
+using TransactionProcessor.BusinessLogic.Tests;
+using Imposter.Abstractions;
using Shared.Logger;
using Shared.Serialisation;
using Shouldly;
@@ -17,14 +18,14 @@ public class ContractDomainEventHandlerTests
#region Methods
- private Mock EstateReportingRepository;
+ private ITransactionProcessorReadModelRepositoryImposter EstateReportingRepository;
private ReadModelDomainEventHandler DomainEventHandler;
public ContractDomainEventHandlerTests() {
Logger.Initialise(NullLogger.Instance);
StringSerialiser.Initialise(new Shared.Serialisation.SystemTextJsonSerializer(new System.Text.Json.JsonSerializerOptions()));
- this.EstateReportingRepository= new Mock();
- this.DomainEventHandler = new ReadModelDomainEventHandler(this.EstateReportingRepository.Object);
+ this.EstateReportingRepository= new ITransactionProcessorReadModelRepositoryImposter();
+ this.DomainEventHandler = new ReadModelDomainEventHandler(this.EstateReportingRepository.Instance());
}
[Fact]
diff --git a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/EstateDomainEventHandlerTests.cs b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/EstateDomainEventHandlerTests.cs
index 6ecf4946..f68a88ae 100644
--- a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/EstateDomainEventHandlerTests.cs
+++ b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/EstateDomainEventHandlerTests.cs
@@ -1,4 +1,4 @@
-using Moq;
+using Imposter.Abstractions;
using Shared.Logger;
using Shared.Serialisation;
using Shouldly;
@@ -18,7 +18,7 @@ public class EstateDomainEventHandlerTests
{
#region Methods
- private Mock EstateReportingRepository;
+ private ITransactionProcessorReadModelRepositoryImposter EstateReportingRepository;
private ReadModelDomainEventHandler DomainEventHandler;
@@ -26,17 +26,16 @@ public EstateDomainEventHandlerTests()
{
Logger.Initialise(NullLogger.Instance);
StringSerialiser.Initialise(new Shared.Serialisation.SystemTextJsonSerializer(new System.Text.Json.JsonSerializerOptions()));
- this.EstateReportingRepository = new Mock();
+ this.EstateReportingRepository = new ITransactionProcessorReadModelRepositoryImposter();
- this.DomainEventHandler = new ReadModelDomainEventHandler(this.EstateReportingRepository.Object);
+ this.DomainEventHandler = new ReadModelDomainEventHandler(this.EstateReportingRepository.Instance());
}
[Fact]
public void EstateDomainEventHandler_EstateCreatedEvent_EventIsHandled()
{
EstateDomainEvents.EstateCreatedEvent estateCreatedEvent = TestData.DomainEvents.EstateCreatedEvent;
- this.EstateReportingRepository
- .Setup(r => r.CreateReadModel(It.IsAny(), It.IsAny()))
- .ReturnsAsync(Result.Success);
+ this.EstateReportingRepository.CreateReadModel(Arg.Any(), Arg.Any())
+ .ReturnsAsync(Result.Success());
Should.NotThrow(async () => { await this.DomainEventHandler.Handle(estateCreatedEvent, TestContext.Current.CancellationToken); });
}
@@ -45,9 +44,8 @@ public void EstateDomainEventHandler_EstateCreatedEvent_EventIsHandled()
public async Task EstateDomainEventHandler_EstateCreatedEvent_CreateReadModelFailed_EventIsHandled()
{
EstateDomainEvents.EstateCreatedEvent estateCreatedEvent = TestData.DomainEvents.EstateCreatedEvent;
- this.EstateReportingRepository
- .Setup(r => r.CreateReadModel(It.IsAny(), It.IsAny()))
- .ReturnsAsync(Result.Failure);
+ this.EstateReportingRepository.CreateReadModel(Arg.Any(), Arg.Any())
+ .ReturnsAsync(Result.Failure());
Result result = await this.DomainEventHandler.Handle(estateCreatedEvent, TestContext.Current.CancellationToken);
result.IsFailed.ShouldBeTrue();
diff --git a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/MerchantDomainEventHandlerTests.cs b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/MerchantDomainEventHandlerTests.cs
index 3bfecd01..c3522cd4 100644
--- a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/MerchantDomainEventHandlerTests.cs
+++ b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/MerchantDomainEventHandlerTests.cs
@@ -1,8 +1,8 @@
using System;
using System.Threading;
using System.Threading.Tasks;
+using Imposter.Abstractions;
using MediatR;
-using Moq;
using Shared.DomainDrivenDesign.EventSourcing;
using Shared.EventStore.Aggregate;
using Shared.Logger;
@@ -22,22 +22,22 @@ namespace TransactionProcessor.BusinessLogic.Tests.DomainEventHandlers
{
public class MerchantDomainEventHandlerTests : DomainEventHandlerTests
{
- private readonly Mock TransactionProcessorReadModelRepository;
+ private readonly ITransactionProcessorReadModelRepositoryImposter TransactionProcessorReadModelRepository;
private readonly MerchantDomainEventHandler DomainEventHandler;
public MerchantDomainEventHandlerTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) {
- this.TransactionProcessorReadModelRepository = new Mock();
+ this.TransactionProcessorReadModelRepository = new ITransactionProcessorReadModelRepositoryImposter();
- this.DomainEventHandler = new MerchantDomainEventHandler(this.TransactionProcessorReadModelRepository.Object,
- this.Mediator.Object);
+ this.DomainEventHandler = new MerchantDomainEventHandler(this.TransactionProcessorReadModelRepository.Instance(),
+ this.Mediator.Instance());
}
[Fact]
public async Task MerchantDomainEventHandler_Handle_CallbackReceivedEnrichedEvent_Deposit_EventIsHandled()
{
- this.TransactionProcessorReadModelRepository.Setup(e => e.GetMerchantFromReference(It.IsAny(), It.IsAny(), It.IsAny()))
+ this.TransactionProcessorReadModelRepository.GetMerchantFromReference(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(TestData.MerchantModelWithAddressesContactsDevicesAndOperatorsAndContracts()));
- this.Mediator.Setup(m => m.Send(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success);
+ this.Mediator.Send(Arg>.Any(), Arg.Any()).ReturnsAsync(Result.Success());
CallbackReceivedEnrichedEvent domainEvent = TestData.DomainEvents.CallbackReceivedEnrichedEventDeposit;
var result = await this.DomainEventHandler.Handle(domainEvent, TestContext.Current.CancellationToken);
@@ -57,7 +57,7 @@ public async Task MerchantDomainEventHandler_Handle_CallbackReceivedEnrichedEven
[Fact]
public async Task MerchantDomainEventHandler_Handle_CallbackReceivedEnrichedEvent_Deposit_GetMerchantFailed_ResultIsFailure()
{
- this.TransactionProcessorReadModelRepository.Setup(e => e.GetMerchantFromReference(It.IsAny(), It.IsAny(), It.IsAny()))
+ this.TransactionProcessorReadModelRepository.GetMerchantFromReference(Arg.Any(), Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Failure());
CallbackReceivedEnrichedEvent domainEvent = TestData.DomainEvents.CallbackReceivedEnrichedEventDeposit;
diff --git a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/MerchantScheduleDomainEventHandlerTests.cs b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/MerchantScheduleDomainEventHandlerTests.cs
index b4f1af5f..06d89138 100644
--- a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/MerchantScheduleDomainEventHandlerTests.cs
+++ b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/MerchantScheduleDomainEventHandlerTests.cs
@@ -1,4 +1,4 @@
-using Moq;
+using Imposter.Abstractions;
using Shared.Logger;
using Shared.Serialisation;
using Shouldly;
@@ -16,43 +16,41 @@ namespace TransactionProcessor.BusinessLogic.Tests.DomainEventHandlers;
public class MerchantScheduleDomainEventHandlerTests
{
- private readonly Mock EstateReportingRepository;
+ private readonly ITransactionProcessorReadModelRepositoryImposter EstateReportingRepository;
private readonly ReadModelDomainEventHandler DomainEventHandler;
public MerchantScheduleDomainEventHandlerTests()
{
Logger.Initialise(NullLogger.Instance);
StringSerialiser.Initialise(new SystemTextJsonSerializer(new JsonSerializerOptions()));
- this.EstateReportingRepository = new Mock();
- this.DomainEventHandler = new ReadModelDomainEventHandler(this.EstateReportingRepository.Object);
+ this.EstateReportingRepository = new ITransactionProcessorReadModelRepositoryImposter();
+ this.DomainEventHandler = new ReadModelDomainEventHandler(this.EstateReportingRepository.Instance());
}
[Fact]
public async Task MerchantScheduleDomainEventHandler_MerchantScheduleCreatedEvent_EventIsHandled()
{
MerchantScheduleDomainEvents.MerchantScheduleCreatedEvent domainEvent = TestData.DomainEvents.MerchantScheduleCreatedEvent;
- this.EstateReportingRepository
- .Setup(r => r.AddMerchantSchedule(domainEvent, It.IsAny()))
- .ReturnsAsync(Result.Success);
+ this.EstateReportingRepository.AddMerchantSchedule(domainEvent, Arg.Any())
+ .ReturnsAsync(Result.Success());
Result result = await this.DomainEventHandler.Handle(domainEvent, TestContext.Current.CancellationToken);
result.IsSuccess.ShouldBeTrue();
- this.EstateReportingRepository.Verify(r => r.AddMerchantSchedule(domainEvent, It.IsAny()), Times.Once);
+ this.EstateReportingRepository.AddMerchantSchedule(domainEvent, Arg.Any()).Called(Count.Once());
}
[Fact]
public async Task MerchantScheduleDomainEventHandler_MerchantScheduleMonthUpdatedEvent_EventIsHandled()
{
MerchantScheduleDomainEvents.MerchantScheduleMonthUpdatedEvent domainEvent = TestData.DomainEvents.MerchantScheduleMonthUpdatedEvent;
- this.EstateReportingRepository
- .Setup(r => r.UpdateMerchantSchedule(domainEvent, It.IsAny()))
- .ReturnsAsync(Result.Success);
+ this.EstateReportingRepository.UpdateMerchantSchedule(domainEvent, Arg.Any())
+ .ReturnsAsync(Result.Success());
Result result = await this.DomainEventHandler.Handle(domainEvent, TestContext.Current.CancellationToken);
result.IsSuccess.ShouldBeTrue();
- this.EstateReportingRepository.Verify(r => r.UpdateMerchantSchedule(domainEvent, It.IsAny()), Times.Once);
+ this.EstateReportingRepository.UpdateMerchantSchedule(domainEvent, Arg.Any()).Called(Count.Once());
}
}
diff --git a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/MerchantStatementDomainEventHandlerTests.cs b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/MerchantStatementDomainEventHandlerTests.cs
index 8d6b34ac..f306a38f 100644
--- a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/MerchantStatementDomainEventHandlerTests.cs
+++ b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/MerchantStatementDomainEventHandlerTests.cs
@@ -4,8 +4,8 @@
using System.Threading.Tasks;
using EventStore.Client;
using Grpc.Core;
+using Imposter.Abstractions;
using MediatR;
-using Moq;
using Shared.Logger;
using Shouldly;
using SimpleResults;
@@ -20,14 +20,14 @@ public class MerchantStatementDomainEventHandlerTests : DomainEventHandlerTests
private readonly MerchantStatementDomainEventHandler EventHandler;
public MerchantStatementDomainEventHandlerTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper)
{
- this.EventHandler = new MerchantStatementDomainEventHandler(this.Mediator.Object);
+ this.EventHandler = new MerchantStatementDomainEventHandler(this.Mediator.Instance());
Logger.Initialise(new NullLogger());
}
[Fact]
public async Task MerchantStatementDomainEventHandler_Handle_StatementGeneratedEvent_EventIsHandled()
{
- this.Mediator.Setup(m => m.Send(It.IsAny>(), It.IsAny()))
+ this.Mediator.Send(Arg>.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
Result result = await this.EventHandler.Handle(TestData.DomainEvents.StatementGeneratedEvent, TestContext.Current.CancellationToken);
@@ -37,7 +37,7 @@ public async Task MerchantStatementDomainEventHandler_Handle_StatementGeneratedE
[Fact]
public async Task MerchantStatementDomainEventHandler_Handle_StatementBuiltEvent_EventIsHandled()
{
- this.Mediator.Setup(m => m.Send(It.IsAny>(), It.IsAny()))
+ this.Mediator.Send(Arg>.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
Result result = await this.EventHandler.Handle(TestData.DomainEvents.StatementBuiltEvent, TestContext.Current.CancellationToken);
@@ -47,7 +47,7 @@ public async Task MerchantStatementDomainEventHandler_Handle_StatementBuiltEvent
[Fact]
public async Task MerchantStatementDomainEventHandler_Handle_TransactionHasBeenCompletedEvent_EventIsHandled()
{
- this.Mediator.Setup(m => m.Send(It.IsAny>(), It.IsAny()))
+ this.Mediator.Send(Arg>.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
Result result = await this.EventHandler.Handle(TestData.DomainEvents.TransactionHasBeenCompletedEvent, TestContext.Current.CancellationToken);
@@ -59,36 +59,37 @@ public async Task MerchantStatementDomainEventHandler_Handle_TransactionHasBeenC
{
List errors = new() { "WrongExpectedVersion" };
- this.Mediator.SetupSequence(m => m.Send(It.IsAny>(), It.IsAny()))
+ this.Mediator.Send(Arg>.Any(), Arg.Any())
.ReturnsAsync(Result.Failure(errors))
+ .Then()
.ReturnsAsync(Result.Success());
Result result = await this.EventHandler.Handle(TestData.DomainEvents.TransactionHasBeenCompletedEvent, TestContext.Current.CancellationToken);
result.IsSuccess.ShouldBeTrue();
- this.Mediator.Verify(m => m.Send(It.IsAny>(), It.IsAny()), Times.Exactly(2));
+ this.Mediator.Send(Arg>.Any(), Arg.Any()).Called(Count.Exactly(2));
}
[Fact]
public async Task MerchantStatementDomainEventHandler_Handle_TransactionHasBeenCompletedEvent_WrongExpectedRetried_AllRetriesFailed()
{
List errors = new() { "WrongExpectedVersion" };
- this.Mediator.SetupSequence(m => m.Send(It.IsAny>(), It.IsAny()))
+ this.Mediator.Send(Arg>.Any(), Arg.Any())
.ReturnsAsync(Result.Failure(errors))
- .ReturnsAsync(Result.Failure(errors))
- .ReturnsAsync(Result.Failure(errors))
- .ReturnsAsync(Result.Failure(errors))
- .ReturnsAsync(Result.Failure(errors))
- .ReturnsAsync(Result.Failure(errors));
+ .Then().ReturnsAsync(Result.Failure(errors))
+ .Then().ReturnsAsync(Result.Failure(errors))
+ .Then().ReturnsAsync(Result.Failure(errors))
+ .Then().ReturnsAsync(Result.Failure(errors))
+ .Then().ReturnsAsync(Result.Failure(errors));
Result result = await this.EventHandler.Handle(TestData.DomainEvents.TransactionHasBeenCompletedEvent, TestContext.Current.CancellationToken);
result.IsFailed.ShouldBeTrue();
- this.Mediator.Verify(m => m.Send(It.IsAny>(), It.IsAny()), Times.Exactly(6));
+ this.Mediator.Send(Arg>.Any(), Arg.Any()).Called(Count.Exactly(6));
}
[Fact]
public async Task MerchantStatementDomainEventHandler_Handle_MerchantFeeSettledEvent_EventIsHandled()
{
- this.Mediator.Setup(m => m.Send(It.IsAny>(), It.IsAny()))
+ this.Mediator.Send(Arg>.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
Result result = await this.EventHandler.Handle(TestData.DomainEvents.MerchantFeeSettledEvent, TestContext.Current.CancellationToken);
@@ -100,36 +101,37 @@ public async Task MerchantStatementDomainEventHandler_Handle_MerchantFeeSettledE
{
List errors = new() { "WrongExpectedVersion" };
- this.Mediator.SetupSequence(m => m.Send(It.IsAny>(), It.IsAny()))
+ this.Mediator.Send(Arg>.Any(), Arg.Any())
.ReturnsAsync(Result.Failure(errors))
+ .Then()
.ReturnsAsync(Result.Success());
Result result = await this.EventHandler.Handle(TestData.DomainEvents.MerchantFeeSettledEvent, TestContext.Current.CancellationToken);
result.IsSuccess.ShouldBeTrue();
- this.Mediator.Verify(m => m.Send(It.IsAny>(), It.IsAny()), Times.Exactly(2));
+ this.Mediator.Send(Arg>.Any(), Arg.Any()).Called(Count.Exactly(2));
}
[Fact]
public async Task MerchantStatementDomainEventHandler_Handle_MerchantFeeSettledEvent_WrongExpectedRetried_AllRetriesFailed()
{
List errors = new() { "WrongExpectedVersion" };
- this.Mediator.SetupSequence(m => m.Send(It.IsAny>(), It.IsAny()))
- .ReturnsAsync(Result.Failure(errors))
- .ReturnsAsync(Result.Failure(errors))
- .ReturnsAsync(Result.Failure(errors))
- .ReturnsAsync(Result.Failure(errors))
+ this.Mediator.Send(Arg>.Any(), Arg.Any())
.ReturnsAsync(Result.Failure(errors))
- .ReturnsAsync(Result.Failure(errors));
+ .Then().ReturnsAsync(Result.Failure(errors))
+ .Then().ReturnsAsync(Result.Failure(errors))
+ .Then().ReturnsAsync(Result.Failure(errors))
+ .Then().ReturnsAsync(Result.Failure(errors))
+ .Then().ReturnsAsync(Result.Failure(errors));
Result result = await this.EventHandler.Handle(TestData.DomainEvents.MerchantFeeSettledEvent, TestContext.Current.CancellationToken);
result.IsFailed.ShouldBeTrue();
- this.Mediator.Verify(m => m.Send(It.IsAny>(), It.IsAny()), Times.Exactly(6));
+ this.Mediator.Send(Arg>.Any(), Arg.Any()).Called(Count.Exactly(6));
}
[Fact]
public async Task MerchantStatementDomainEventHandler_Handle_StatementCreatedForDateEvent_EventIsHandled()
{
- this.Mediator.Setup(m => m.Send(It.IsAny>(), It.IsAny()))
+ this.Mediator.Send(Arg>.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
Result result = await this.EventHandler.Handle(TestData.DomainEvents.StatementCreatedForDateEvent, TestContext.Current.CancellationToken);
@@ -139,7 +141,7 @@ public async Task MerchantStatementDomainEventHandler_Handle_StatementCreatedFor
[Fact]
public async Task MerchantStatementDomainEventHandler_Handle_AutomaticDepositMadeEvent_EventIsHandled()
{
- this.Mediator.Setup(m => m.Send(It.IsAny>(), It.IsAny()))
+ this.Mediator.Send(Arg>.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
Result result = await this.EventHandler.Handle(TestData.DomainEvents.AutomaticDepositMadeEvent, TestContext.Current.CancellationToken);
@@ -149,7 +151,7 @@ public async Task MerchantStatementDomainEventHandler_Handle_AutomaticDepositMad
[Fact]
public async Task MerchantStatementDomainEventHandler_Handle_ManualDepositMadeEvent_EventIsHandled()
{
- this.Mediator.Setup(m => m.Send(It.IsAny>(), It.IsAny()))
+ this.Mediator.Send(Arg>.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
Result result = await this.EventHandler.Handle(TestData.DomainEvents.ManualDepositMadeEvent, TestContext.Current.CancellationToken);
@@ -159,7 +161,7 @@ public async Task MerchantStatementDomainEventHandler_Handle_ManualDepositMadeEv
[Fact]
public async Task MerchantStatementDomainEventHandler_Handle_WithdrawalMadeEvent_EventIsHandled()
{
- this.Mediator.Setup(m => m.Send(It.IsAny>(), It.IsAny()))
+ this.Mediator.Send(Arg>.Any(), Arg.Any())
.ReturnsAsync(Result.Success());
Result result = await this.EventHandler.Handle(TestData.DomainEvents.WithdrawalMadeEvent, TestContext.Current.CancellationToken);
diff --git a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/OperatorDomainEventHandlerTests.cs b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/OperatorDomainEventHandlerTests.cs
index dc12bd22..c4869dee 100644
--- a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/OperatorDomainEventHandlerTests.cs
+++ b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/OperatorDomainEventHandlerTests.cs
@@ -1,4 +1,4 @@
-using Moq;
+using Imposter.Abstractions;
using Shared.Logger;
using Shared.Serialisation;
using Shouldly;
@@ -14,15 +14,15 @@ namespace TransactionProcessor.BusinessLogic.Tests.DomainEventHandlers;
public class OperatorDomainEventHandlerTests
{
- private Mock EstateReportingRepository;
+ private ITransactionProcessorReadModelRepositoryImposter EstateReportingRepository;
private ReadModelDomainEventHandler DomainEventHandler;
public OperatorDomainEventHandlerTests()
{
Logger.Initialise(NullLogger.Instance);
StringSerialiser.Initialise(new SystemTextJsonSerializer(new JsonSerializerOptions()));
- this.EstateReportingRepository = new Mock();
- this.DomainEventHandler = new ReadModelDomainEventHandler(this.EstateReportingRepository.Object);
+ this.EstateReportingRepository = new ITransactionProcessorReadModelRepositoryImposter();
+ this.DomainEventHandler = new ReadModelDomainEventHandler(this.EstateReportingRepository.Instance());
}
[Fact]
diff --git a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/ReadModelDomainEventHandlerTests.cs b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/ReadModelDomainEventHandlerTests.cs
index 82bb626e..e984fb64 100644
--- a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/ReadModelDomainEventHandlerTests.cs
+++ b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/ReadModelDomainEventHandlerTests.cs
@@ -1,4 +1,4 @@
-using Moq;
+using Imposter.Abstractions;
using Shared.DomainDrivenDesign.EventSourcing;
using Shared.Logger;
using Shared.Serialisation;
@@ -21,15 +21,15 @@ public class ReadModelDomainEventHandlerTests
{
private sealed record UnhandledDomainEvent() : DomainEvent(Guid.NewGuid(), Guid.NewGuid());
- private readonly Mock EstateReportingRepository;
+ private readonly ITransactionProcessorReadModelRepositoryImposter EstateReportingRepository;
private readonly ReadModelDomainEventHandler DomainEventHandler;
public ReadModelDomainEventHandlerTests()
{
Logger.Initialise(NullLogger.Instance);
StringSerialiser.Initialise(new SystemTextJsonSerializer(new JsonSerializerOptions()));
- this.EstateReportingRepository = new Mock();
- this.DomainEventHandler = new ReadModelDomainEventHandler(this.EstateReportingRepository.Object);
+ this.EstateReportingRepository = new ITransactionProcessorReadModelRepositoryImposter();
+ this.DomainEventHandler = new ReadModelDomainEventHandler(this.EstateReportingRepository.Instance());
}
[Fact]
@@ -42,18 +42,16 @@ public async Task ReadModelDomainEventHandler_Handle_AdditionalRequestDataRecord
new Dictionary(),
TestData.TransactionDateTime);
- this.EstateReportingRepository
- .Setup(r => r.RecordTransactionAdditionalRequestData(domainEvent, It.IsAny()))
- .ReturnsAsync(Result.Success);
- this.EstateReportingRepository
- .Setup(r => r.SetTransactionAmount(domainEvent, It.IsAny()))
- .ReturnsAsync(Result.Success);
+ this.EstateReportingRepository.RecordTransactionAdditionalRequestData(domainEvent, Arg.Any())
+ .ReturnsAsync(Result.Success());
+ this.EstateReportingRepository.SetTransactionAmount(domainEvent, Arg.Any())
+ .ReturnsAsync(Result.Success());
Result result = await this.DomainEventHandler.Handle(domainEvent, TestContext.Current.CancellationToken);
result.IsSuccess.ShouldBeTrue();
- this.EstateReportingRepository.Verify(r => r.RecordTransactionAdditionalRequestData(domainEvent, It.IsAny()), Times.Once);
- this.EstateReportingRepository.Verify(r => r.SetTransactionAmount(domainEvent, It.IsAny()), Times.Once);
+ this.EstateReportingRepository.RecordTransactionAdditionalRequestData(domainEvent, Arg.Any()).Called(Count.Once());
+ this.EstateReportingRepository.SetTransactionAmount(domainEvent, Arg.Any()).Called(Count.Once());
}
[Fact]
@@ -61,15 +59,14 @@ public async Task ReadModelDomainEventHandler_Handle_StatementGeneratedEvent_Mar
{
MerchantStatementDomainEvents.StatementGeneratedEvent domainEvent = TestData.DomainEvents.StatementGeneratedEvent;
- this.EstateReportingRepository
- .Setup(r => r.MarkStatementAsGenerated(domainEvent, It.IsAny()))
- .ReturnsAsync(Result.Failure);
+ this.EstateReportingRepository.MarkStatementAsGenerated(domainEvent, Arg.Any())
+ .ReturnsAsync(Result.Failure());
Result result = await this.DomainEventHandler.Handle(domainEvent, TestContext.Current.CancellationToken);
result.IsFailed.ShouldBeTrue();
- this.EstateReportingRepository.Verify(r => r.MarkStatementAsGenerated(domainEvent, It.IsAny()), Times.Once);
- this.EstateReportingRepository.Verify(r => r.UpdateMerchant(domainEvent, It.IsAny()), Times.Never);
+ this.EstateReportingRepository.MarkStatementAsGenerated(domainEvent, Arg.Any()).Called(Count.Once());
+ this.EstateReportingRepository.UpdateMerchant(domainEvent, Arg.Any()).Called(Count.Never());
}
[Fact]
@@ -80,7 +77,6 @@ public async Task ReadModelDomainEventHandler_Handle_UnhandledDomainEvent_Return
Result result = await this.DomainEventHandler.Handle(domainEvent, TestContext.Current.CancellationToken);
result.IsSuccess.ShouldBeTrue();
- this.EstateReportingRepository.VerifyNoOtherCalls();
}
}
diff --git a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/TransactionDomainEventHandlerTests.cs b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/TransactionDomainEventHandlerTests.cs
index 0325e0d5..44ea6132 100644
--- a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/TransactionDomainEventHandlerTests.cs
+++ b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/TransactionDomainEventHandlerTests.cs
@@ -8,7 +8,7 @@ namespace TransactionProcessor.BusinessLogic.Tests.DomainEventHandlers
{
using EventHandling;
using Microsoft.Extensions.Configuration;
- using Moq;
+ using Imposter.Abstractions;
using Shared.DomainDrivenDesign.EventSourcing;
using Shared.General;
using Shared.Logger;
@@ -25,14 +25,14 @@ namespace TransactionProcessor.BusinessLogic.Tests.DomainEventHandlers
[Collection("Sequential")]
public abstract class DomainEventHandlerTests
{
- public Mock Mediator;
+ public IMediatorImposter Mediator;
public DomainEventHandlerTests(ITestOutputHelper testOutputHelper) {
- this.Mediator = new Mock();
+ this.Mediator = new IMediatorImposter();
StringSerialiser.Initialise(new SystemTextJsonSerializer(new JsonSerializerOptions()));
IConfigurationRoot configurationRoot = new ConfigurationBuilder().AddInMemoryCollection(TestData.DefaultAppSettings).Build();
ConfigurationReader.Initialise(configurationRoot);
- this.Mediator.Setup(s => s.Send(It.IsAny>(), It.IsAny())).ReturnsAsync(Result.Success());
+ this.Mediator.Send(Arg>.Any(), Arg.Any()).ReturnsAsync(Result.Success());
}
}
@@ -42,7 +42,7 @@ public class TransactionDomainEventHandlerTests : DomainEventHandlerTests
public TransactionDomainEventHandlerTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper)
{
- this.TransactionDomainEventHandler = new TransactionDomainEventHandler(this.Mediator.Object);
+ this.TransactionDomainEventHandler = new TransactionDomainEventHandler(this.Mediator.Instance());
}
diff --git a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/VoucherDomainEventHandlerTests.cs b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/VoucherDomainEventHandlerTests.cs
index cf8054a3..66e13fa1 100644
--- a/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/VoucherDomainEventHandlerTests.cs
+++ b/TransactionProcessor.BusinessLogic.Tests/DomainEventHandlers/VoucherDomainEventHandlerTests.cs
@@ -12,7 +12,7 @@ namespace TransactionProcessor.BusinessLogic.Tests.DomainEventHandlers;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
-using Moq;
+using Imposter.Abstractions;
using SecurityService.Client;
using Shared.DomainDrivenDesign.EventSourcing;
using Shared.EntityFramework;
@@ -39,11 +39,11 @@ public enum TestDatabaseType
public class VoucherDomainEventHandlerTests
{
- private readonly Mock AggregateService;
- private readonly Mock> DbContextFactory;
+ private readonly IAggregateServiceImposter AggregateService;
+ private readonly IDbContextResolverImposter DbContextFactory;
private readonly EstateManagementContext Context;
- private readonly Mock SecurityServiceClient;
- private readonly Mock MessagingServiceClient;
+ private readonly ISecurityServiceClientImposter SecurityServiceClient;
+ private readonly IMessagingServiceClientImposter MessagingServiceClient;
private readonly VoucherDomainEventHandler VoucherDomainEventHandler;
private EstateManagementContext GetContext(String databaseName)
@@ -60,8 +60,8 @@ public VoucherDomainEventHandlerTests() {
Logger.Initialise(NullLogger.Instance);
- SecurityServiceClient = new Mock();
- MessagingServiceClient = new Mock();
+ SecurityServiceClient = new ISecurityServiceClientImposter();
+ MessagingServiceClient = new IMessagingServiceClientImposter();
DirectoryInfo path = Directory.GetParent(Assembly.GetExecutingAssembly().Location);
MockFileSystem fileSystem = new MockFileSystem(new Dictionary
@@ -70,19 +70,19 @@ public VoucherDomainEventHandlerTests() {
{ $"{path}/VoucherMessages/VoucherSMS.txt", new MockFileData("Transaction Number: [TransactionNumber]") }
});
- this.AggregateService = new Mock();
- this.DbContextFactory = new Mock>();
+ this.AggregateService = new IAggregateServiceImposter();
+ this.DbContextFactory = new IDbContextResolverImposter();
this.Context = this.GetContext(Guid.NewGuid().ToString("N"));
var services = new ServiceCollection();
services.AddTransient(_ => this.Context);
var serviceProvider = services.BuildServiceProvider();
var scope = serviceProvider.CreateScope();
- this.DbContextFactory.Setup(d => d.Resolve(It.IsAny(), It.IsAny())).Returns(new ResolvedDbContext(scope));
+ this.DbContextFactory.Resolve(Arg.Any(), Arg.Any()).Returns(new ResolvedDbContext(scope));
- VoucherDomainEventHandler = new VoucherDomainEventHandler(this.SecurityServiceClient.Object,
- this.AggregateService.Object,
- this.DbContextFactory.Object,
- this.MessagingServiceClient.Object,
+ VoucherDomainEventHandler = new VoucherDomainEventHandler(this.SecurityServiceClient.Instance(),
+ this.AggregateService.Instance(),
+ this.DbContextFactory.Instance(),
+ this.MessagingServiceClient.Instance(),
fileSystem);
}
@@ -90,9 +90,9 @@ public VoucherDomainEventHandlerTests() {
[Fact]
public async Task VoucherDomainEventHandler_VoucherIssuedEvent_WithEmailAddress_IsHandled()
{
- this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.GetTokenResponse()));
+ this.SecurityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.GetTokenResponse()));
- this.AggregateService.Setup(t => t.Get(It.IsAny(), It.IsAny()))
+ this.AggregateService.Get(Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(TestData.GetVoucherAggregateWithRecipientEmail()));
this.Context.Transactions.Add(new Database.Entities.Transaction()
@@ -115,9 +115,9 @@ public async Task VoucherDomainEventHandler_VoucherIssuedEvent_WithEmailAddress_
[Fact]
public async Task VoucherDomainEventHandler_VoucherIssuedEvent_WithRecipientMobile_IsHandled()
{
- this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.GetTokenResponse()));
+ this.SecurityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.GetTokenResponse()));
- this.AggregateService.Setup(t => t.Get(It.IsAny(), It.IsAny()))
+ this.AggregateService.Get(Arg.Any(), Arg.Any())
.ReturnsAsync(Result.Success(TestData.GetVoucherAggregateWithRecipientMobile()));
this.Context.Transactions.Add(new Database.Entities.Transaction()
diff --git a/TransactionProcessor.BusinessLogic.Tests/ImposterUsings.cs b/TransactionProcessor.BusinessLogic.Tests/ImposterUsings.cs
new file mode 100644
index 00000000..79efcaa8
--- /dev/null
+++ b/TransactionProcessor.BusinessLogic.Tests/ImposterUsings.cs
@@ -0,0 +1,46 @@
+using Imposter.Abstractions;
+using MediatR;
+using Microsoft.AspNetCore.Hosting;
+using TransactionProcessor.BusinessLogic.Services;
+using TransactionProcessor.BusinessLogic.Manager;
+using Shared.EventStore.Aggregate;
+using Shared.EntityFramework;
+using Shared.EventStore.EventStore;
+using SecurityService.Client;
+using PataPawaPostPay;
+using TransactionProcessor.BusinessLogic.OperatorInterfaces.PataPawaPostPay;
+using MessagingService.Client;
+using TransactionProcessor.Database.Contexts;
+using TransactionProcessor.Repository;
+using System.IO.Abstractions;
+using TransactionProcessor.ProjectionEngine.Repository;
+using TransactionProcessor.Models.Merchant;
+using TransactionProcessor.BusinessLogic.OperatorInterfaces;
+using TransactionProcessor.BusinessLogic.Common;
+
+[assembly: GenerateImposter(typeof(IOperatorProxy))]
+[assembly: GenerateImposter(typeof(ITransactionDomainService))]
+[assembly: GenerateImposter(typeof(IMediator))]
+[assembly: GenerateImposter(typeof(IWebHostEnvironment))]
+[assembly: GenerateImposter(typeof(IVoucherDomainService))]
+[assembly: GenerateImposter(typeof(IVoucherManagementManager))]
+[assembly: GenerateImposter(typeof(ISettlementDomainService))]
+[assembly: GenerateImposter(typeof(IFloatDomainService))]
+[assembly: GenerateImposter(typeof(IAggregateService))]
+[assembly: GenerateImposter(typeof(ITransactionProcessorManager))]
+[assembly: GenerateImposter(typeof(ITransactionProcessorReadModelRepository))]
+[assembly: GenerateImposter(typeof(IDbContextResolver))]
+[assembly: GenerateImposter(typeof(IEventStoreContext))]
+[assembly: GenerateImposter(typeof(ISecurityServiceClient))]
+[assembly: GenerateImposter(typeof(ITransactionValidationService))]
+[assembly: GenerateImposter(typeof(IMemoryCacheWrapper))]
+[assembly: GenerateImposter(typeof(IFeeCalculationManager))]
+[assembly: GenerateImposter(typeof(ITransactionReceiptBuilder))]
+[assembly: GenerateImposter(typeof(IMessagingServiceClient))]
+[assembly: GenerateImposter(typeof(PataPawaPostPayServiceClient))]
+[assembly: GenerateImposter(typeof(IPataPawaPostPayService))]
+[assembly: GenerateImposter(typeof(IStatementBuilder))]
+[assembly: GenerateImposter(typeof(IFileSystem))]
+[assembly: GenerateImposter(typeof(IDirectoryInfo))]
+[assembly: GenerateImposter(typeof(ITransactionProcessorReadRepository))]
+[assembly: GenerateImposter(typeof(IMerchantDomainService))]
diff --git a/TransactionProcessor.BusinessLogic.Tests/Manager/TransactionProcessorManagerTests.cs b/TransactionProcessor.BusinessLogic.Tests/Manager/TransactionProcessorManagerTests.cs
index 589dcd42..34e15bd5 100644
--- a/TransactionProcessor.BusinessLogic.Tests/Manager/TransactionProcessorManagerTests.cs
+++ b/TransactionProcessor.BusinessLogic.Tests/Manager/TransactionProcessorManagerTests.cs
@@ -1,4 +1,4 @@
-using Moq;
+using Imposter.Abstractions;
using Shared.DomainDrivenDesign.EventSourcing;
using Shared.EventStore.Aggregate;
using Shared.Logger;
@@ -27,26 +27,26 @@ namespace TransactionProcessor.BusinessLogic.Tests.Manager
{
public class TransactionProcessorManagerTests
{
- private readonly Mock TransactionProcessorReadModelRepository;
- private readonly Mock AggregateService;
+ private readonly ITransactionProcessorReadModelRepositoryImposter TransactionProcessorReadModelRepository;
+ private readonly IAggregateServiceImposter AggregateService;
private readonly TransactionProcessorManager TransactionProcessorManager;
public TransactionProcessorManagerTests()
{
Logger.Initialise(Microsoft.Extensions.Logging.Abstractions.NullLogger.Instance);
- this.TransactionProcessorReadModelRepository = new Mock();
+ this.TransactionProcessorReadModelRepository = new ITransactionProcessorReadModelRepositoryImposter();
StringSerialiser.Initialise(new Shared.Serialisation.SystemTextJsonSerializer(new System.Text.Json.JsonSerializerOptions()));
- this.AggregateService = new Mock();
+ this.AggregateService = new IAggregateServiceImposter();
- this.TransactionProcessorManager = new TransactionProcessorManager(this.TransactionProcessorReadModelRepository.Object, this.AggregateService.Object);
+ this.TransactionProcessorManager = new TransactionProcessorManager(this.TransactionProcessorReadModelRepository.Instance(), this.AggregateService.Instance());
}
[Fact]
public async Task TransactionProcessorManager_GetEstates_EstatesAreReturned()
{
- this.AggregateService.Setup(a => a.GetLatest(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.Aggregates.CreatedEstateAggregate()));
- this.TransactionProcessorReadModelRepository.Setup(e => e.GetEstate(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.EstateModel));
+ this.AggregateService.GetLatest(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.Aggregates.CreatedEstateAggregate()));
+ this.TransactionProcessorReadModelRepository.GetEstate(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.EstateModel));
Result> getEstatesResult = await this.TransactionProcessorManager.GetEstates(TestData.EstateId, TestContext.Current.CancellationToken);
getEstatesResult.IsSuccess.ShouldBeTrue();
@@ -60,8 +60,8 @@ public async Task TransactionProcessorManager_GetEstates_EstatesAreReturned()
[Fact]
public async Task TransactionProcessorManager_GetEstates_RepoCallFails_ResultFailed()
{
- this.AggregateService.Setup(a => a.GetLatest(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.Aggregates.CreatedEstateAggregate()));
- this.TransactionProcessorReadModelRepository.Setup(e => e.GetEstate(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Failure());
+ this.AggregateService.GetLatest(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.Aggregates.CreatedEstateAggregate()));
+ this.TransactionProcessorReadModelRepository.GetEstate(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Failure());
Result> getEstatesResult = await this.TransactionProcessorManager.GetEstates(TestData.EstateId, TestContext.Current.CancellationToken);
getEstatesResult.IsFailed.ShouldBeTrue();
@@ -70,9 +70,9 @@ public async Task TransactionProcessorManager_GetEstates_RepoCallFails_ResultFai
[Fact]
public async Task TransactionProcessorManager_GetEstate_EstateIsReturned()
{
- this.AggregateService.Setup(a => a.GetLatest(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.Aggregates.EstateAggregateWithOperator()));
- this.TransactionProcessorReadModelRepository.Setup(e => e.GetEstate(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.EstateModel));
- this.AggregateService.Setup(o => o.GetLatest(It.IsAny(), TestContext.Current.CancellationToken)).ReturnsAsync(Result.Success(TestData.Aggregates.CreatedOperatorAggregate()));
+ this.AggregateService.GetLatest(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.Aggregates.EstateAggregateWithOperator()));
+ this.TransactionProcessorReadModelRepository.GetEstate(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.EstateModel));
+ this.AggregateService.GetLatest(Arg.Any(), TestContext.Current.CancellationToken).ReturnsAsync(Result.Success(TestData.Aggregates.CreatedOperatorAggregate()));
Result getEstateResult = await this.TransactionProcessorManager.GetEstate(TestData.EstateId, TestContext.Current.CancellationToken);
getEstateResult.IsSuccess.ShouldBeTrue();
@@ -89,8 +89,8 @@ public async Task TransactionProcessorManager_GetEstate_EstateIsReturned()
[Fact]
public async Task TransactionProcessorManager_GetEstate_InvalidEstateId_ErrorIsThrown()
{
- this.AggregateService.Setup(a => a.GetLatest(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.Aggregates.EmptyEstateAggregate));
- this.TransactionProcessorReadModelRepository.Setup(e => e.GetEstate(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.EstateModel));
+ this.AggregateService.GetLatest(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.Aggregates.EmptyEstateAggregate));
+ this.TransactionProcessorReadModelRepository.GetEstate(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.EstateModel));
Result getEstateResult = await this.TransactionProcessorManager.GetEstate(TestData.EstateId, TestContext.Current.CancellationToken);
getEstateResult.IsFailed.ShouldBeTrue();
@@ -99,8 +99,8 @@ public async Task TransactionProcessorManager_GetEstate_InvalidEstateId_ErrorIsT
[Fact]
public async Task TransactionProcessorManager_GetEstate_GetLatestFailed_ErrorIsThrown()
{
- this.AggregateService.Setup(a => a.GetLatest(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Failure());
- this.TransactionProcessorReadModelRepository.Setup(e => e.GetEstate(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.EstateModel));
+ this.AggregateService.GetLatest(Arg.Any(), Arg.Any()).ReturnsAsync(Result.Failure());
+ this.TransactionProcessorReadModelRepository.GetEstate(Arg