From 0a4a1cb08fecd0cbc4905ab9341341053f07ec33 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Thu, 3 Sep 2026 07:39:56 +0100 Subject: [PATCH 1/2] Replace Moq with Imposter in business logic tests --- Directory.Packages.props | 4 +- .../ImposterGeneration.cs | 12 + .../MediatorTests.cs | 16 +- .../RequestHandlerTests.cs | 108 ++++----- ...sorACL - Backup.BusinessLogic.Tests.csproj | 2 +- ...ionProcessorACL.BusinessLogic.Tests.csproj | 2 +- ...tionProcessorACLApplicationServiceTests.cs | 209 +++++++++--------- .../General/VersionCheckMiddlewareTests.cs | 42 ++-- .../Handlers/ReportingHandlersTests.cs | 38 ++-- .../Handlers/TransactionHandlersTests.cs | 30 +-- .../ImposterGeneration.cs | 6 + .../TransactionProcessorACL.Tests.csproj | 2 +- 12 files changed, 241 insertions(+), 230 deletions(-) create mode 100644 TransactionProcessorACL.BusinessLogic.Tests/ImposterGeneration.cs create mode 100644 TransactionProcessorACL.Tests/ImposterGeneration.cs diff --git a/Directory.Packages.props b/Directory.Packages.props index 3331ca3..da2010d 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -28,7 +28,7 @@ - + @@ -55,4 +55,4 @@ - \ No newline at end of file + diff --git a/TransactionProcessorACL.BusinessLogic.Tests/ImposterGeneration.cs b/TransactionProcessorACL.BusinessLogic.Tests/ImposterGeneration.cs new file mode 100644 index 0000000..59ad82c --- /dev/null +++ b/TransactionProcessorACL.BusinessLogic.Tests/ImposterGeneration.cs @@ -0,0 +1,12 @@ +using Imposter.Abstractions; +using Microsoft.AspNetCore.Hosting; +using SecurityService.Client; +using TransactionProcessor.Client; +using TransactionProcessorACL.BusinessLogic.BackendAPI; +using TransactionProcessorACL.BusinessLogic.Services; + +[assembly: GenerateImposter(typeof(ITransactionProcessorClient))] +[assembly: GenerateImposter(typeof(ISecurityServiceClient))] +[assembly: GenerateImposter(typeof(IEstateReportingApiClient))] +[assembly: GenerateImposter(typeof(ITransactionProcessorACLApplicationService))] +[assembly: GenerateImposter(typeof(IWebHostEnvironment))] diff --git a/TransactionProcessorACL.BusinessLogic.Tests/MediatorTests.cs b/TransactionProcessorACL.BusinessLogic.Tests/MediatorTests.cs index 85a169e..f54de88 100644 --- a/TransactionProcessorACL.BusinessLogic.Tests/MediatorTests.cs +++ b/TransactionProcessorACL.BusinessLogic.Tests/MediatorTests.cs @@ -1,9 +1,9 @@ -using Lamar; +using Lamar; using MediatR; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; -using Moq; +using Imposter.Abstractions; using System; using System.Collections.Generic; using System.Diagnostics; @@ -47,16 +47,16 @@ public MediatorTests() [Fact] public async Task Mediator_Send_RequestHandled() { - Mock hostingEnvironment = new Mock(); - hostingEnvironment.Setup(he => he.EnvironmentName).Returns("Development"); - hostingEnvironment.Setup(he => he.ContentRootPath).Returns("/home"); - hostingEnvironment.Setup(he => he.ApplicationName).Returns("Test Application"); + var hostingEnvironment = new IWebHostEnvironmentImposter(ImposterMode.Explicit); + hostingEnvironment.EnvironmentName.Getter().Returns("Development"); + hostingEnvironment.ContentRootPath.Getter().Returns("/home"); + hostingEnvironment.ApplicationName.Getter().Returns("Test Application"); ServiceRegistry services = new ServiceRegistry(); - Startup s = new Startup(hostingEnvironment.Object); + Startup s = new Startup(hostingEnvironment.Instance()); Startup.Configuration = this.SetupMemoryConfiguration(); - this.AddTestRegistrations(services, hostingEnvironment.Object); + this.AddTestRegistrations(services, hostingEnvironment.Instance()); s.ConfigureContainer(services); List errors = new List(); diff --git a/TransactionProcessorACL.BusinessLogic.Tests/RequestHandlerTests.cs b/TransactionProcessorACL.BusinessLogic.Tests/RequestHandlerTests.cs index b60f6ba..059a942 100644 --- a/TransactionProcessorACL.BusinessLogic.Tests/RequestHandlerTests.cs +++ b/TransactionProcessorACL.BusinessLogic.Tests/RequestHandlerTests.cs @@ -12,7 +12,7 @@ namespace TransactionProcessorACL.BusinesssLogic.Tests using BusinessLogic.Services; using Microsoft.Extensions.Configuration; using Models; - using Moq; + using Imposter.Abstractions; using Shared.General; using Shouldly; using Testing; @@ -49,15 +49,15 @@ private void SetupMemoryConfiguration() [Fact] public async Task ProcessLogonTransactionRequestHandler_Handle_RequestIsHandled() { - Mock applicationService = new Mock(); + ITransactionProcessorACLApplicationServiceImposter applicationService = new ITransactionProcessorACLApplicationServiceImposter(); applicationService - .Setup(a => a.ProcessLogonTransaction(It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny())).ReturnsAsync(TestData.ProcessLogonTransactionResponse); - TransactionRequestHandler requestHandler = new TransactionRequestHandler(applicationService.Object); + .ProcessLogonTransaction(Arg.Any(), + Arg.Any(), + Arg.Any(), + Arg.Any(), + Arg.Any(), + Arg.Any()).ReturnsAsync(TestData.ProcessLogonTransactionResponse); + TransactionRequestHandler requestHandler = new TransactionRequestHandler(applicationService.Instance()); TransactionCommands.ProcessLogonTransactionCommand command = TestData.ProcessLogonTransactionCommand; Result result = await requestHandler.Handle(command, CancellationToken.None); @@ -73,18 +73,18 @@ public async Task ProcessLogonTransactionRequestHandler_Handle_RequestIsHandled( [Fact] public async Task ProcessSaleTransactionRequestHandler_Handle_RequestIsHandled() { - Mock applicationService = new Mock(); + ITransactionProcessorACLApplicationServiceImposter applicationService = new ITransactionProcessorACLApplicationServiceImposter(); applicationService - .Setup(a => a.ProcessSaleTransaction(It.IsAny<(Guid, Guid)>(), - It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny<(Guid, Guid, Guid)>(), - It.IsAny>(), - It.IsAny())).ReturnsAsync(TestData.ProcessSaleTransactionResponse); + .ProcessSaleTransaction(Arg<(Guid, Guid)>.Any(), + Arg.Any(), + Arg.Any(), + Arg.Any(), + Arg.Any(), + Arg<(Guid, Guid, Guid)>.Any(), + Arg>.Any(), + Arg.Any()).ReturnsAsync(TestData.ProcessSaleTransactionResponse); - TransactionRequestHandler requestHandler = new TransactionRequestHandler(applicationService.Object); + TransactionRequestHandler requestHandler = new TransactionRequestHandler(applicationService.Instance()); TransactionCommands.ProcessSaleTransactionCommand command = TestData.ProcessSaleTransactionCommand; Result result = await requestHandler.Handle(command, CancellationToken.None); @@ -98,16 +98,16 @@ public async Task ProcessSaleTransactionRequestHandler_Handle_RequestIsHandled() [Fact] public async Task ProcessReconciliationRequestHandler_Handle_RequestIsHandled() { - Mock applicationService = new Mock(); + ITransactionProcessorACLApplicationServiceImposter applicationService = new ITransactionProcessorACLApplicationServiceImposter(); applicationService - .Setup(a => a.ProcessReconciliation(It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny())).ReturnsAsync(TestData.ProcessReconciliationResponse); - TransactionRequestHandler requestHandler = new TransactionRequestHandler(applicationService.Object); + .ProcessReconciliation(Arg.Any(), + Arg.Any(), + Arg.Any(), + Arg.Any(), + Arg.Any(), + Arg.Any(), + Arg.Any()).ReturnsAsync(TestData.ProcessReconciliationResponse); + TransactionRequestHandler requestHandler = new TransactionRequestHandler(applicationService.Instance()); TransactionCommands.ProcessReconciliationCommand command = TestData.ProcessReconciliationCommand; Result result = await requestHandler.Handle(command, CancellationToken.None); @@ -178,8 +178,8 @@ public async Task VersionCheckRequestHandler_Handle_NullVersionInRequest_Request [Fact] public async Task VoucherRequestHandler_GetVoucherRequest_Handle_RequestIsHandled() { - Mock applicationService = new Mock(); - VoucherRequestHandler requestHandler = new VoucherRequestHandler(applicationService.Object); + ITransactionProcessorACLApplicationServiceImposter applicationService = new ITransactionProcessorACLApplicationServiceImposter(); + VoucherRequestHandler requestHandler = new VoucherRequestHandler(applicationService.Instance()); Should.NotThrow(async () => { @@ -190,8 +190,8 @@ public async Task VoucherRequestHandler_GetVoucherRequest_Handle_RequestIsHandle [Fact] public async Task VoucherRequestHandler_RedeemVoucherRequest_Handle_RequestIsHandled() { - Mock applicationService = new Mock(); - VoucherRequestHandler requestHandler = new VoucherRequestHandler(applicationService.Object); + ITransactionProcessorACLApplicationServiceImposter applicationService = new ITransactionProcessorACLApplicationServiceImposter(); + VoucherRequestHandler requestHandler = new VoucherRequestHandler(applicationService.Instance()); Should.NotThrow(async () => { @@ -202,14 +202,14 @@ public async Task VoucherRequestHandler_RedeemVoucherRequest_Handle_RequestIsHan [Fact] public async Task ReportingRequestHandler_GetMerchantTransactionMixSummaryQuery_Handle_RequestIsHandled() { - Mock applicationService = new Mock(); + ITransactionProcessorACLApplicationServiceImposter applicationService = new ITransactionProcessorACLApplicationServiceImposter(); applicationService - .Setup(a => a.GetMerchantTransactionMixSummary(It.IsAny(), - It.IsAny(), - It.IsAny())) + .GetMerchantTransactionMixSummary(Arg.Any(), + Arg.Any(), + Arg.Any()) .ReturnsAsync(new MerchantTransactionMixSummaryResponse()); - ReportingRequestHandler requestHandler = new ReportingRequestHandler(applicationService.Object); + ReportingRequestHandler requestHandler = new ReportingRequestHandler(applicationService.Instance()); ReportingQueries.GetMerchantTransactionMixSummaryQuery query = new( TestData.EstateId, @@ -232,14 +232,14 @@ public async Task ReportingRequestHandler_GetMerchantTransactionMixSummaryQuery_ [Fact] public async Task ReportingRequestHandler_GetMerchantDailyPerformanceSummaryQuery_Handle_RequestIsHandled() { - Mock applicationService = new Mock(); + ITransactionProcessorACLApplicationServiceImposter applicationService = new ITransactionProcessorACLApplicationServiceImposter(); applicationService - .Setup(a => a.GetMerchantDailyPerformanceSummary(It.IsAny(), - It.IsAny(), - It.IsAny())) + .GetMerchantDailyPerformanceSummary(Arg.Any(), + Arg.Any(), + Arg.Any()) .ReturnsAsync(new MerchantDailyPerformanceSummaryResponse()); - ReportingRequestHandler requestHandler = new ReportingRequestHandler(applicationService.Object); + ReportingRequestHandler requestHandler = new ReportingRequestHandler(applicationService.Instance()); ReportingQueries.GetMerchantDailyPerformanceSummaryQuery query = new( TestData.EstateId, @@ -259,14 +259,14 @@ public async Task ReportingRequestHandler_GetMerchantDailyPerformanceSummaryQuer [Fact] public async Task ReportingRequestHandler_GetRecentActivityReceiptSearchQuery_Handle_RequestIsHandled() { - Mock applicationService = new Mock(); + ITransactionProcessorACLApplicationServiceImposter applicationService = new ITransactionProcessorACLApplicationServiceImposter(); applicationService - .Setup(a => a.GetRecentActivityReceiptSearch(It.IsAny(), - It.IsAny(), - It.IsAny())) + .GetRecentActivityReceiptSearch(Arg.Any(), + Arg.Any(), + Arg.Any()) .ReturnsAsync(new RecentActivityReceiptSearchResponse()); - ReportingRequestHandler requestHandler = new ReportingRequestHandler(applicationService.Object); + ReportingRequestHandler requestHandler = new ReportingRequestHandler(applicationService.Instance()); ReportingQueries.GetRecentActivityReceiptSearchQuery query = new( TestData.EstateId, @@ -288,16 +288,16 @@ public async Task ReportingRequestHandler_GetRecentActivityReceiptSearchQuery_Ha [Fact] public async Task TransactionRequestHandler_ResendReceiptCommand_Handle_RequestIsHandled() { - Mock applicationService = new Mock(); + ITransactionProcessorACLApplicationServiceImposter applicationService = new ITransactionProcessorACLApplicationServiceImposter(); applicationService - .Setup(a => a.ResendReceipt(It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny())) + .ResendReceipt(Arg.Any(), + Arg.Any(), + Arg.Any(), + Arg.Any(), + Arg.Any()) .ReturnsAsync(new ResendReceiptResponse { Success = true, Message = "Receipt resend requested." }); - TransactionRequestHandler requestHandler = new TransactionRequestHandler(applicationService.Object); + TransactionRequestHandler requestHandler = new TransactionRequestHandler(applicationService.Instance()); TransactionCommands.ResendReceiptCommand command = new( TestData.EstateId, diff --git a/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACL - Backup.BusinessLogic.Tests.csproj b/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACL - Backup.BusinessLogic.Tests.csproj index 0cf1868..e255e97 100644 --- a/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACL - Backup.BusinessLogic.Tests.csproj +++ b/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACL - Backup.BusinessLogic.Tests.csproj @@ -8,7 +8,7 @@ - + diff --git a/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACL.BusinessLogic.Tests.csproj b/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACL.BusinessLogic.Tests.csproj index b21325a..5e57a7d 100644 --- a/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACL.BusinessLogic.Tests.csproj +++ b/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACL.BusinessLogic.Tests.csproj @@ -14,7 +14,7 @@ - + diff --git a/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACLApplicationServiceTests.cs b/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACLApplicationServiceTests.cs index 089ad84..29abb8d 100644 --- a/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACLApplicationServiceTests.cs +++ b/TransactionProcessorACL.BusinessLogic.Tests/TransactionProcessorACLApplicationServiceTests.cs @@ -11,7 +11,7 @@ namespace TransactionProcessorACL.BusinesssLogic.Tests using TransactionProcessorACL.BusinessLogic.BackendAPI; using Microsoft.Extensions.Configuration; using Models; - using Moq; + using Imposter.Abstractions; using SecurityService.Client; using Shared.General; using Shared.Logger; @@ -34,11 +34,11 @@ public TransactionProcessorACLApplicationServiceTests() this.SetupMemoryConfiguration(); - transactionProcessorClient = new Mock(); - securityServiceClient = new Mock(); - estateReportingApiClient = new Mock(); + transactionProcessorClient = new ITransactionProcessorClientImposter(); + securityServiceClient = new ISecurityServiceClientImposter(); + estateReportingApiClient = new IEstateReportingApiClientImposter(); applicationService = - new TransactionProcessorACLApplicationService(transactionProcessorClient.Object, securityServiceClient.Object, estateReportingApiClient.Object); + new TransactionProcessorACLApplicationService(transactionProcessorClient.Instance(), securityServiceClient.Instance(), estateReportingApiClient.Instance()); } private void SetupMemoryConfiguration() @@ -57,19 +57,19 @@ private void InitialiseConfiguration(int? securityServiceTokenRetryCount = null) ConfigurationReader.Initialise(configuration); } - private Mock transactionProcessorClient; + private ITransactionProcessorClientImposter transactionProcessorClient; - private Mock securityServiceClient; + private ISecurityServiceClientImposter securityServiceClient; - private Mock estateReportingApiClient; + private IEstateReportingApiClientImposter estateReportingApiClient; private ITransactionProcessorACLApplicationService applicationService; [Fact] public async Task TransactionProcessorACLApplicationService_ProcessLogonTransaction_TransactionIsSuccessful() { - transactionProcessorClient.Setup(t => t.PerformTransaction(It.IsAny(), It.IsAny(), It.IsAny())) + transactionProcessorClient.PerformTransaction(Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(TestData.ClientLogonTransactionResponse); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync( Result.Success(TestData.TokenResponse)); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync( Result.Success(TestData.TokenResponse)); Result result = await applicationService.ProcessLogonTransaction(TestData.EstateId, TestData.MerchantId, @@ -89,10 +89,9 @@ public async Task TransactionProcessorACLApplicationService_ProcessLogonTransact { LogonTransactionRequest capturedMessage = null; - transactionProcessorClient.Setup(t => t.PerformTransaction(It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((_, message, _) => capturedMessage = message) - .ReturnsAsync(TestData.ClientLogonTransactionResponse); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())) + transactionProcessorClient.PerformTransaction(Arg.Any(), Arg.Any(), Arg.Any()) + .ReturnsAsync(TestData.ClientLogonTransactionResponse).Callback((_, message, _) => { capturedMessage = message; return Task.CompletedTask; }); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Success(TestData.TokenResponse)); await applicationService.ProcessLogonTransaction(TestData.EstateId, @@ -114,7 +113,7 @@ await applicationService.ProcessLogonTransaction(TestData.EstateId, [Fact] public async Task TransactionProcessorACLApplicationService_ProcessLogonTransaction_GetTokenFailed_ResultFailed() { - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Failure()); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Failure()); Result result = await applicationService.ProcessLogonTransaction(TestData.EstateId, TestData.MerchantId, @@ -129,8 +128,8 @@ public async Task TransactionProcessorACLApplicationService_ProcessLogonTransact [Fact] public async Task TransactionProcessorACLApplicationService_ProcessLogonTransaction_PerformTransactionFailed_ResultFailed() { - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); - transactionProcessorClient.Setup(t => t.PerformTransaction(It.IsAny(), It.IsAny(), It.IsAny())) + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); + transactionProcessorClient.PerformTransaction(Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Failure()); Result result = await applicationService.ProcessLogonTransaction(TestData.EstateId, TestData.MerchantId, @@ -145,9 +144,9 @@ public async Task TransactionProcessorACLApplicationService_ProcessLogonTransact [Fact] public async Task TransactionProcessorACLApplicationService_ProcessLogonTransaction_ExceptionErrorInLogon_TransactionIsNotSuccessful() { - transactionProcessorClient.Setup(t => t.PerformTransaction(It.IsAny(), It.IsAny(), It.IsAny())) - .ThrowsAsync(new Exception("Error")); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + transactionProcessorClient.PerformTransaction(Arg.Any(), Arg.Any(), Arg.Any()) + .Throws(new Exception("Error")); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result result = await applicationService.ProcessLogonTransaction(TestData.EstateId, TestData.MerchantId, @@ -165,9 +164,9 @@ public async Task TransactionProcessorACLApplicationService_ProcessLogonTransact [Fact] public async Task TransactionProcessorACLApplicationService_ProcessSaleTransaction_TransactionIsSuccessful() { - transactionProcessorClient.Setup(t => t.PerformTransaction(It.IsAny(), It.IsAny(), It.IsAny())) + transactionProcessorClient.PerformTransaction(Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(TestData.ClientSaleTransactionResponse); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result result = await applicationService.ProcessSaleTransaction((TestData.EstateId, TestData.MerchantId), TestData.TransactionDateTime, @@ -189,10 +188,9 @@ public async Task TransactionProcessorACLApplicationService_ProcessSaleTransacti public async Task TransactionProcessorACLApplicationService_ProcessSaleTransaction_RequestContainsExpectedSaleData() { SaleTransactionRequest capturedRequest = null; - transactionProcessorClient.Setup(t => t.PerformTransaction(It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((accessToken, request, cancellationToken) => capturedRequest = request) - .ReturnsAsync(TestData.ClientSaleTransactionResponse); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + transactionProcessorClient.PerformTransaction(Arg.Any(), Arg.Any(), Arg.Any()) + .ReturnsAsync(TestData.ClientSaleTransactionResponse).Callback((accessToken, request, cancellationToken) => { capturedRequest = request; return Task.CompletedTask; }); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result result = await applicationService.ProcessSaleTransaction((TestData.EstateId, TestData.MerchantId), TestData.TransactionDateTime, @@ -225,7 +223,7 @@ public async Task TransactionProcessorACLApplicationService_ProcessSaleTransacti [Fact] public async Task TransactionProcessorACLApplicationService_ProcessSaleTransaction_GetTokenFailed_ResultFailed() { - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Failure()); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Failure()); Result result = await applicationService.ProcessSaleTransaction((TestData.EstateId, TestData.MerchantId), TestData.TransactionDateTime, @@ -242,9 +240,9 @@ public async Task TransactionProcessorACLApplicationService_ProcessSaleTransacti [Fact] public async Task TransactionProcessorACLApplicationService_ProcessSaleTransaction_PerformTransactionFailed_ResultFailed() { - transactionProcessorClient.Setup(t => t.PerformTransaction(It.IsAny(), It.IsAny(), It.IsAny())) + transactionProcessorClient.PerformTransaction(Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Failure()); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result result = await applicationService.ProcessSaleTransaction((TestData.EstateId, TestData.MerchantId), TestData.TransactionDateTime, @@ -261,9 +259,9 @@ public async Task TransactionProcessorACLApplicationService_ProcessSaleTransacti [Fact] public async Task TransactionProcessorACLApplicationService_ProcessSaleTransaction_ExceptionErrorInSale_TransactionIsNotSuccessful() { - transactionProcessorClient.Setup(t => t.PerformTransaction(It.IsAny(), It.IsAny(), It.IsAny())) - .ThrowsAsync(new Exception("Error")); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + transactionProcessorClient.PerformTransaction(Arg.Any(), Arg.Any(), Arg.Any()) + .Throws(new Exception("Error")); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result result = await applicationService.ProcessSaleTransaction((TestData.EstateId, TestData.MerchantId), TestData.TransactionDateTime, @@ -283,9 +281,9 @@ public async Task TransactionProcessorACLApplicationService_ProcessSaleTransacti [Fact] public async Task TransactionProcessorACLApplicationService_ProcessReconciliation_TransactionIsSuccessful() { - transactionProcessorClient.Setup(t => t.PerformTransaction(It.IsAny(), It.IsAny(), It.IsAny())) + transactionProcessorClient.PerformTransaction(Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(TestData.ClientReconciliationResponse); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result result = await applicationService.ProcessReconciliation(TestData.EstateId, TestData.MerchantId, @@ -307,10 +305,9 @@ public async Task TransactionProcessorACLApplicationService_ProcessReconciliatio { ReconciliationRequest capturedMessage = null; - transactionProcessorClient.Setup(t => t.PerformTransaction(It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((_, message, _) => capturedMessage = message) - .ReturnsAsync(TestData.ClientReconciliationResponse); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + transactionProcessorClient.PerformTransaction(Arg.Any(), Arg.Any(), Arg.Any()) + .ReturnsAsync(TestData.ClientReconciliationResponse).Callback((_, message, _) => { capturedMessage = message; return Task.CompletedTask; }); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); await applicationService.ProcessReconciliation(TestData.EstateId, TestData.MerchantId, @@ -333,7 +330,7 @@ await applicationService.ProcessReconciliation(TestData.EstateId, [Fact] public async Task TransactionProcessorACLApplicationService_ProcessReconciliation_GetTokenFailed_ResultFailed() { - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Failure()); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Failure()); Result result = await applicationService.ProcessReconciliation(TestData.EstateId, TestData.MerchantId, @@ -349,8 +346,8 @@ public async Task TransactionProcessorACLApplicationService_ProcessReconciliatio [Fact] public async Task TransactionProcessorACLApplicationService_ProcessReconciliation_PerformTransactionFailed_ResultFailed() { - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); - transactionProcessorClient.Setup(t => t.PerformTransaction(It.IsAny(), It.IsAny(), It.IsAny())) + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); + transactionProcessorClient.PerformTransaction(Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Failure()); Result result = await applicationService.ProcessReconciliation(TestData.EstateId, @@ -367,9 +364,9 @@ public async Task TransactionProcessorACLApplicationService_ProcessReconciliatio [Fact] public async Task TransactionProcessorACLApplicationService_ProcessReconciliation_ExceptionErrorInReconciliation_TransactionIsNotSuccessful() { - transactionProcessorClient.Setup(t => t.PerformTransaction(It.IsAny(), It.IsAny(), It.IsAny())) - .ThrowsAsync(new Exception("Error")); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + transactionProcessorClient.PerformTransaction(Arg.Any(), Arg.Any(), Arg.Any()) + .Throws(new Exception("Error")); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result result= await applicationService.ProcessReconciliation(TestData.EstateId, TestData.MerchantId, @@ -389,9 +386,9 @@ public async Task TransactionProcessorACLApplicationService_ProcessReconciliatio [Fact] public async Task TransactionProcessorACLApplicationService_GetVoucher_VoucherRetrieved() { - this.transactionProcessorClient.Setup(v => v.GetVoucherByCode(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + this.transactionProcessorClient.GetVoucherByCode(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(TestData.GetVoucherResponse); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result voucherResponse = await applicationService.GetVoucher(TestData.EstateId, TestData.ContractId, TestData.VoucherCode, CancellationToken.None); @@ -408,7 +405,7 @@ public async Task TransactionProcessorACLApplicationService_GetVoucher_VoucherRe [Fact] public async Task TransactionProcessorACLApplicationService_GetVoucher_GetTokenFailed_ResultIsFailed() { - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Failure()); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Failure()); Result voucherResponse = await applicationService.GetVoucher(TestData.EstateId, TestData.ContractId, TestData.VoucherCode, CancellationToken.None); @@ -418,9 +415,9 @@ public async Task TransactionProcessorACLApplicationService_GetVoucher_GetTokenF [Fact] public async Task TransactionProcessorACLApplicationService_GetVoucher_GetVoucherFailed_ResultIsFailed() { - this.transactionProcessorClient.Setup(v => v.GetVoucherByCode(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + this.transactionProcessorClient.GetVoucherByCode(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Failure()); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result voucherResponse = await applicationService.GetVoucher(TestData.EstateId, TestData.ContractId, TestData.VoucherCode, CancellationToken.None); @@ -430,9 +427,9 @@ public async Task TransactionProcessorACLApplicationService_GetVoucher_GetVouche [Fact] public async Task TransactionProcessorACLApplicationService_GetVoucher_ExceptionErrorInGetVoucher_GetVoucherIsNotSuccessful() { - transactionProcessorClient.Setup(v => v.GetVoucherByCode(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) - .ThrowsAsync(new Exception("Error")); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + transactionProcessorClient.GetVoucherByCode(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) + .Throws(new Exception("Error")); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result voucherResponse = await applicationService.GetVoucher(TestData.EstateId, TestData.ContractId, TestData.VoucherCode, CancellationToken.None); @@ -442,9 +439,9 @@ public async Task TransactionProcessorACLApplicationService_GetVoucher_Exception [Fact] public async Task TransactionProcessorACLApplicationService_RedeemVoucher_VoucherRedeemed() { - transactionProcessorClient.Setup(v => v.RedeemVoucher(It.IsAny(), It.IsAny(), It.IsAny())) - .ReturnsAsync(Result.Success); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + transactionProcessorClient.RedeemVoucher(Arg.Any(), Arg.Any(), Arg.Any()) + .ReturnsAsync(Result.Success()); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result voucherResponse = await applicationService.RedeemVoucher(TestData.EstateId, TestData.ContractId, TestData.VoucherCode, CancellationToken.None); @@ -456,9 +453,9 @@ public async Task TransactionProcessorACLApplicationService_RedeemVoucher_Vouche [Fact] public async Task TransactionProcessorACLApplicationService_RedeemVoucher_GetTokenFailed_ResultIsFailed() { - transactionProcessorClient.Setup(v => v.RedeemVoucher(It.IsAny(), It.IsAny(), It.IsAny())) - .ReturnsAsync(Result.Failure); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Failure()); + transactionProcessorClient.RedeemVoucher(Arg.Any(), Arg.Any(), Arg.Any()) + .ReturnsAsync(Result.Failure()); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Failure()); Result voucherResponse = await applicationService.RedeemVoucher(TestData.EstateId, TestData.ContractId, TestData.VoucherCode, CancellationToken.None); @@ -468,9 +465,9 @@ public async Task TransactionProcessorACLApplicationService_RedeemVoucher_GetTok [Fact] public async Task TransactionProcessorACLApplicationService_RedeemVoucher_RedeemVoucherFailed_ResultIsFailed() { - transactionProcessorClient.Setup(v => v.RedeemVoucher(It.IsAny(), It.IsAny(), It.IsAny())) + transactionProcessorClient.RedeemVoucher(Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Failure()); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result voucherResponse = await applicationService.RedeemVoucher(TestData.EstateId, TestData.ContractId, TestData.VoucherCode, CancellationToken.None); @@ -480,10 +477,10 @@ public async Task TransactionProcessorACLApplicationService_RedeemVoucher_Redeem [Fact] public async Task TransactionProcessorACLApplicationService_RedeemVoucher_ExceptionErrorInGetVoucher_GetVoucherIsNotSuccessful() { - transactionProcessorClient.Setup(v => v.RedeemVoucher(It.IsAny(), It.IsAny(), It.IsAny())) - .ThrowsAsync(new Exception("Error")); + transactionProcessorClient.RedeemVoucher(Arg.Any(), Arg.Any(), Arg.Any()) + .Throws(new Exception("Error")); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result voucherResponse = await applicationService.RedeemVoucher(TestData.EstateId, TestData.ContractId, TestData.VoucherCode, CancellationToken.None); @@ -496,9 +493,9 @@ public async Task TransactionProcessorACLApplicationService_RedeemVoucher_Except [InlineData(TransactionProcessor.DataTransferObjects.Responses.Merchant.SettlementSchedule.Monthly)] public async Task TransactionProcessorACLApplicationService_GetMerchant_MerchantReturned(TransactionProcessor.DataTransferObjects.Responses.Merchant.SettlementSchedule settlementSchedule) { - transactionProcessorClient.Setup(v => v.GetMerchant(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + transactionProcessorClient.GetMerchant(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Success(TestData.MerchantResponse(settlementSchedule))); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result merchantResponse = await applicationService.GetMerchant(TestData.EstateId, TestData.MerchantId, CancellationToken.None); merchantResponse.IsSuccess.ShouldBeTrue(); @@ -523,7 +520,7 @@ public async Task TransactionProcessorACLApplicationService_GetMerchant_Merchant [Fact] public async Task TransactionProcessorACLApplicationService_GetMerchant_GetTokenFailed_ResultIsFailed() { - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Failure()); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Failure()); Result merchantResponse = await applicationService.GetMerchant(TestData.EstateId, TestData.MerchantId, CancellationToken.None); merchantResponse.IsFailed.ShouldBeTrue(); @@ -535,16 +532,16 @@ public async Task TransactionProcessorACLApplicationService_GetMerchant_GetToken { this.InitialiseConfiguration(1); - transactionProcessorClient.Setup(v => v.GetMerchant(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + transactionProcessorClient.GetMerchant(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Success(TestData.MerchantResponse(TransactionProcessor.DataTransferObjects.Responses.Merchant.SettlementSchedule.Monthly))); - securityServiceClient.SetupSequence(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())) - .ThrowsAsync(new TaskCanceledException("Transient token failure")) + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()) + .Throws(new TaskCanceledException("Transient token failure")).Then() .ReturnsAsync(Result.Success(TestData.TokenResponse)); Result merchantResponse = await applicationService.GetMerchant(TestData.EstateId, TestData.MerchantId, CancellationToken.None); merchantResponse.IsSuccess.ShouldBeTrue(); - securityServiceClient.Verify(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).Called(Count.Exactly(2)); } [Fact] @@ -552,17 +549,17 @@ public async Task TransactionProcessorACLApplicationService_GetMerchant_GetToken { this.InitialiseConfiguration(2); - transactionProcessorClient.Setup(v => v.GetMerchant(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + transactionProcessorClient.GetMerchant(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Success(TestData.MerchantResponse(TransactionProcessor.DataTransferObjects.Responses.Merchant.SettlementSchedule.Monthly))); - securityServiceClient.SetupSequence(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())) - .ThrowsAsync(new TaskCanceledException("Transient token failure")) - .ThrowsAsync(new TaskCanceledException("Transient token failure")) - .ThrowsAsync(new TaskCanceledException("Transient token failure")); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()) + .Throws(new TaskCanceledException("Transient token failure")).Then() + .Throws(new TaskCanceledException("Transient token failure")) + .Then().Throws(new TaskCanceledException("Transient token failure")); Result merchantResponse = await applicationService.GetMerchant(TestData.EstateId, TestData.MerchantId, CancellationToken.None); merchantResponse.IsFailed.ShouldBeTrue(); - securityServiceClient.Verify(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(3)); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).Called(Count.Exactly(3)); } [Fact] @@ -573,23 +570,23 @@ public async Task TransactionProcessorACLApplicationService_GetMerchant_GetToken using CancellationTokenSource cancellationTokenSource = new(); cancellationTokenSource.Cancel(); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())) - .ThrowsAsync(new Exception("GetToken should not be called when the request is already canceled")); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()) + .Throws(new Exception("GetToken should not be called when the request is already canceled")); await Should.ThrowAsync(async () => { await applicationService.GetMerchant(TestData.EstateId, TestData.MerchantId, cancellationTokenSource.Token); }); - securityServiceClient.Verify(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).Called(Count.Never()); } [Fact] public async Task TransactionProcessorACLApplicationService_GetMerchant_GetMerchantFailed_ResultIsFailed() { - transactionProcessorClient.Setup(v => v.GetMerchant(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + transactionProcessorClient.GetMerchant(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Failure()); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result merchantResponse = await applicationService.GetMerchant(TestData.EstateId, TestData.MerchantId, CancellationToken.None); merchantResponse.IsFailed.ShouldBeTrue(); @@ -600,9 +597,9 @@ public async Task TransactionProcessorACLApplicationService_GetMerchant_GetMerch [InlineData(TransactionProcessor.DataTransferObjects.Responses.Contract.ProductType.BillPayment)] [InlineData(TransactionProcessor.DataTransferObjects.Responses.Contract.ProductType.MobileTopup)] public async Task TransactionProcessorACLApplicationService_GetMerchantContracts_MerchantContractsReturned(TransactionProcessor.DataTransferObjects.Responses.Contract.ProductType productType) { - transactionProcessorClient.Setup(v => v.GetMerchantContracts(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + transactionProcessorClient.GetMerchantContracts(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Success(TestData.MerchantContractResponses(productType))); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); var merchantContractsResponse = await applicationService.GetMerchantContracts(TestData.EstateId, TestData.MerchantId, CancellationToken.None); merchantContractsResponse.IsSuccess.ShouldBeTrue(); @@ -611,7 +608,7 @@ public async Task TransactionProcessorACLApplicationService_GetMerchantContracts [Fact] public async Task TransactionProcessorACLApplicationService_GetMerchantContracts_GetTokenFailed_ResultIsFailed() { - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Failure()); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Failure()); var merchantContractsResponse = await applicationService.GetMerchantContracts(TestData.EstateId, TestData.MerchantId, CancellationToken.None); merchantContractsResponse.IsFailed.ShouldBeTrue(); @@ -620,9 +617,9 @@ public async Task TransactionProcessorACLApplicationService_GetMerchantContracts [Fact] public async Task TransactionProcessorACLApplicationService_GetMerchantContracts_GetMerchantContractsFailed_ResultIsFailed() { - transactionProcessorClient.Setup(v => v.GetMerchantContracts(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + transactionProcessorClient.GetMerchantContracts(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Failure()); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); var merchantContractsResponse = await applicationService.GetMerchantContracts(TestData.EstateId, TestData.MerchantId, CancellationToken.None); merchantContractsResponse.IsFailed.ShouldBeTrue(); @@ -631,9 +628,9 @@ public async Task TransactionProcessorACLApplicationService_GetMerchantContracts [Fact] public async Task TransactionProcessorACLApplicationService_GetMerchantSchedule_MerchantScheduleReturned() { - transactionProcessorClient.Setup(v => v.GetMerchantSchedule(It.IsAny(), It.IsAny(), It.IsAny(),It.IsAny(), It.IsAny())) + transactionProcessorClient.GetMerchantSchedule(Arg.Any(), Arg.Any(), Arg.Any(),Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Success(TestData.MerchantScheduleResponse())); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); var merchantScheduleResponse = await applicationService.GetMerchantSchedule(TestData.EstateId, TestData.MerchantId, TestData.ScheduleYear, CancellationToken.None); merchantScheduleResponse.IsSuccess.ShouldBeTrue(); @@ -642,7 +639,7 @@ public async Task TransactionProcessorACLApplicationService_GetMerchantSchedule_ [Fact] public async Task TransactionProcessorACLApplicationService_GetMerchantSchedule_GetTokenFailed_ResultIsFailed() { - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Failure()); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Failure()); var merchantScheduleResponse = await applicationService.GetMerchantSchedule(TestData.EstateId, TestData.MerchantId, TestData.ScheduleYear, CancellationToken.None); merchantScheduleResponse.IsFailed.ShouldBeTrue(); @@ -651,9 +648,9 @@ public async Task TransactionProcessorACLApplicationService_GetMerchantSchedule_ [Fact] public async Task TransactionProcessorACLApplicationService_GetMerchantSchedule_GetMerchantScheduleFailed_ResultIsFailed() { - transactionProcessorClient.Setup(v => v.GetMerchantSchedule(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + transactionProcessorClient.GetMerchantSchedule(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Failure()); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); var merchantScheduleResponse = await applicationService.GetMerchantSchedule(TestData.EstateId, TestData.MerchantId, TestData.ScheduleYear, CancellationToken.None); merchantScheduleResponse.IsFailed.ShouldBeTrue(); @@ -664,8 +661,7 @@ public async Task TransactionProcessorACLApplicationService_GetMerchantDailyPerf { TransactionProcessorACL.BusinessLogic.BackendAPI.DataTransferObjects.MerchantDailyPerformanceSummaryRequest capturedRequest = null; estateReportingApiClient - .Setup(v => v.GetMerchantDailyPerformanceSummary(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((_, _, request, _) => capturedRequest = request) + .GetMerchantDailyPerformanceSummary(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Success(new TransactionProcessorACL.BusinessLogic.BackendAPI.DataTransferObjects.MerchantDailyPerformanceSummaryResponse { Metrics = @@ -678,8 +674,8 @@ public async Task TransactionProcessorACLApplicationService_GetMerchantDailyPerf Category = 0 } ] - })); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + })).Callback((_, _, request, _) => { capturedRequest = request; return Task.CompletedTask; }); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result result = await applicationService.GetMerchantDailyPerformanceSummary( TestData.EstateId, @@ -701,7 +697,7 @@ public async Task TransactionProcessorACLApplicationService_GetMerchantDailyPerf [Fact] public async Task TransactionProcessorACLApplicationService_GetMerchantDailyPerformanceSummary_GetTokenFailed_ResultIsFailed() { - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Failure()); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Failure()); Result result = await applicationService.GetMerchantDailyPerformanceSummary( TestData.EstateId, @@ -721,8 +717,7 @@ public async Task TransactionProcessorACLApplicationService_GetMerchantTransacti { TransactionProcessorACL.BusinessLogic.BackendAPI.DataTransferObjects.TransactionMixSummaryRequest capturedRequest = null; estateReportingApiClient - .Setup(v => v.GetMerchantTransactionMixSummary(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((_, _, request, _) => capturedRequest = request) + .GetMerchantTransactionMixSummary(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Success(new TransactionProcessorACL.BusinessLogic.BackendAPI.DataTransferObjects.TransactionMixSummaryResponse { FromDate = new DateTime(2026, 7, 1), @@ -739,8 +734,8 @@ public async Task TransactionProcessorACLApplicationService_GetMerchantTransacti TransactionValue = 42.75M } ] - })); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + })).Callback((_, _, request, _) => { capturedRequest = request; return Task.CompletedTask; }); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result result = await applicationService.GetMerchantTransactionMixSummary( TestData.EstateId, @@ -768,8 +763,7 @@ public async Task TransactionProcessorACLApplicationService_GetRecentActivityRec { TransactionProcessorACL.BusinessLogic.BackendAPI.DataTransferObjects.RecentActivityReceiptSearchRequest capturedRequest = null; estateReportingApiClient - .Setup(v => v.GetRecentActivityReceiptSearch(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((_, _, request, _) => capturedRequest = request) + .GetRecentActivityReceiptSearch(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .ReturnsAsync(Result.Success(new TransactionProcessorACL.BusinessLogic.BackendAPI.DataTransferObjects.RecentActivityReceiptSearchResponse { ReportDate = new DateTime(2026, 7, 8), @@ -790,8 +784,8 @@ public async Task TransactionProcessorACLApplicationService_GetRecentActivityRec ReceiptReference = "RCPT-1" } ] - })); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + })).Callback((_, _, request, _) => { capturedRequest = request; return Task.CompletedTask; }); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result result = await applicationService.GetRecentActivityReceiptSearch( TestData.EstateId, @@ -822,10 +816,9 @@ public async Task TransactionProcessorACLApplicationService_GetRecentActivityRec { TransactionProcessorACL.BusinessLogic.BackendAPI.DataTransferObjects.RecentActivityReceiptSearchRequest capturedRequest = null; estateReportingApiClient - .Setup(v => v.GetRecentActivityReceiptSearch(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((_, _, request, _) => capturedRequest = request) - .ReturnsAsync(Result.Success(new TransactionProcessorACL.BusinessLogic.BackendAPI.DataTransferObjects.RecentActivityReceiptSearchResponse())); - securityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.TokenResponse)); + .GetRecentActivityReceiptSearch(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) + .ReturnsAsync(Result.Success(new TransactionProcessorACL.BusinessLogic.BackendAPI.DataTransferObjects.RecentActivityReceiptSearchResponse())).Callback((_, _, request, _) => { capturedRequest = request; return Task.CompletedTask; }); + securityServiceClient.GetToken(Arg.Any(), Arg.Any(), Arg.Any()).ReturnsAsync(Result.Success(TestData.TokenResponse)); Result result = await applicationService.GetRecentActivityReceiptSearch( TestData.EstateId, diff --git a/TransactionProcessorACL.Tests/General/VersionCheckMiddlewareTests.cs b/TransactionProcessorACL.Tests/General/VersionCheckMiddlewareTests.cs index c044ef2..a7b4ada 100644 --- a/TransactionProcessorACL.Tests/General/VersionCheckMiddlewareTests.cs +++ b/TransactionProcessorACL.Tests/General/VersionCheckMiddlewareTests.cs @@ -1,10 +1,10 @@ -using System.IO; +using System.IO; using System.Text; using System.Threading; using System.Threading.Tasks; using MediatR; using Microsoft.AspNetCore.Http; -using Moq; +using Imposter.Abstractions; using Shouldly; using SimpleResults; using TransactionProcessorACL.BusinessLogic.Requests; @@ -34,20 +34,20 @@ public async Task InvokeAsync_WhenMediatorReturnsSuccess_CallsNextAndLeavesStatu return Task.CompletedTask; }; - var mediatorMock = new Mock(MockBehavior.Strict); + var mediatorMock = new IMediatorImposter(ImposterMode.Explicit); mediatorMock - .Setup(m => m.Send(It.IsAny(), It.IsAny())) - .ReturnsAsync(Result.Success); + .Send(Arg>.Any(), Arg.Any()) + .ReturnsAsync(Result.Success()); var middleware = new VersionCheckMiddleware(next); // Act - await middleware.InvokeAsync(context, mediatorMock.Object); + await middleware.InvokeAsync(context, mediatorMock.Instance()); // Assert nextCalled.ShouldBeTrue(); context.Response.StatusCode.ShouldBe(200); - mediatorMock.Verify(m => m.Send(It.IsAny(), It.IsAny()), Times.Once); + mediatorMock.Send(Arg>.Any(), Arg.Any()).Called(Count.Once()); } [Fact] @@ -69,20 +69,20 @@ public async Task InvokeAsync_WhenMediatorReturnsFailure_SetsStatus505AndDoesNot return Task.CompletedTask; }; - var mediatorMock = new Mock(MockBehavior.Strict); + var mediatorMock = new IMediatorImposter(ImposterMode.Explicit); mediatorMock - .Setup(m => m.Send(It.IsAny(), It.IsAny())) - .ReturnsAsync(Result.Failure); // simulate old/invalid version + .Send(Arg>.Any(), Arg.Any()) + .ReturnsAsync(Result.Failure()); // simulate old/invalid version var middleware = new VersionCheckMiddleware(next); // Act - await middleware.InvokeAsync(context, mediatorMock.Object); + await middleware.InvokeAsync(context, mediatorMock.Instance()); // Assert nextCalled.ShouldBeFalse(); context.Response.StatusCode.ShouldBe(505); - mediatorMock.Verify(m => m.Send(It.IsAny(), It.IsAny()), Times.Once); + mediatorMock.Send(Arg>.Any(), Arg.Any()).Called(Count.Once()); } [Fact] @@ -100,18 +100,18 @@ public async Task InvokeAsync_WhenPathIsHealth_SkipsVersionCheckAndCallsNext() return Task.CompletedTask; }; - var mediatorMock = new Mock(MockBehavior.Strict); + var mediatorMock = new IMediatorImposter(ImposterMode.Explicit); // mediator should not be called for health paths var middleware = new VersionCheckMiddleware(next); // Act - await middleware.InvokeAsync(context, mediatorMock.Object); + await middleware.InvokeAsync(context, mediatorMock.Instance()); // Assert nextCalled.ShouldBeTrue(); context.Response.StatusCode.ShouldBe(200); - mediatorMock.Verify(m => m.Send(It.IsAny(), It.IsAny()), Times.Never); + mediatorMock.Send(Arg>.Any(), Arg.Any()).Called(Count.Never()); } [Fact] @@ -130,19 +130,19 @@ public async Task InvokeAsync_WhenNoBody_AndVersionInQueryString_UsesQueryValue( return Task.CompletedTask; }; - var mediatorMock = new Mock(MockBehavior.Strict); + var mediatorMock = new IMediatorImposter(ImposterMode.Explicit); mediatorMock - .Setup(m => m.Send(It.Is(cmd => cmd.VersionNumber == "9.9.9"), It.IsAny())) - .ReturnsAsync(Result.Success); + .Send(Arg>.Any(), Arg.Any()) + .ReturnsAsync(Result.Success()); var middleware = new VersionCheckMiddleware(next); // Act - await middleware.InvokeAsync(context, mediatorMock.Object); + await middleware.InvokeAsync(context, mediatorMock.Instance()); // Assert nextCalled.ShouldBeTrue(); - mediatorMock.Verify(m => m.Send(It.IsAny(), It.IsAny()), Times.Once); + mediatorMock.Send(Arg>.Any(), Arg.Any()).Called(Count.Once()); } } -} \ No newline at end of file +} diff --git a/TransactionProcessorACL.Tests/Handlers/ReportingHandlersTests.cs b/TransactionProcessorACL.Tests/Handlers/ReportingHandlersTests.cs index ff6b46e..498e4fb 100644 --- a/TransactionProcessorACL.Tests/Handlers/ReportingHandlersTests.cs +++ b/TransactionProcessorACL.Tests/Handlers/ReportingHandlersTests.cs @@ -3,7 +3,7 @@ using System.Threading; using System.Threading.Tasks; using MediatR; -using Moq; +using Imposter.Abstractions; using Shouldly; using SimpleResults; using TransactionProcessorACL.BusinessLogic.Requests; @@ -32,19 +32,19 @@ public async Task GetMerchantDailyPerformanceSummary_PassesEstateClaimAndRequest ReportingQueries.GetMerchantDailyPerformanceSummaryQuery? capturedQuery = null; - var mediator = new Mock(MockBehavior.Strict); + var mediator = new IMediatorImposter(ImposterMode.Explicit); mediator - .Setup(m => m.Send(It.IsAny(), It.IsAny())) - .Callback((payload, _) => capturedQuery = (ReportingQueries.GetMerchantDailyPerformanceSummaryQuery)payload) - .ReturnsAsync(Result.Success(new TransactionProcessorACL.Models.MerchantDailyPerformanceSummaryResponse())); + .Send>(Arg>>.Any(), Arg.Any()) + .ReturnsAsync(Result.Success(new TransactionProcessorACL.Models.MerchantDailyPerformanceSummaryResponse())) + .Callback((payload, _) => { capturedQuery = (ReportingQueries.GetMerchantDailyPerformanceSummaryQuery)payload; return Task.CompletedTask; }); - var result = await ReportingHandlers.GetMerchantDailyPerformanceSummary(user, request, mediator.Object, CancellationToken.None); + var result = await ReportingHandlers.GetMerchantDailyPerformanceSummary(user, request, mediator.Instance(), CancellationToken.None); result.ShouldNotBeNull(); capturedQuery.ShouldNotBeNull(); capturedQuery!.EstateId.ShouldBe(Guid.Parse("1C8354B7-B97A-46EA-9AD1-C43F33F7E3C3")); capturedQuery.Request.MerchantReportingId.ShouldBe(12345); - mediator.Verify(m => m.Send(It.IsAny(), It.IsAny()), Times.Once); + mediator.Send>(Arg>>.Any(), Arg.Any()).Called(Count.Once()); } [Fact] @@ -67,13 +67,13 @@ public async Task GetMerchantTransactionMixSummary_PassesEstateClaimAndRequestTo ReportingQueries.GetMerchantTransactionMixSummaryQuery? capturedQuery = null; - var mediator = new Mock(MockBehavior.Strict); + var mediator = new IMediatorImposter(ImposterMode.Explicit); mediator - .Setup(m => m.Send(It.IsAny(), It.IsAny())) - .Callback((payload, _) => capturedQuery = (ReportingQueries.GetMerchantTransactionMixSummaryQuery)payload) - .ReturnsAsync(Result.Success(new TransactionProcessorACL.Models.MerchantTransactionMixSummaryResponse())); + .Send>(Arg>>.Any(), Arg.Any()) + .ReturnsAsync(Result.Success(new TransactionProcessorACL.Models.MerchantTransactionMixSummaryResponse())) + .Callback((payload, _) => { capturedQuery = (ReportingQueries.GetMerchantTransactionMixSummaryQuery)payload; return Task.CompletedTask; }); - var result = await ReportingHandlers.GetMerchantTransactionMixSummary(user, request, mediator.Object, CancellationToken.None); + var result = await ReportingHandlers.GetMerchantTransactionMixSummary(user, request, mediator.Instance(), CancellationToken.None); result.ShouldNotBeNull(); capturedQuery.ShouldNotBeNull(); @@ -81,7 +81,7 @@ public async Task GetMerchantTransactionMixSummary_PassesEstateClaimAndRequestTo capturedQuery.Request.MerchantReportingId.ShouldBe(12345); capturedQuery.Request.Breakdown.ShouldBe(TransactionMixBreakdown.Product); capturedQuery.Request.Measure.ShouldBe(TransactionMixMeasure.Count); - mediator.Verify(m => m.Send(It.IsAny(), It.IsAny()), Times.Once); + mediator.Send>(Arg>>.Any(), Arg.Any()).Called(Count.Once()); } [Fact] @@ -103,13 +103,13 @@ public async Task GetRecentActivityReceiptSearch_PassesEstateClaimAndRequestToMe ReportingQueries.GetRecentActivityReceiptSearchQuery? capturedQuery = null; - var mediator = new Mock(MockBehavior.Strict); + var mediator = new IMediatorImposter(ImposterMode.Explicit); mediator - .Setup(m => m.Send(It.IsAny(), It.IsAny())) - .Callback((payload, _) => capturedQuery = (ReportingQueries.GetRecentActivityReceiptSearchQuery)payload) - .ReturnsAsync(Result.Success(new TransactionProcessorACL.Models.RecentActivityReceiptSearchResponse())); + .Send>(Arg>>.Any(), Arg.Any()) + .ReturnsAsync(Result.Success(new TransactionProcessorACL.Models.RecentActivityReceiptSearchResponse())) + .Callback((payload, _) => { capturedQuery = (ReportingQueries.GetRecentActivityReceiptSearchQuery)payload; return Task.CompletedTask; }); - var result = await ReportingHandlers.GetRecentActivityReceiptSearch(user, request, mediator.Object, CancellationToken.None); + var result = await ReportingHandlers.GetRecentActivityReceiptSearch(user, request, mediator.Instance(), CancellationToken.None); result.ShouldNotBeNull(); capturedQuery.ShouldNotBeNull(); @@ -119,6 +119,6 @@ public async Task GetRecentActivityReceiptSearch_PassesEstateClaimAndRequestToMe capturedQuery.Request.SearchText.ShouldBe("abc"); capturedQuery.Request.PageNumber.ShouldBe(2); capturedQuery.Request.PageSize.ShouldBe(5); - mediator.Verify(m => m.Send(It.IsAny(), It.IsAny()), Times.Once); + mediator.Send>(Arg>>.Any(), Arg.Any()).Called(Count.Once()); } } diff --git a/TransactionProcessorACL.Tests/Handlers/TransactionHandlersTests.cs b/TransactionProcessorACL.Tests/Handlers/TransactionHandlersTests.cs index 3019928..83da4df 100644 --- a/TransactionProcessorACL.Tests/Handlers/TransactionHandlersTests.cs +++ b/TransactionProcessorACL.Tests/Handlers/TransactionHandlersTests.cs @@ -4,7 +4,7 @@ using System.Threading; using System.Threading.Tasks; using MediatR; -using Moq; +using Imposter.Abstractions; using Shouldly; using SimpleResults; using TransactionProcessorACL.BusinessLogic.Requests; @@ -43,13 +43,13 @@ public async Task PerformSaleTransaction_PassesBusinessFieldsIntoCommand() TransactionCommands.ProcessSaleTransactionCommand? capturedCommand = null; - var mediator = new Mock(MockBehavior.Strict); + var mediator = new IMediatorImposter(ImposterMode.Explicit); mediator - .Setup(m => m.Send(It.IsAny(), It.IsAny())) - .Callback((command, _) => capturedCommand = (TransactionCommands.ProcessSaleTransactionCommand)command) - .ReturnsAsync(Result.Success(new TransactionProcessorACL.Models.ProcessSaleTransactionResponse())); + .Send>(Arg>>.Any(), Arg.Any()) + .ReturnsAsync(Result.Success(new TransactionProcessorACL.Models.ProcessSaleTransactionResponse())) + .Callback((command, _) => { capturedCommand = (TransactionCommands.ProcessSaleTransactionCommand)command; return Task.CompletedTask; }); - await TransactionHandlers.PerformSaleTransaction(mediator.Object, user, request, CancellationToken.None); + await TransactionHandlers.PerformSaleTransaction(mediator.Instance(), user, request, CancellationToken.None); capturedCommand.ShouldNotBeNull(); capturedCommand!.EstateId.ShouldBe(System.Guid.Parse("1C8354B7-B97A-46EA-9AD1-C43F33F7E3C3")); @@ -58,7 +58,7 @@ public async Task PerformSaleTransaction_PassesBusinessFieldsIntoCommand() capturedCommand.DeviceIdentifier.ShouldBe("device-01"); capturedCommand.CustomerEmailAddress.ShouldBe("customer@example.com"); capturedCommand.AdditionalRequestMetadata["amount"].ShouldBe("1000.00"); - mediator.Verify(m => m.Send(It.IsAny(), It.IsAny()), Times.Once); + mediator.Send>(Arg>>.Any(), Arg.Any()).Called(Count.Once()); } [Fact] @@ -78,20 +78,20 @@ public async Task ResendReceipt_PassesClaimsAndRequestIntoCommand() TransactionCommands.ResendReceiptCommand? capturedCommand = null; - var mediator = new Mock(MockBehavior.Strict); + var mediator = new IMediatorImposter(ImposterMode.Explicit); mediator - .Setup(m => m.Send(It.IsAny(), It.IsAny())) - .Callback((command, _) => capturedCommand = (TransactionCommands.ResendReceiptCommand)command) - .ReturnsAsync(Result.Success(new TransactionProcessorACL.Models.ResendReceiptResponse { Success = true, Message = "Receipt resend requested." })); + .Send>(Arg>>.Any(), Arg.Any()) + .ReturnsAsync(Result.Success(new TransactionProcessorACL.Models.ResendReceiptResponse { Success = true, Message = "Receipt resend requested." })) + .Callback((command, _) => { capturedCommand = (TransactionCommands.ResendReceiptCommand)command; return Task.CompletedTask; }); - await TransactionHandlers.ResendReceipt(mediator.Object, user, request, CancellationToken.None); + await TransactionHandlers.ResendReceipt(mediator.Instance(), user, request, CancellationToken.None); capturedCommand.ShouldNotBeNull(); capturedCommand!.EstateId.ShouldBe(System.Guid.Parse("1C8354B7-B97A-46EA-9AD1-C43F33F7E3C3")); capturedCommand.MerchantId.ShouldBe(System.Guid.Parse("2C8354B7-B97A-46EA-9AD1-C43F33F7E3C4")); capturedCommand.Reference.ShouldBe("RCPT-0001"); capturedCommand.RecipientEmailAddress.ShouldBe("recipient@example.com"); - mediator.Verify(m => m.Send(It.IsAny(), It.IsAny()), Times.Once); + mediator.Send>(Arg>>.Any(), Arg.Any()).Called(Count.Once()); } [Fact] @@ -109,9 +109,9 @@ public async Task ResendReceipt_InvalidEmail_IsRejected() RecipientEmailAddress = "not-an-email" }; - var mediator = new Mock(MockBehavior.Strict); + var mediator = new IMediatorImposter(ImposterMode.Explicit); - var result = await TransactionHandlers.ResendReceipt(mediator.Object, user, request, CancellationToken.None); + var result = await TransactionHandlers.ResendReceipt(mediator.Instance(), user, request, CancellationToken.None); result.ShouldNotBeNull(); } diff --git a/TransactionProcessorACL.Tests/ImposterGeneration.cs b/TransactionProcessorACL.Tests/ImposterGeneration.cs new file mode 100644 index 0000000..39d4ecf --- /dev/null +++ b/TransactionProcessorACL.Tests/ImposterGeneration.cs @@ -0,0 +1,6 @@ +using Imposter.Abstractions; +using MediatR; +using Microsoft.AspNetCore.Hosting; + +[assembly: GenerateImposter(typeof(IMediator))] +[assembly: GenerateImposter(typeof(IWebHostEnvironment))] diff --git a/TransactionProcessorACL.Tests/TransactionProcessorACL.Tests.csproj b/TransactionProcessorACL.Tests/TransactionProcessorACL.Tests.csproj index b28d1d8..77c0ecf 100644 --- a/TransactionProcessorACL.Tests/TransactionProcessorACL.Tests.csproj +++ b/TransactionProcessorACL.Tests/TransactionProcessorACL.Tests.csproj @@ -13,7 +13,7 @@ - + From f77e51286e6ca012d853397576eac4f8ba7a0454 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Thu, 3 Sep 2026 08:13:03 +0100 Subject: [PATCH 2/2] Tighten version check middleware test request matching --- .../General/VersionCheckMiddlewareTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TransactionProcessorACL.Tests/General/VersionCheckMiddlewareTests.cs b/TransactionProcessorACL.Tests/General/VersionCheckMiddlewareTests.cs index a7b4ada..c504c3d 100644 --- a/TransactionProcessorACL.Tests/General/VersionCheckMiddlewareTests.cs +++ b/TransactionProcessorACL.Tests/General/VersionCheckMiddlewareTests.cs @@ -132,7 +132,7 @@ public async Task InvokeAsync_WhenNoBody_AndVersionInQueryString_UsesQueryValue( var mediatorMock = new IMediatorImposter(ImposterMode.Explicit); mediatorMock - .Send(Arg>.Any(), Arg.Any()) + .Send(Arg>.Is(request => request is VersionCheckCommands.VersionCheckCommand command && command.VersionNumber == "9.9.9"), Arg.Any()) .ReturnsAsync(Result.Success()); var middleware = new VersionCheckMiddleware(next);