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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 20 additions & 20 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
<ItemGroup>
<PackageVersion Include="AspNetCore.HealthChecks.UI.Client" Version="9.0.0" />
<PackageVersion Include="AspNetCore.HealthChecks.Uris" Version="9.0.0" />
<PackageVersion Include="ClientProxyBase" Version="2026.10.4" />
<PackageVersion Include="ClientProxyBase" Version="2026.11.2" />
<PackageVersion Include="coverlet.collector" Version="10.1.0" />
<PackageVersion Include="HealthMonitoring.Client" Version="2026.10.1" />
<PackageVersion Include="HealthMonitoring.Client" Version="2026.10.2.55" />
<PackageVersion Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.12.0" />
<PackageVersion Include="Ductus.FluentDocker" Version="2.85.0" />
<PackageVersion Include="EventStoreProjections" Version="2023.12.3" />
Expand All @@ -16,20 +16,20 @@
<PackageVersion Include="Lamar.Microsoft.DependencyInjection" Version="16.0.0" />
<PackageVersion Include="MediatR" Version="14.2.0" />
<PackageVersion Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="11.1.0" />
<PackageVersion Include="MessagingService.IntegrationTesting.Helpers" Version="2026.10.2.156" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.13" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.13" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.13" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.13" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.13" />
<PackageVersion Include="Microsoft.Extensions.Hosting.WindowsServices" Version="10.0.13" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="10.0.13" />
<PackageVersion Include="Microsoft.Extensions.Logging.Debug" Version="10.0.13" />
<PackageVersion Include="MessagingService.IntegrationTesting.Helpers" Version="2026.10.3.157" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.14" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.14" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.14" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.14" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.14" />
<PackageVersion Include="Microsoft.Extensions.Hosting.WindowsServices" Version="10.0.14" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="10.0.14" />
<PackageVersion Include="Microsoft.Extensions.Logging.Debug" Version="10.0.14" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.11.0" />
<PackageVersion Include="Microsoft.Testing.Extensions.TrxReport" Version="2.5.1" />
<PackageVersion Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.23.0" />
<PackageVersion Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="10.0.2" />
<PackageVersion Include="Imposter" Version="1.0.3" />
<PackageVersion Include="Imposter" Version="1.0.8" />
<PackageVersion Include="NLog.Extensions.Logging" Version="6.2.2" />
<PackageVersion Include="NUnit" Version="5.0.0" />
<PackageVersion Include="NUnit3TestAdapter" Version="6.3.1" />
Expand All @@ -38,15 +38,15 @@
<PackageVersion Include="Reqnroll" Version="3.3.4" />
<PackageVersion Include="Reqnroll.NUnit" Version="3.3.4" />
<PackageVersion Include="Reqnroll.Tools.MsBuild.Generation" Version="3.3.4" />
<PackageVersion Include="SecurityService.Client" Version="2026.10.2.200" />
<PackageVersion Include="SecurityService.IntegrationTesting.Helpers" Version="2026.10.2.200" />
<PackageVersion Include="Shared" Version="2026.10.4" />
<PackageVersion Include="Shared.IntegrationTesting" Version="2026.10.4" />
<PackageVersion Include="Shared.Results.Web" Version="2026.10.4" />
<PackageVersion Include="SecurityService.Client" Version="2026.10.3.204" />
<PackageVersion Include="SecurityService.IntegrationTesting.Helpers" Version="2026.10.3.204" />
<PackageVersion Include="Shared" Version="2026.11.2" />
<PackageVersion Include="Shared.IntegrationTesting" Version="2026.11.2" />
<PackageVersion Include="Shared.Results.Web" Version="2026.11.2" />
<PackageVersion Include="Shouldly" Version="4.3.0" />
<PackageVersion Include="TransactionProcessing.ApiDefaults" Version="2026.10.4" />
<PackageVersion Include="TransactionProcessor.Client" Version="2026.10.2.411" />
<PackageVersion Include="TransactionProcessor.IntegrationTesting.Helpers" Version="2026.10.2.411" />
<PackageVersion Include="TransactionProcessing.ApiDefaults" Version="2026.11.2" />
<PackageVersion Include="TransactionProcessor.Client" Version="2026.10.3.412" />
<PackageVersion Include="TransactionProcessor.IntegrationTesting.Helpers" Version="2026.10.3.412" />
<PackageVersion Include="Sentry.AspNetCore" Version="6.12.1" />
<PackageVersion Include="xunit.v3" Version="4.0.2" />
<PackageVersion Include="xunit.runner.visualstudio" Version="4.0.1" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ public override ContainerBuilder SetupKurrentDbContainer()
{
this.Trace("About to Start Kurrent Db Container");

(String imageName, Boolean useLatest) imageDetails = this.GetImageDetails(ContainerType.KurrentDb).Data;

Dictionary<String, String> environmentVariables = new(){
{"EVENTSTORE_RUN_PROJECTIONS","all"},
{"EVENTSTORE_START_STANDARD_PROJECTIONS","true"},
Expand All @@ -83,7 +85,7 @@ public override ContainerBuilder SetupKurrentDbContainer()
{"KURRENTDB_PREPARE_TIMEOUT_MS","30000"},
{"KURRENTDB_COMMIT_TIMEOUT_MS","30000"},
};
ContainerBuilder eventStoreContainer = new();
ContainerBuilder eventStoreContainer = new(imageDetails.imageName);

if (!this.IsSecureKurrentDb)
{
Expand All @@ -108,13 +110,12 @@ public override ContainerBuilder SetupKurrentDbContainer()
String logfilePath = "/var/log/kurrentdb";
eventStoreContainer = eventStoreContainer.MountHostFolder(this.HostTraceFolder, logfilePath);

(String imageName, Boolean useLatest) imageDetails = this.GetImageDetails(ContainerType.KurrentDb).Data;

this.Trace($"About to Start Kurrent Db Container using image [{imageDetails.imageName}]");



eventStoreContainer = eventStoreContainer.WithName(this.KurrentDbContainerName) // similar to WithName()
.WithImage(imageDetails.imageName)
.WithEnvironment(environmentVariables)
.WithPortBinding(DockerPorts.KurrentDbHttpDockerPort, true);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,10 @@ public async Task StartSystem()
{
// Initialise a logger
String scenarioName = this.ScenarioContext.ScenarioInfo.Title.Replace(" ", String.Empty);
NlogLogger logger = new NlogLogger();
NlogLogger logger = new();
logger.Initialise(LogManager.GetLogger(scenarioName), scenarioName);
LogManager.AddHiddenAssembly(typeof(NlogLogger).Assembly);
LogManager.Setup().SetupLogFactory(setup =>
setup.AddCallSiteHiddenAssembly(typeof(NlogLogger).Assembly));

DockerServices dockerServices = DockerServices.CallbackHandler | DockerServices.KurrentDb |
DockerServices.FileProcessor | DockerServices.MessagingService | DockerServices.SecurityService |
Expand Down
17 changes: 11 additions & 6 deletions TransactionProcessorACL.Tests/Handlers/ReportingHandlersTests.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
using Ductus.FluentDocker.Common;
using System;
using System.Security.Claims;
using System.Threading;
using System.Threading.Tasks;
using MediatR;
using Imposter.Abstractions;
using Shared.Logger;
using Shouldly;
using SimpleResults;
using TransactionProcessorACL.BusinessLogic.Requests;
Expand All @@ -15,6 +17,9 @@ namespace TransactionProcessorACL.Tests.Handlers;

public class ReportingHandlersTests
{
public ReportingHandlersTests() {
Shared.Logger.Logger.Initialise(new NullLogger());
}
[Fact]
public async Task GetMerchantDailyPerformanceSummary_PassesEstateClaimAndRequestToMediator()
{
Expand All @@ -34,7 +39,7 @@ public async Task GetMerchantDailyPerformanceSummary_PassesEstateClaimAndRequest

var mediator = new IMediatorImposter(ImposterMode.Explicit);
mediator
.Send<Result<TransactionProcessorACL.Models.MerchantDailyPerformanceSummaryResponse>>(Arg<MediatR.IRequest<Result<TransactionProcessorACL.Models.MerchantDailyPerformanceSummaryResponse>>>.Any(), Arg<CancellationToken>.Any())
.Send<SimpleResults.Result<TransactionProcessorACL.Models.MerchantDailyPerformanceSummaryResponse>>(Arg<MediatR.IRequest<SimpleResults.Result<TransactionProcessorACL.Models.MerchantDailyPerformanceSummaryResponse>>>.Any(), Arg<CancellationToken>.Any())
.ReturnsAsync(Result.Success(new TransactionProcessorACL.Models.MerchantDailyPerformanceSummaryResponse()))
.Callback((payload, _) => { capturedQuery = (ReportingQueries.GetMerchantDailyPerformanceSummaryQuery)payload; return Task.CompletedTask; });

Expand All @@ -44,7 +49,7 @@ public async Task GetMerchantDailyPerformanceSummary_PassesEstateClaimAndRequest
capturedQuery.ShouldNotBeNull();
capturedQuery!.EstateId.ShouldBe(Guid.Parse("1C8354B7-B97A-46EA-9AD1-C43F33F7E3C3"));
capturedQuery.Request.MerchantReportingId.ShouldBe(12345);
mediator.Send<Result<TransactionProcessorACL.Models.MerchantDailyPerformanceSummaryResponse>>(Arg<MediatR.IRequest<Result<TransactionProcessorACL.Models.MerchantDailyPerformanceSummaryResponse>>>.Any(), Arg<CancellationToken>.Any()).Called(Count.Once());
mediator.Send<SimpleResults.Result<TransactionProcessorACL.Models.MerchantDailyPerformanceSummaryResponse>>(Arg<MediatR.IRequest<SimpleResults.Result<TransactionProcessorACL.Models.MerchantDailyPerformanceSummaryResponse>>>.Any(), Arg<CancellationToken>.Any()).Called(Count.Once());
}

[Fact]
Expand All @@ -69,7 +74,7 @@ public async Task GetMerchantTransactionMixSummary_PassesEstateClaimAndRequestTo

var mediator = new IMediatorImposter(ImposterMode.Explicit);
mediator
.Send<Result<TransactionProcessorACL.Models.MerchantTransactionMixSummaryResponse>>(Arg<MediatR.IRequest<Result<TransactionProcessorACL.Models.MerchantTransactionMixSummaryResponse>>>.Any(), Arg<CancellationToken>.Any())
.Send<SimpleResults.Result<TransactionProcessorACL.Models.MerchantTransactionMixSummaryResponse>>(Arg<MediatR.IRequest<SimpleResults.Result<TransactionProcessorACL.Models.MerchantTransactionMixSummaryResponse>>>.Any(), Arg<CancellationToken>.Any())
.ReturnsAsync(Result.Success(new TransactionProcessorACL.Models.MerchantTransactionMixSummaryResponse()))
.Callback((payload, _) => { capturedQuery = (ReportingQueries.GetMerchantTransactionMixSummaryQuery)payload; return Task.CompletedTask; });

Expand All @@ -81,7 +86,7 @@ public async Task GetMerchantTransactionMixSummary_PassesEstateClaimAndRequestTo
capturedQuery.Request.MerchantReportingId.ShouldBe(12345);
capturedQuery.Request.Breakdown.ShouldBe(TransactionMixBreakdown.Product);
capturedQuery.Request.Measure.ShouldBe(TransactionMixMeasure.Count);
mediator.Send<Result<TransactionProcessorACL.Models.MerchantTransactionMixSummaryResponse>>(Arg<MediatR.IRequest<Result<TransactionProcessorACL.Models.MerchantTransactionMixSummaryResponse>>>.Any(), Arg<CancellationToken>.Any()).Called(Count.Once());
mediator.Send<SimpleResults.Result<TransactionProcessorACL.Models.MerchantTransactionMixSummaryResponse>>(Arg<MediatR.IRequest<SimpleResults.Result<TransactionProcessorACL.Models.MerchantTransactionMixSummaryResponse>>>.Any(), Arg<CancellationToken>.Any()).Called(Count.Once());
}

[Fact]
Expand All @@ -105,7 +110,7 @@ public async Task GetRecentActivityReceiptSearch_PassesEstateClaimAndRequestToMe

var mediator = new IMediatorImposter(ImposterMode.Explicit);
mediator
.Send<Result<TransactionProcessorACL.Models.RecentActivityReceiptSearchResponse>>(Arg<MediatR.IRequest<Result<TransactionProcessorACL.Models.RecentActivityReceiptSearchResponse>>>.Any(), Arg<CancellationToken>.Any())
.Send<SimpleResults.Result<TransactionProcessorACL.Models.RecentActivityReceiptSearchResponse>>(Arg<MediatR.IRequest<SimpleResults.Result<TransactionProcessorACL.Models.RecentActivityReceiptSearchResponse>>>.Any(), Arg<CancellationToken>.Any())
.ReturnsAsync(Result.Success(new TransactionProcessorACL.Models.RecentActivityReceiptSearchResponse()))
.Callback((payload, _) => { capturedQuery = (ReportingQueries.GetRecentActivityReceiptSearchQuery)payload; return Task.CompletedTask; });

Expand All @@ -119,6 +124,6 @@ public async Task GetRecentActivityReceiptSearch_PassesEstateClaimAndRequestToMe
capturedQuery.Request.SearchText.ShouldBe("abc");
capturedQuery.Request.PageNumber.ShouldBe(2);
capturedQuery.Request.PageSize.ShouldBe(5);
mediator.Send<Result<TransactionProcessorACL.Models.RecentActivityReceiptSearchResponse>>(Arg<MediatR.IRequest<Result<TransactionProcessorACL.Models.RecentActivityReceiptSearchResponse>>>.Any(), Arg<CancellationToken>.Any()).Called(Count.Once());
mediator.Send<SimpleResults.Result<TransactionProcessorACL.Models.RecentActivityReceiptSearchResponse>>(Arg<MediatR.IRequest<SimpleResults.Result<TransactionProcessorACL.Models.RecentActivityReceiptSearchResponse>>>.Any(), Arg<CancellationToken>.Any()).Called(Count.Once());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Threading.Tasks;
using MediatR;
using Imposter.Abstractions;
using Shared.Logger;
using Shouldly;
using SimpleResults;
using TransactionProcessorACL.BusinessLogic.Requests;
Expand All @@ -17,6 +18,10 @@ namespace TransactionProcessorACL.Tests.Handlers;

public class TransactionHandlersTests
{
public TransactionHandlersTests() {
Shared.Logger.Logger.Initialise(new NullLogger());
}

[Fact]
public async Task PerformSaleTransaction_PassesBusinessFieldsIntoCommand()
{
Expand Down
6 changes: 4 additions & 2 deletions TransactionProcessorACL/Common/RequestAuditMiddleware.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using NLog;
using System;

namespace TransactionProcessorACL.Common;

Expand All @@ -19,15 +20,16 @@ public async Task InvokeAsync(HttpContext context)
{
RequestAuditContext requestAuditContext = RequestAuditContextFactory.CreateForRequest(context);
_accessor.Current = requestAuditContext;
MappedDiagnosticsLogicalContext.Set("CorrelationId", requestAuditContext.RequestId);
IDisposable pushResult = ScopeContext.PushProperty("CorrelationId", requestAuditContext.RequestId);

try
{
await _next(context).ConfigureAwait(false);
}
finally
{
_accessor.Current = null;
MappedDiagnosticsLogicalContext.Remove("CorrelationId");
pushResult.Dispose();
}
}
}
4 changes: 3 additions & 1 deletion TransactionProcessorACL/Handlers/MerchantHandlers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public static async Task<IResult> GetMerchantContracts(IMediator mediator,
string applicationVersion,
CancellationToken cancellationToken)
{
Logger.LogInformation($"Application version {applicationVersion}");
Logger.LogInformation("Application version {ApplicationVersion}", applicationVersion);

Result<(Guid estateId, Guid merchantId)> claimsResult = Helpers.GetRequiredClaims(user);
if (claimsResult.IsFailed)
Expand All @@ -41,6 +41,7 @@ public static async Task<IResult> GetMerchant(IMediator mediator,
string applicationVersion,
CancellationToken cancellationToken)
{
Logger.LogInformation("Application version {ApplicationVersion}", applicationVersion);
Logger.LogWarning("In GetMerchant Handler");

Result<(Guid estateId, Guid merchantId)> claimsResult = Helpers.GetRequiredClaims(user);
Expand All @@ -59,6 +60,7 @@ public static async Task<IResult> GetMerchantSchedule(IMediator mediator,
[FromQuery] Int32 year,
CancellationToken cancellationToken)
{
Logger.LogInformation("Application version {ApplicationVersion}", applicationVersion);
Logger.LogWarning("In GetMerchantSchedule Handler");

Result<(Guid estateId, Guid merchantId)> claimsResult = Helpers.GetRequiredClaims(user);
Expand Down
7 changes: 7 additions & 0 deletions TransactionProcessorACL/Handlers/ReportingHandlers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using MediatR;
using Microsoft.AspNetCore.Http;
using Shared.General;
using Shared.Logger;
using Shared.Results.Web;
using SimpleResults;
using TransactionProcessorACL.BusinessLogic.Requests;
Expand All @@ -22,6 +23,8 @@ public static async Task<IResult> GetMerchantDailyPerformanceSummary(ClaimsPrinc
IMediator mediator,
CancellationToken cancellationToken)
{
Logger.LogInformation("Application version {ApplicationVersion}", request.ApplicationVersion);

Result<System.Guid> estateIdResult = Helpers.GetRequiredEstateClaim(user);
if (estateIdResult.IsFailed)
return ResponseFactory.FromResult(Result.Forbidden());
Expand Down Expand Up @@ -54,6 +57,8 @@ public static async Task<IResult> GetMerchantTransactionMixSummary(ClaimsPrincip
IMediator mediator,
CancellationToken cancellationToken)
{
Logger.LogInformation("Application version {ApplicationVersion}", request.ApplicationVersion);

Result<System.Guid> estateIdResult = Helpers.GetRequiredEstateClaim(user);
if (estateIdResult.IsFailed)
return ResponseFactory.FromResult(Result.Forbidden());
Expand Down Expand Up @@ -93,6 +98,8 @@ public static async Task<IResult> GetRecentActivityReceiptSearch(ClaimsPrincipal
IMediator mediator,
CancellationToken cancellationToken)
{
Logger.LogInformation("Application version {ApplicationVersion}", request.ApplicationVersion);

Result<System.Guid> estateIdResult = Helpers.GetRequiredEstateClaim(user);
if (estateIdResult.IsFailed)
return ResponseFactory.FromResult(Result.Forbidden());
Expand Down
Loading
Loading