From aec9c9095589064ddb22098a24624504d4877992 Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Sat, 19 Jul 2025 13:35:36 +0100 Subject: [PATCH 1/3] Refactor database context resolution in ReportingManager Updated ReportingManager to use IDbContextResolver for context resolution. Adjusted connection string in ControllerTestsBase to use TransactionProcessorReadModel. Modified CustomWebApplicationFactory to align with new context resolution. Replaced Guid.NewGuid() with this.TestId in multiple test files for consistency and reliability. Ensured all tests utilize the new context resolution and connection string updates. --- .../ReportingManager.cs | 76 ++++++----- .../ControllerTestsBase.cs | 4 +- .../CustomWebApplicationFactory.cs | 35 ++++- .../DimensionControllerTests.cs | 28 ++-- .../FactSettlementsControllerTests.cs | 38 +++--- .../FactTransactionsControllerTests.cs | 121 +++++++++--------- 6 files changed, 173 insertions(+), 129 deletions(-) diff --git a/EstateReportingAPI.BusinessLogic/ReportingManager.cs b/EstateReportingAPI.BusinessLogic/ReportingManager.cs index ff28d64..3333b38 100644 --- a/EstateReportingAPI.BusinessLogic/ReportingManager.cs +++ b/EstateReportingAPI.BusinessLogic/ReportingManager.cs @@ -5,6 +5,7 @@ namespace EstateReportingAPI.BusinessLogic{ using Microsoft.EntityFrameworkCore; using Models; + using Shared.EntityFramework; using System.Linq; using System.Threading; using Calendar = Models.Calendar; @@ -12,18 +13,15 @@ namespace EstateReportingAPI.BusinessLogic{ using Operator = Models.Operator; public class ReportingManager : IReportingManager{ - #region Fields - - private readonly Shared.EntityFramework.IDbContextFactory ContextFactory; + private readonly IDbContextResolver Resolver; + private Guid Id; - - #endregion - + private static readonly String EstateManagementDatabaseName = "TransactionProcessorReadModel"; #region Constructors - public ReportingManager(Shared.EntityFramework.IDbContextFactory contextFactory){ - this.ContextFactory = contextFactory; + public ReportingManager(IDbContextResolver resolver) { + this.Resolver = resolver; } #endregion @@ -32,7 +30,8 @@ public ReportingManager(Shared.EntityFramework.IDbContextFactory> GetUnsettledFees(Guid estateId, DateTime startDate, DateTime endDate, List merchantIds, List operatorIds, List productIds, GroupByOption? groupByOption, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; var fees = (from merchantSettlementFee in context.MerchantSettlementFees join transaction in context.Transactions @@ -132,7 +131,8 @@ into grouped } public async Task> GetCalendarComparisonDates(Guid estateId, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; DateTime startOfYear = new DateTime(DateTime.Now.Year, 1, 1); @@ -159,7 +159,8 @@ public async Task> GetCalendarComparisonDates(Guid estateId, Canc } public async Task> GetCalendarDates(Guid estateId, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; List entities = context.Calendar.Where(c => c.Date <= DateTime.Now.Date).ToList(); @@ -184,15 +185,17 @@ public async Task> GetCalendarDates(Guid estateId, CancellationTo } public async Task> GetCalendarYears(Guid estateId, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); - + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; + List years = context.Calendar.Where(c => c.Date <= DateTime.Now.Date).GroupBy(c => c.Year).Select(y => y.Key).ToList(); return years; } public async Task GetLastSettlement(Guid estateId, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; DateTime settlementDate = await context.SettlementSummary.Where(s => s.IsCompleted).OrderByDescending(s => s.SettlementDate).Select(s => s.SettlementDate).FirstOrDefaultAsync(cancellationToken); @@ -217,7 +220,8 @@ public async Task GetLastSettlement(Guid estateId, CancellationT } public async Task GetMerchantsTransactionKpis(Guid estateId, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; Int32 merchantsWithSaleInLastHour = (from m in context.Merchants where m.LastSaleDate == DateTime.Now.Date @@ -242,7 +246,8 @@ public async Task GetMerchantsTransactionKpis(Guid estateId, Cancel } public async Task> GetMerchantsByLastSale(Guid estateId, DateTime startDateTime, DateTime endDateTime, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; List response = new(); @@ -292,7 +297,8 @@ public async Task> GetMerchantsByLastSale(Guid estateId, DateTime } public async Task> GetResponseCodes(Guid estateId, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; List response = new List(); List responseCodes = await context.ResponseCodes.ToListAsync(cancellationToken); @@ -306,7 +312,8 @@ public async Task> GetResponseCodes(Guid estateId, Cancellati } public async Task GetTodaysFailedSales(Guid estateId, DateTime comparisonDate, String responseCode, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; List todaysSales = await (from t in context.TodayTransactions where t.IsAuthorised == false @@ -377,7 +384,8 @@ private async Task> GetSalesForDate(EstateManagem } public async Task GetTodaysSales(Guid estateId, Int32 merchantReportingId, Int32 operatorReportingId, DateTime comparisonDate, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; IQueryable todaysSales = await GetTodaysSales(context, merchantReportingId, operatorReportingId, cancellationToken); IQueryable comparisonSales = await GetSalesForDate(context, comparisonDate, merchantReportingId, operatorReportingId, cancellationToken); @@ -399,7 +407,8 @@ public async Task GetTodaysSales(Guid estateId, Int32 merchantRepor } public async Task> GetTodaysSalesCountByHour(Guid estateId, Int32 merchantReportingId, Int32 operatorReportingId, DateTime comparisonDate, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; IQueryable todaysSales = await GetTodaysSales(context, merchantReportingId, operatorReportingId, cancellationToken); IQueryable comparisonSales = await GetSalesForDate(context, comparisonDate, merchantReportingId, operatorReportingId, cancellationToken); @@ -435,7 +444,8 @@ on today.Hour equals comparison.Hour } public async Task> GetTodaysSalesValueByHour(Guid estateId, Int32 merchantReportingId, Int32 operatorReportingId, DateTime comparisonDate, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; IQueryable todaysSales = await GetTodaysSales(context, merchantReportingId, operatorReportingId, cancellationToken); IQueryable comparisonSales = await GetSalesForDate(context, comparisonDate, merchantReportingId, operatorReportingId, cancellationToken); @@ -520,7 +530,8 @@ join t in context.TodayTransactions on f.TransactionId equals t.TransactionId } public async Task GetTodaysSettlement(Guid estateId, Int32 merchantReportingId, Int32 operatorReportingId, DateTime comparisonDate, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; IQueryable todaySettlementData = await GetTodaysSettlement(context, merchantReportingId, operatorReportingId, cancellationToken); IQueryable comparisonSettlementData = await GetSettlementDataForDate(context, merchantReportingId, operatorReportingId, comparisonDate, cancellationToken); @@ -560,7 +571,8 @@ group f by f.IsSettled into grouped } public async Task> GetTopBottomData(Guid estateId, TopBottom direction, Int32 resultCount, Dimension dimension, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; IQueryable mainQuery = context.TodayTransactions .Where(joined => joined.IsAuthorised == true @@ -642,7 +654,8 @@ public async Task> GetTopBottomData(Guid estateId, TopBottom } public async Task GetMerchantPerformance(Guid estateId, DateTime comparisonDate, List merchantReportingIds, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; // First we need to get a value of todays sales var todaysSalesQuery = (from t in context.TodayTransactions @@ -700,7 +713,8 @@ private Decimal SafeDivide(Decimal number, Int32 divisor) public async Task GetProductPerformance(Guid estateId, DateTime comparisonDate, List productReportingIds, CancellationToken cancellationToken) { - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; // First we need to get a value of todays sales var todaysSalesQuery = (from t in context.TodayTransactions @@ -738,7 +752,8 @@ public async Task GetProductPerformance(Guid estateId, DateTime com } public async Task GetOperatorPerformance(Guid estateId, DateTime comparisonDate, List operatorReportingIds, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; // First we need to get a value of todays sales var todaysSalesQuery = (from t in context.TodayTransactions @@ -777,7 +792,8 @@ public async Task GetOperatorPerformance(Guid estateId, DateTime co public async Task> TransactionSearch(Guid estateId, TransactionSearchRequest searchRequest, PagingRequest pagingRequest, SortingRequest sortingRequest, CancellationToken cancellationToken){ // Base query before any filtering is added - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; var mainQuery = (from txn in context.Transactions join merchant in context.Merchants on txn.MerchantId equals merchant.MerchantId @@ -875,7 +891,8 @@ join product in context.ContractProducts on txn.ContractProductId equals product } public async Task> GetMerchants(Guid estateId, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; var merchants = context.Merchants .Select(m => new @@ -931,7 +948,8 @@ public async Task> GetMerchants(Guid estateId, CancellationToken } public async Task> GetOperators(Guid estateId, CancellationToken cancellationToken){ - EstateManagementContext? context = await this.ContextFactory.GetContext(estateId, ReportingManager.ConnectionStringIdentifier, cancellationToken); + using ResolvedDbContext? resolvedContext = this.Resolver.Resolve(EstateManagementDatabaseName, estateId.ToString()); + await using EstateManagementContext context = resolvedContext.Context; List operators = await (from o in context.Operators select new Operator diff --git a/EstateReportingAPI.IntegrationTests/ControllerTestsBase.cs b/EstateReportingAPI.IntegrationTests/ControllerTestsBase.cs index 54f38be..2b1a445 100644 --- a/EstateReportingAPI.IntegrationTests/ControllerTestsBase.cs +++ b/EstateReportingAPI.IntegrationTests/ControllerTestsBase.cs @@ -36,13 +36,13 @@ public virtual async Task InitializeAsync() await this.StartSqlContainer(); - String dbConnString = GetLocalConnectionString($"EstateReportingReadModel{this.TestId}"); + String dbConnString = GetLocalConnectionString($"TransactionProcessorReadModel-{this.TestId}"); this.factory = new CustomWebApplicationFactory(dbConnString); this.Client = this.factory.CreateClient(); this.ApiClient = new EstateReportingApiClient((s) => "http://localhost", this.Client); - this.context = new EstateManagementContext(GetLocalConnectionString($"EstateReportingReadModel{this.TestId.ToString()}")); + this.context = new EstateManagementContext(GetLocalConnectionString($"TransactionProcessorReadModel-{this.TestId.ToString()}")); this.helper = new DatabaseHelper(context); await this.helper.CreateStoredProcedures(CancellationToken.None); diff --git a/EstateReportingAPI.IntegrationTests/CustomWebApplicationFactory.cs b/EstateReportingAPI.IntegrationTests/CustomWebApplicationFactory.cs index 8b9db1e..3c4a901 100644 --- a/EstateReportingAPI.IntegrationTests/CustomWebApplicationFactory.cs +++ b/EstateReportingAPI.IntegrationTests/CustomWebApplicationFactory.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using Microsoft.Data.SqlClient; +using Microsoft.Extensions.Configuration; using Shared.Repositories; using TransactionProcessor.Database.Contexts; @@ -24,7 +26,7 @@ namespace EstateReportingAPI.IntegrationTests; public class CustomWebApplicationFactory : WebApplicationFactory where TStartup : class { - private readonly string DatabaseConnectionString; + private string DatabaseConnectionString; public CustomWebApplicationFactory(string databaseConnectionString) { @@ -38,12 +40,37 @@ protected override void ConfigureWebHost(IWebHostBuilder builder) { builder.ConfigureServices(containerBuilder => { + var createcontext = new EstateManagementContext(DatabaseConnectionString); + bool b = createcontext.Database.EnsureCreated(); + b.ShouldBeTrue(); + + SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(DatabaseConnectionString) + { + InitialCatalog = "TransactionProcessorReadModel", + }; + this.DatabaseConnectionString = builder.ToString(); + var context = new EstateManagementContext(DatabaseConnectionString); Func f = connectionString => context; - IDbContextFactory factory = new DbContextFactory(new TestConnectionStringConfigurationRepository(DatabaseConnectionString), f); + //this.DbContextFactory = new Mock>(); + containerBuilder.AddTransient(_ => context); + var serviceProvider = containerBuilder.BuildServiceProvider(); + //var scope = serviceProvider.CreateScope(); + + var inMemorySettings = new Dictionary + { + { "ConnectionStrings:TransactionProcessorReadModel", DatabaseConnectionString } + }; - IReportingManager manager = new ReportingManager(factory); + IConfiguration configuration = new ConfigurationBuilder() + .AddInMemoryCollection(inMemorySettings) + .Build(); + + IDbContextResolver resolver = new DbContextResolver(serviceProvider, configuration); + //IDbContextFactory factory = new DbContextFactory(new TestConnectionStringConfigurationRepository(DatabaseConnectionString), f); + + IReportingManager manager = new ReportingManager(resolver); containerBuilder.AddSingleton(manager); @@ -52,9 +79,7 @@ protected override void ConfigureWebHost(IWebHostBuilder builder) containerBuilder.AddAuthentication(TestAuthHandler.AuthenticationScheme) .AddScheme(TestAuthHandler.AuthenticationScheme, options => { }); - bool b = context.Database.EnsureCreated(); - b.ShouldBeTrue(); }); } diff --git a/EstateReportingAPI.IntegrationTests/DimensionControllerTests.cs b/EstateReportingAPI.IntegrationTests/DimensionControllerTests.cs index ffd99fa..9746795 100644 --- a/EstateReportingAPI.IntegrationTests/DimensionControllerTests.cs +++ b/EstateReportingAPI.IntegrationTests/DimensionControllerTests.cs @@ -20,7 +20,7 @@ public class DimensionsControllerTests : ControllerTestsBase [Fact] public async Task DimensionsController_GetCalendarYears_NoDataInDatabase() { - var yearsResult = await ApiClient.GetCalendarYears(string.Empty, Guid.NewGuid(), CancellationToken.None); + var yearsResult = await ApiClient.GetCalendarYears(string.Empty, this.TestId, CancellationToken.None); yearsResult.IsFailed.ShouldBeTrue(); } @@ -40,7 +40,7 @@ public async Task DimensionsController_GetCalendarYears_YearsReturned() await helper.AddCalendarYear(year); } - var result = await ApiClient.GetCalendarYears(string.Empty, Guid.NewGuid(), CancellationToken.None); + var result = await ApiClient.GetCalendarYears(string.Empty, this.TestId, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var years = result.Data; years.ShouldNotBeNull(); @@ -53,7 +53,7 @@ public async Task DimensionsController_GetCalendarComparisonDates_DatesReturned( List datesInYear = helper.GetDatesForYear(DateTime.Now.Year); await helper.AddCalendarDates(datesInYear); - Result> result = await ApiClient.GetComparisonDates(string.Empty, Guid.NewGuid(), CancellationToken.None); + Result> result = await ApiClient.GetComparisonDates(string.Empty, this.TestId, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); List dates = result.Data; List expectedDates = datesInYear.Where(d => d <= DateTime.Now.Date.AddDays(-1)).ToList(); @@ -73,7 +73,7 @@ public async Task DimensionsController_GetCalendarComparisonDates_DatesReturned( [Fact] public async Task DimensionsController_GetCalendarComparisonDates_NoDataInDatabase() { - var result= await ApiClient.GetComparisonDates(string.Empty, Guid.NewGuid(), CancellationToken.None); + var result= await ApiClient.GetComparisonDates(string.Empty, this.TestId, CancellationToken.None); result.IsFailed.ShouldBeTrue();; } @@ -83,7 +83,7 @@ public async Task DimensionsController_GetCalendarDates_DatesReturned() List datesInYear = helper.GetDatesForYear(2023); await helper.AddCalendarDates(datesInYear); - var datesResult = await ApiClient.GetCalendarDates(string.Empty, Guid.NewGuid(), 2023, CancellationToken.None); + var datesResult = await ApiClient.GetCalendarDates(string.Empty, this.TestId, 2023, CancellationToken.None); datesResult.IsSuccess.ShouldBeTrue(); var dates = datesResult.Data; @@ -100,13 +100,13 @@ public async Task DimensionsController_GetCalendarDates_DatesReturned() [Fact] public async Task DimensionsController_GetCalendarDates_NoDataInDatabase() { - var datesResult = await ApiClient.GetCalendarDates(string.Empty, Guid.NewGuid(), 2023, CancellationToken.None); + var datesResult = await ApiClient.GetCalendarDates(string.Empty, this.TestId, 2023, CancellationToken.None); datesResult.IsFailed.ShouldBeTrue(); } [Fact] public async Task DimensionsController_GetMerchants_NoData_NoMerchantsReturned() { - var result = await ApiClient.GetMerchants(string.Empty, Guid.NewGuid(), CancellationToken.None); + var result = await ApiClient.GetMerchants(string.Empty, this.TestId, CancellationToken.None); result.IsFailed.ShouldBeTrue(); } @@ -120,7 +120,7 @@ public async Task DimensionsController_GetMerchants_NoAddresses_MerchantsReturne await helper.AddMerchant("Test Estate", $"Test Merchant {i}", DateTime.Now); } - var result = await ApiClient.GetMerchants(string.Empty, Guid.NewGuid(), CancellationToken.None); + var result = await ApiClient.GetMerchants(string.Empty, this.TestId, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var merchants = result.Data; @@ -150,7 +150,7 @@ public async Task DimensionsController_GetMerchants_EachMerchantHasOneAddress_Me await helper.AddMerchant("Test Estate", $"Test Merchant {i}", DateTime.Now, addressList); } - var result = await ApiClient.GetMerchants(string.Empty, Guid.NewGuid(), CancellationToken.None); + var result = await ApiClient.GetMerchants(string.Empty, this.TestId, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var merchants = result.Data; @@ -181,7 +181,7 @@ public async Task DimensionsController_GetMerchants_EachMerchantHasTwoAddress_Me await helper.AddMerchant("Test Estate", $"Test Merchant {i}", DateTime.Now, addressList); } - var result = await ApiClient.GetMerchants(string.Empty, Guid.NewGuid(), CancellationToken.None); + var result = await ApiClient.GetMerchants(string.Empty, this.TestId, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var merchants = result.Data; @@ -200,7 +200,7 @@ public async Task DimensionsController_GetMerchants_EachMerchantHasTwoAddress_Me [Fact] public async Task DimensionsController_GetOperators_NoData_NoOperatorsReturned() { - Result> result = await ApiClient.GetOperators(string.Empty, Guid.NewGuid(), CancellationToken.None); + Result> result = await ApiClient.GetOperators(string.Empty, this.TestId, CancellationToken.None); result.IsFailed.ShouldBeTrue(); } @@ -213,7 +213,7 @@ public async Task DimensionsController_GetOperators_OperatorsReturned() Int32 operator2ReportingId = await this.helper.AddOperator("Test Estate", "Operator2"); Int32 operator3ReportingId = await this.helper.AddOperator("Test Estate", "Operator3"); - var result = await ApiClient.GetOperators(string.Empty, Guid.NewGuid(), CancellationToken.None); + var result = await ApiClient.GetOperators(string.Empty, this.TestId, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var operators = result.Data; @@ -244,7 +244,7 @@ public async Task DimensionsController_GetResponseCodes_ResponseCodesReturned() await helper.AddResponseCode(1002, "Unknown Merchant"); await helper.AddResponseCode(1003, "No Devices Configured"); - var result = await ApiClient.GetResponseCodes(string.Empty, Guid.NewGuid(), CancellationToken.None); + var result = await ApiClient.GetResponseCodes(string.Empty, this.TestId, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var responseCodes = result.Data; @@ -261,7 +261,7 @@ public async Task DimensionsController_GetResponseCodes_ResponseCodesReturned() [Fact] public async Task DimensionsController_GetResponseCodes_NoData_NoResponseCodesReturned() { - var result = await ApiClient.GetResponseCodes(string.Empty, Guid.NewGuid(), CancellationToken.None); + var result = await ApiClient.GetResponseCodes(string.Empty, this.TestId, CancellationToken.None); result.IsFailed.ShouldBeTrue(); } diff --git a/EstateReportingAPI.IntegrationTests/FactSettlementsControllerTests.cs b/EstateReportingAPI.IntegrationTests/FactSettlementsControllerTests.cs index 4fceaf2..cb0de31 100644 --- a/EstateReportingAPI.IntegrationTests/FactSettlementsControllerTests.cs +++ b/EstateReportingAPI.IntegrationTests/FactSettlementsControllerTests.cs @@ -107,7 +107,7 @@ public async Task FactSettlementsController_TodaysSettlement_SettlementReturned( await helper.RunTodaysTransactionsSummaryProcessing(todaysDate.Date.AddDays(-1)); await helper.RunSettlementSummaryProcessing(comparisonDate.Date); - var result = await ApiClient.GetTodaysSettlement(string.Empty, Guid.NewGuid(), 0, 0, DateTime.Now.AddDays(-1), CancellationToken.None); + var result = await ApiClient.GetTodaysSettlement(string.Empty, this.TestId, 0, 0, DateTime.Now.AddDays(-1), CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var todaysSettlement = result.Data; todaysSettlement.ShouldNotBeNull(); @@ -192,7 +192,7 @@ public async Task FactSettlementsController_TodaysSettlement_MerchantFilter_Sett await helper.RunTodaysTransactionsSummaryProcessing(todaysDate.Date.AddDays(-1)); await helper.RunSettlementSummaryProcessing(comparisonDate.Date); - var result = await ApiClient.GetTodaysSettlement(string.Empty, Guid.NewGuid(), 1, 0, DateTime.Now.AddDays(-1), CancellationToken.None); + var result = await ApiClient.GetTodaysSettlement(string.Empty, this.TestId, 1, 0, DateTime.Now.AddDays(-1), CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var todaysSettlement = result.Data; todaysSettlement.ShouldNotBeNull(); @@ -280,7 +280,7 @@ public async Task FactSettlementsController_TodaysSettlement_OperatorFilter_Sett await helper.RunTodaysTransactionsSummaryProcessing(todaysDate.Date.AddDays(-1)); await helper.RunSettlementSummaryProcessing(comparisonDate.Date); - var result = await ApiClient.GetTodaysSettlement(string.Empty, Guid.NewGuid(), 0, 1, DateTime.Now.AddDays(-1), CancellationToken.None); + var result = await ApiClient.GetTodaysSettlement(string.Empty, this.TestId, 0, 1, DateTime.Now.AddDays(-1), CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var todaysSettlement = result.Data; todaysSettlement.ShouldNotBeNull(); @@ -297,7 +297,7 @@ public async Task FactSettlementsController_TodaysSettlement_OperatorFilter_Sett [Fact] public async Task FactSettlementsController_LastSettlement_SettlementReturned() { - EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"EstateReportingReadModel{TestId.ToString()}")); + EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"TransactionProcessorReadModel-{TestId.ToString()}")); DatabaseHelper helper = new DatabaseHelper(context); @@ -329,7 +329,7 @@ public async Task FactSettlementsController_LastSettlement_SettlementReturned() await helper.RunSettlementSummaryProcessing(DateTime.Now.AddDays(-1)); - var result = await ApiClient.GetLastSettlement(string.Empty, Guid.NewGuid(), CancellationToken.None); + var result = await ApiClient.GetLastSettlement(string.Empty, this.TestId, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var lastSettlement = result.Data; @@ -341,13 +341,13 @@ public async Task FactSettlementsController_LastSettlement_SettlementReturned() [Fact] public async Task FactSettlementsController_LastSettlement_NoSettlementRecords_SettlementReturned() { - EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"EstateReportingReadModel{TestId.ToString()}")); + EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"TransactionProcessorReadModel-{TestId.ToString()}")); DatabaseHelper helper = new DatabaseHelper(context); await helper.RunSettlementSummaryProcessing(DateTime.Now.AddDays(-1)); - var result = await ApiClient.GetLastSettlement(string.Empty, Guid.NewGuid(), CancellationToken.None); + var result = await ApiClient.GetLastSettlement(string.Empty, this.TestId, CancellationToken.None); result.IsFailed.ShouldBeTrue(); } @@ -355,7 +355,7 @@ public async Task FactSettlementsController_LastSettlement_NoSettlementRecords_S [Fact] public async Task FactSettlementsController_UnsettledFees_ByOperator_SettlementReturned() { // Add some fees over a date range for multiple operators - EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"EstateReportingReadModel{TestId.ToString()}")); + EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"TransactionProcessorReadModel-{TestId.ToString()}")); DatabaseHelper helper = new DatabaseHelper(context); @@ -382,7 +382,7 @@ public async Task FactSettlementsController_UnsettledFees_ByOperator_SettlementR DateTime startDate = dates.Min(); DateTime endDate = dates.Max(); - var result = await ApiClient.GetUnsettledFees(string.Empty, Guid.NewGuid(), startDate, endDate, null, null, null, GroupByOption.Operator, CancellationToken.None); + var result = await ApiClient.GetUnsettledFees(string.Empty, this.TestId, startDate, endDate, null, null, null, GroupByOption.Operator, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var unsettledFees = result.Data; @@ -407,7 +407,7 @@ public async Task FactSettlementsController_UnsettledFees_ByOperator_SettlementR [Fact] public async Task FactSettlementsController_UnsettledFees_ByOperator_OperatorFilter_SettlementReturned() { // Add some fees over a date range for multiple operators - EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"EstateReportingReadModel{TestId.ToString()}")); + EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"TransactionProcessorReadModel-{TestId.ToString()}")); DatabaseHelper helper = new DatabaseHelper(context); @@ -434,7 +434,7 @@ public async Task FactSettlementsController_UnsettledFees_ByOperator_OperatorFil DateTime startDate = dates.Min(); DateTime endDate = dates.Max(); - var result = await ApiClient.GetUnsettledFees(string.Empty, Guid.NewGuid(), startDate, endDate, null, [1], null, GroupByOption.Operator, CancellationToken.None); + var result = await ApiClient.GetUnsettledFees(string.Empty, this.TestId, startDate, endDate, null, [1], null, GroupByOption.Operator, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var unsettledFees = result.Data; @@ -458,7 +458,7 @@ public async Task FactSettlementsController_UnsettledFees_ByOperator_OperatorFil [Fact] public async Task FactSettlementsController_UnsettledFees_ByMerchant_SettlementReturned() { // Add some fees over a date range for multiple operators - EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"EstateReportingReadModel{TestId.ToString()}")); + EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"TransactionProcessorReadModel-{TestId.ToString()}")); DatabaseHelper helper = new DatabaseHelper(context); @@ -484,7 +484,7 @@ public async Task FactSettlementsController_UnsettledFees_ByMerchant_SettlementR DateTime startDate = dates.Min(); DateTime endDate = dates.Max(); - var result = await ApiClient.GetUnsettledFees(string.Empty, Guid.NewGuid(), startDate, endDate, null, null, null, GroupByOption.Merchant, CancellationToken.None); + var result = await ApiClient.GetUnsettledFees(string.Empty, this.TestId, startDate, endDate, null, null, null, GroupByOption.Merchant, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var unsettledFees = result.Data; unsettledFees.ShouldNotBeNull(); @@ -504,7 +504,7 @@ public async Task FactSettlementsController_UnsettledFees_ByMerchant_SettlementR [Fact] public async Task FactSettlementsController_UnsettledFees_ByMerchant_MerchantFilter_SettlementReturned() { // Add some fees over a date range for multiple operators - EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"EstateReportingReadModel{TestId.ToString()}")); + EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"TransactionProcessorReadModel-{TestId.ToString()}")); DatabaseHelper helper = new DatabaseHelper(context); @@ -530,7 +530,7 @@ public async Task FactSettlementsController_UnsettledFees_ByMerchant_MerchantFil DateTime startDate = dates.Min(); DateTime endDate = dates.Max(); - var result = await ApiClient.GetUnsettledFees(string.Empty, Guid.NewGuid(), startDate, endDate, [1], null, null, GroupByOption.Merchant, CancellationToken.None); + var result = await ApiClient.GetUnsettledFees(string.Empty, this.TestId, startDate, endDate, [1], null, null, GroupByOption.Merchant, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var unsettledFees = result.Data; unsettledFees.ShouldNotBeNull(); @@ -549,7 +549,7 @@ public async Task FactSettlementsController_UnsettledFees_ByMerchant_MerchantFil [Fact] public async Task FactSettlementsController_UnsettledFees_ByProduct_SettlementReturned() { // Add some fees over a date range for multiple operators - EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"EstateReportingReadModel{TestId.ToString()}")); + EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"TransactionProcessorReadModel-{TestId.ToString()}")); DatabaseHelper helper = new DatabaseHelper(context); @@ -575,7 +575,7 @@ public async Task FactSettlementsController_UnsettledFees_ByProduct_SettlementRe DateTime startDate = dates.Min(); DateTime endDate = dates.Max(); - var result = await ApiClient.GetUnsettledFees(string.Empty, Guid.NewGuid(), startDate, endDate, null, null, null, GroupByOption.Product, CancellationToken.None); + var result = await ApiClient.GetUnsettledFees(string.Empty, this.TestId, startDate, endDate, null, null, null, GroupByOption.Product, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var unsettledFees = result.Data; @@ -609,7 +609,7 @@ public async Task FactSettlementsController_UnsettledFees_ByProduct_SettlementRe [Fact] public async Task FactSettlementsController_UnsettledFees_ByProduct_ProductFilter_SettlementReturned() { // Add some fees over a date range for multiple operators - EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"EstateReportingReadModel{TestId.ToString()}")); + EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"TransactionProcessorReadModel-{TestId.ToString()}")); DatabaseHelper helper = new DatabaseHelper(context); @@ -635,7 +635,7 @@ public async Task FactSettlementsController_UnsettledFees_ByProduct_ProductFilte DateTime startDate = dates.Min(); DateTime endDate = dates.Max(); - var result = await ApiClient.GetUnsettledFees(string.Empty, Guid.NewGuid(), startDate, endDate, null, null, [1], GroupByOption.Product, CancellationToken.None); + var result = await ApiClient.GetUnsettledFees(string.Empty, this.TestId, startDate, endDate, null, null, [1], GroupByOption.Product, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var unsettledFees = result.Data; diff --git a/EstateReportingAPI.IntegrationTests/FactTransactionsControllerTests.cs b/EstateReportingAPI.IntegrationTests/FactTransactionsControllerTests.cs index 6de2635..7d21fa9 100644 --- a/EstateReportingAPI.IntegrationTests/FactTransactionsControllerTests.cs +++ b/EstateReportingAPI.IntegrationTests/FactTransactionsControllerTests.cs @@ -180,7 +180,7 @@ public async Task FactTransactionsController_GetTopBottomOperatorsByValue_Bottom await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetTopBottomOperatorData(string.Empty, Guid.NewGuid(), DataTransferObjects.TopBottom.Bottom, 3, CancellationToken.None); + var result = await ApiClient.GetTopBottomOperatorData(string.Empty, this.TestId, DataTransferObjects.TopBottom.Bottom, 3, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); List? topBottomOperatorData = result.Data; topBottomOperatorData.ShouldNotBeNull(); @@ -227,7 +227,7 @@ public async Task FactTransactionsController_GetTopBottomOperatorsByValue_TopOpe await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetTopBottomOperatorData(string.Empty, Guid.NewGuid(), DataTransferObjects.TopBottom.Top, 3, CancellationToken.None); + var result = await ApiClient.GetTopBottomOperatorData(string.Empty, this.TestId, DataTransferObjects.TopBottom.Top, 3, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); List? topBottomOperatorData = result.Data; topBottomOperatorData[0].OperatorName.ShouldBe("Safaricom"); @@ -291,7 +291,7 @@ public async Task FactTransactionsControllerController_OperatorPerformance_Singl await helper.RunHistoricTransactionsSummaryProcessing(comparisonDate.Date); await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetOperatorPerformance(string.Empty, Guid.NewGuid(), comparisonDate, operatorFilterList, CancellationToken.None); + var result = await ApiClient.GetOperatorPerformance(string.Empty, this.TestId, comparisonDate, operatorFilterList, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); DataTransferObjects.TodaysSales? todaysSales = result.Data; todaysSales.ShouldNotBeNull(); @@ -355,7 +355,7 @@ public async Task FactTransactionsControllerController_OperatorPerformance_Multi await helper.RunHistoricTransactionsSummaryProcessing(comparisonDate.Date); await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetOperatorPerformance(string.Empty, Guid.NewGuid(), comparisonDate, operatorFilterList, CancellationToken.None); + var result = await ApiClient.GetOperatorPerformance(string.Empty, this.TestId, comparisonDate, operatorFilterList, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); DataTransferObjects.TodaysSales? todaysSales = result.Data; todaysSales.ShouldNotBeNull(); @@ -414,7 +414,7 @@ public async Task FactTransactionsControllerController_ProductPerformance_AllPro await helper.RunHistoricTransactionsSummaryProcessing(comparisonDate.Date); await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetProductPerformance(string.Empty, Guid.NewGuid(), comparisonDate, new List(), CancellationToken.None); + var result = await ApiClient.GetProductPerformance(string.Empty, this.TestId, comparisonDate, new List(), CancellationToken.None); result.IsSuccess.ShouldBeTrue(); DataTransferObjects.TodaysSales? todaysSales = result.Data; todaysSales.ShouldNotBeNull(); @@ -475,7 +475,7 @@ public async Task FactTransactionsControllerController_ProductPerformance_Single string serializedArray = string.Join(",", productFilterList); - var result = await ApiClient.GetProductPerformance(string.Empty, Guid.NewGuid(), comparisonDate, productFilterList, CancellationToken.None); + var result = await ApiClient.GetProductPerformance(string.Empty, this.TestId, comparisonDate, productFilterList, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); DataTransferObjects.TodaysSales? todaysSales = result.Data; todaysSales.ShouldNotBeNull(); @@ -533,7 +533,7 @@ public async Task FactTransactionsControllerController_ProductPerformance_Multip await helper.RunHistoricTransactionsSummaryProcessing(comparisonDate.Date); await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetProductPerformance(string.Empty, Guid.NewGuid(), comparisonDate, productFilterList, CancellationToken.None); + var result = await ApiClient.GetProductPerformance(string.Empty, this.TestId, comparisonDate, productFilterList, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); DataTransferObjects.TodaysSales? todaysSales = result.Data; todaysSales.ShouldNotBeNull(); @@ -575,7 +575,7 @@ public async Task FactTransactionsController_GetTopBottomProductsByValue_BottomP await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetTopBottomProductData(string.Empty, Guid.NewGuid(), DataTransferObjects.TopBottom.Bottom, 3, CancellationToken.None); + var result = await ApiClient.GetTopBottomProductData(string.Empty, this.TestId, DataTransferObjects.TopBottom.Bottom, 3, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); List? topBottomProductData = result.Data; @@ -621,7 +621,7 @@ public async Task FactTransactionsController_GetTopBottomProductsByValue_TopProd await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetTopBottomProductData(string.Empty, Guid.NewGuid(), DataTransferObjects.TopBottom.Top, 3, CancellationToken.None); + var result = await ApiClient.GetTopBottomProductData(string.Empty, this.TestId, DataTransferObjects.TopBottom.Top, 3, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); List? topBottomProductData = result.Data; topBottomProductData[0].ProductName.ShouldBe("200 KES Topup"); @@ -677,7 +677,7 @@ public async Task FactTransactionsControllerController_GetMerchantsByLastDaleDat // Test 1 - sale in last hour startDate = DateTime.Now.AddHours(-1); endDate = DateTime.Now; - var result = await this.ApiClient.GetMerchantsByLastSaleDate(String.Empty, Guid.NewGuid(), startDate, endDate, CancellationToken.None); + var result = await this.ApiClient.GetMerchantsByLastSaleDate(String.Empty, this.TestId, startDate, endDate, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var searchResult = result.Data; searchResult.ShouldNotBeNull(); @@ -690,7 +690,7 @@ public async Task FactTransactionsControllerController_GetMerchantsByLastDaleDat // Test 2 - sale in last day but over an hour ago startDate = DateTime.Now.Date.AddDays(-1); endDate = DateTime.Now.AddHours(-1); - result = await this.ApiClient.GetMerchantsByLastSaleDate(String.Empty, Guid.NewGuid(), startDate, endDate, CancellationToken.None); + result = await this.ApiClient.GetMerchantsByLastSaleDate(String.Empty, this.TestId, startDate, endDate, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; searchResult.ShouldNotBeNull(); @@ -705,7 +705,7 @@ public async Task FactTransactionsControllerController_GetMerchantsByLastDaleDat // Test 3 - sale in last 7 days but non yesterday startDate = DateTime.Now.Date.AddDays(-7); endDate = DateTime.Now.Date.AddDays(-1); - result = await this.ApiClient.GetMerchantsByLastSaleDate(String.Empty, Guid.NewGuid(), startDate, endDate, CancellationToken.None); + result = await this.ApiClient.GetMerchantsByLastSaleDate(String.Empty, this.TestId, startDate, endDate, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; searchResult.ShouldNotBeNull(); @@ -717,7 +717,7 @@ public async Task FactTransactionsControllerController_GetMerchantsByLastDaleDat // Test 4 - sale more than 7 days ago startDate = DateTime.Now.Date.AddYears(-1); endDate = DateTime.Now.Date.AddDays(-7); - result = await this.ApiClient.GetMerchantsByLastSaleDate(String.Empty, Guid.NewGuid(), startDate, endDate, CancellationToken.None); + result = await this.ApiClient.GetMerchantsByLastSaleDate(String.Empty, this.TestId, startDate, endDate, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; searchResult.ShouldNotBeNull(); @@ -759,7 +759,7 @@ public async Task FactTransactionsControllerController_GetMerchantsTransactionKp await helper.AddMerchant("Test Estate", "Merchant 17", todaysDateTime.AddDays(-10)); await helper.AddMerchant("Test Estate", "Merchant 18", todaysDateTime.AddDays(-10)); - var result = await ApiClient.GetMerchantKpi(string.Empty, Guid.NewGuid(), CancellationToken.None); + var result = await ApiClient.GetMerchantKpi(string.Empty, this.TestId, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); DataTransferObjects.MerchantKpi? merchantKpi = result.Data; merchantKpi.ShouldNotBeNull(); @@ -793,7 +793,7 @@ public async Task FactTransactionsController_GetTopBottomMerchantsByValue_Bottom await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetTopBottomMerchantData(string.Empty, Guid.NewGuid(), DataTransferObjects.TopBottom.Bottom, 3, CancellationToken.None); + var result = await ApiClient.GetTopBottomMerchantData(string.Empty, this.TestId, DataTransferObjects.TopBottom.Bottom, 3, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); List? topBottomMerchantData = result.Data; topBottomMerchantData.ShouldNotBeNull(); @@ -829,7 +829,7 @@ public async Task FactTransactionsController_GetTopBottomMerchantsByValue_TopMer await this.helper.AddTransactionsX(transactionsDictionary.Values.SelectMany(t => t).ToList()); await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetTopBottomMerchantData(string.Empty, Guid.NewGuid(), DataTransferObjects.TopBottom.Top, 3, CancellationToken.None); + var result = await ApiClient.GetTopBottomMerchantData(string.Empty, this.TestId, DataTransferObjects.TopBottom.Top, 3, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); List? topBottomMerchantData = result.Data; topBottomMerchantData.ShouldNotBeNull(); @@ -890,7 +890,7 @@ public async Task FactTransactionsControllerController_MerchantPerformance_AllMe await helper.RunHistoricTransactionsSummaryProcessing(comparisonDate.Date); await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetMerchantPerformance(string.Empty, Guid.NewGuid(), comparisonDate, new List(), CancellationToken.None); + var result = await ApiClient.GetMerchantPerformance(string.Empty, this.TestId, comparisonDate, new List(), CancellationToken.None); result.IsSuccess.ShouldBeTrue(); DataTransferObjects.TodaysSales? todaysSales = result.Data; todaysSales.ShouldNotBeNull(); @@ -956,7 +956,7 @@ public async Task FactTransactionsControllerController_MerchantPerformance_Singl await helper.RunHistoricTransactionsSummaryProcessing(comparisonDate.Date); await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetMerchantPerformance(string.Empty, Guid.NewGuid(), comparisonDate, merchantFilterList, CancellationToken.None); + var result = await ApiClient.GetMerchantPerformance(string.Empty, this.TestId, comparisonDate, merchantFilterList, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); DataTransferObjects.TodaysSales? todaysSales = result.Data; todaysSales.ShouldNotBeNull(); @@ -1022,7 +1022,7 @@ public async Task FactTransactionsControllerController_TodaysSales_SalesReturned await helper.RunHistoricTransactionsSummaryProcessing(comparisonDate.Date); await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetTodaysSales(string.Empty, Guid.NewGuid(), 0, 0, comparisonDate, CancellationToken.None); + var result = await ApiClient.GetTodaysSales(string.Empty, this.TestId, 0, 0, comparisonDate, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var todaysSales = result.Data; @@ -1080,7 +1080,7 @@ public async Task FactTransactionsControllerController_TodaysSales_OperatorFilte await helper.RunHistoricTransactionsSummaryProcessing(comparisonDate.Date); await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetTodaysSales(string.Empty, Guid.NewGuid(), 0, 1, comparisonDate, CancellationToken.None); + var result = await ApiClient.GetTodaysSales(string.Empty, this.TestId, 0, 1, comparisonDate, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var todaysSales = result.Data; @@ -1140,7 +1140,7 @@ public async Task FactTransactionsControllerController_TodaysSales_MerchantFilte await helper.RunHistoricTransactionsSummaryProcessing(comparisonDate.Date); await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetTodaysSales(string.Empty, Guid.NewGuid(), 1, 0, comparisonDate, CancellationToken.None); + var result = await ApiClient.GetTodaysSales(string.Empty, this.TestId, 1, 0, comparisonDate, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var todaysSales = result.Data; @@ -1226,7 +1226,7 @@ public async Task FactTransactionsControllerController_TodaysSalesCountByHour_Sa this.TestOutputHelper.WriteLine($"Setup Summaries {sw.ElapsedMilliseconds}ms"); sw.Restart(); - var result = await ApiClient.GetTodaysSalesCountByHour(string.Empty, Guid.NewGuid(), 0, 0, comparisonDate, CancellationToken.None); + var result = await ApiClient.GetTodaysSalesCountByHour(string.Empty, this.TestId, 0, 0, comparisonDate, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var todaysSalesCountByHour = result.Data; @@ -1289,7 +1289,7 @@ public async Task FactTransactionsControllerController_TodaysSalesValueByHour_Sa await helper.RunHistoricTransactionsSummaryProcessing(comparisonDate.Date); await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetTodaysSalesValueByHour(string.Empty, Guid.NewGuid(), 0, 0, comparisonDate, CancellationToken.None); + var result = await ApiClient.GetTodaysSalesValueByHour(string.Empty, this.TestId, 0, 0, comparisonDate, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); List? todaysSalesValueByHour = result.Data; foreach (DataTransferObjects.TodaysSalesValueByHour salesValueByHour in todaysSalesValueByHour) { @@ -1305,13 +1305,14 @@ public async Task FactTransactionsControllerController_TodaysSalesValueByHour_Sa [Fact] public async Task FactTransactionsControllerController_TodaysFailedSales_SalesReturned() { - EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"EstateReportingReadModel{TestId.ToString()}")); - var todaysTransactions = new List(); + + EstateManagementContext context = new EstateManagementContext(GetLocalConnectionString($"TransactionProcessorReadModel-{TestId.ToString()}")); + var todaysTransactions = new List(); var comparisonDateTransactions = new List(); - DatabaseHelper helper = new DatabaseHelper(context); + DatabaseHelper helper1 = new DatabaseHelper(context); // TODO: make counts dynamic - DateTime todaysDateTime = DateTime.Now.Date; - todaysDateTime = todaysDateTime.AddHours(12).AddMinutes(30); + DateTime todaysDateTime = DateTime.Now; + //todaysDateTime = todaysDateTime.AddHours(12).AddMinutes(30); Dictionary transactionCounts = new() { { "Test Merchant 1", 3 }, { "Test Merchant 2", 6 }, { "Test Merchant 3", 2 }, { "Test Merchant 4", 0 } }; @@ -1323,14 +1324,14 @@ public async Task FactTransactionsControllerController_TodaysFailedSales_SalesRe foreach ((Guid productId, String productName, Decimal? productValue) product in productList) { var transactionCount = transactionCounts.Single(m => m.Key == merchant.Name).Value; for (int i = 0; i < transactionCount; i++) { - Transaction transaction = await helper.BuildTransactionX(todaysDateTime.AddHours(-1), merchant.MerchantId, contract.operatorId, contract.contractId, product.productId, "1009", product.productValue); + Transaction transaction = await helper1.BuildTransactionX(todaysDateTime.AddHours(-1), merchant.MerchantId, contract.operatorId, contract.contractId, product.productId, "1009", product.productValue); todaysTransactions.Add(transaction); } } } } - await this.helper.AddTransactionsX(todaysTransactions); + await helper1.AddTransactionsX(todaysTransactions); // Comparison Date sales foreach (var merchant in merchantsList) { @@ -1339,21 +1340,21 @@ public async Task FactTransactionsControllerController_TodaysFailedSales_SalesRe foreach ((Guid productId, String productName, Decimal? productValue) product in productList) { var transactionCount = transactionCounts.Single(m => m.Key == merchant.Name).Value; for (int i = 0; i < transactionCount; i++) { - Transaction transaction = await helper.BuildTransactionX(comparisonDate.AddHours(-1), merchant.MerchantId, contract.operatorId, contract.contractId, product.productId, "1009", product.productValue); + Transaction transaction = await helper1.BuildTransactionX(comparisonDate.AddHours(-1), merchant.MerchantId, contract.operatorId, contract.contractId, product.productId, "1009", product.productValue); comparisonDateTransactions.Add(transaction); } } } } - await this.helper.AddTransactionsX(comparisonDateTransactions); + await helper1.AddTransactionsX(comparisonDateTransactions); - await helper.RunTodaysTransactionsSummaryProcessing(comparisonDate.Date); - await helper.RunHistoricTransactionsSummaryProcessing(comparisonDate.Date); - await helper.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); + await helper1.RunTodaysTransactionsSummaryProcessing(comparisonDate.Date); + await helper1.RunHistoricTransactionsSummaryProcessing(comparisonDate.Date); + await helper1.RunTodaysTransactionsSummaryProcessing(todaysDateTime.Date); - var result = await ApiClient.GetTodaysFailedSales(string.Empty, Guid.NewGuid(), 1, 1, "1009", comparisonDate, CancellationToken.None); + var result = await ApiClient.GetTodaysFailedSales(string.Empty, this.TestId, 1, 1, "1009", comparisonDate.Date, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); DataTransferObjects.TodaysSales? todaysSales = result.Data; @@ -1392,7 +1393,7 @@ public async Task FactTransactionsController_TransactionSearch_NoAdditionalFilte DataTransferObjects.TransactionSearchRequest searchRequest = new() { QueryDate = transactionDate }; // No Paging or Sorting - var result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, null, null, null, null, CancellationToken.None); + var result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, null, null, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var searchResult = result.Data; searchResult.Count.ShouldBe(10); @@ -1408,7 +1409,7 @@ public async Task FactTransactionsController_TransactionSearch_NoAdditionalFilte searchResult.Any(s => s.TransactionReportingId == 10).ShouldBeTrue(); - result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, 1, 5, null, null, CancellationToken.None); + result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, 1, 5, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; searchResult.Count.ShouldBe(5); @@ -1418,7 +1419,7 @@ public async Task FactTransactionsController_TransactionSearch_NoAdditionalFilte searchResult.Any(s => s.TransactionReportingId == 4).ShouldBeTrue(); searchResult.Any(s => s.TransactionReportingId == 5).ShouldBeTrue(); - result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, 2, 5, null, null, CancellationToken.None); + result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, 2, 5, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; searchResult.Count.ShouldBe(5); @@ -1456,7 +1457,7 @@ public async Task FactTransactionsController_TransactionSearch_ValueRangeFilteri DataTransferObjects.TransactionSearchRequest searchRequest = new() { QueryDate = transactionDate, ValueRange = new() { StartValue = 100, EndValue = 200 } }; // No Paging - var result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, null, null, null, null, CancellationToken.None); + var result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, null, null, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); List searchResult = result.Data; searchResult.Count.ShouldBe(7); @@ -1468,7 +1469,7 @@ public async Task FactTransactionsController_TransactionSearch_ValueRangeFilteri searchResult.Any(s => s.TransactionReportingId == 7).ShouldBeTrue(); searchResult.Any(s => s.TransactionReportingId == 10).ShouldBeTrue(); - result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, 1, 3, null, null, CancellationToken.None); + result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, 1, 3, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; searchResult.Count.ShouldBe(3); @@ -1476,7 +1477,7 @@ public async Task FactTransactionsController_TransactionSearch_ValueRangeFilteri searchResult.Any(s => s.TransactionReportingId == 3).ShouldBeTrue(); searchResult.Any(s => s.TransactionReportingId == 4).ShouldBeTrue(); - result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, 2, 3, null, null, CancellationToken.None); + result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, 2, 3, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; searchResult.Count.ShouldBe(3); @@ -1511,7 +1512,7 @@ public async Task FactTransactionsController_TransactionSearch_AuthCodeFiltering DataTransferObjects.TransactionSearchRequest searchRequest = new() { QueryDate = transactionDate, AuthCode = "AUTH1235" }; // No Paging - var result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, null, null, null, null, CancellationToken.None); + var result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, null, null, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); List searchResult = result.Data; searchResult.Count.ShouldBe(1); @@ -1545,7 +1546,7 @@ public async Task FactTransactionsController_TransactionSearch_TransactionNumber DataTransferObjects.TransactionSearchRequest searchRequest = new() { QueryDate = transactionDate, TransactionNumber = "0004" }; // No Paging - var result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, null, null, null, null, CancellationToken.None); + var result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, null, null, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); List searchResult = result.Data; @@ -1578,7 +1579,7 @@ public async Task FactTransactionsController_TransactionSearch_ResponseCodeFilte DataTransferObjects.TransactionSearchRequest searchRequest = new() { QueryDate = transactionDate, ResponseCode = "0001" }; // No Paging - var result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, null, null, null, null, CancellationToken.None); + var result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, null, null, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); List searchResult = result.Data; searchResult.Count.ShouldBe(5); @@ -1588,7 +1589,7 @@ public async Task FactTransactionsController_TransactionSearch_ResponseCodeFilte searchResult.Any(s => s.TransactionReportingId == 8).ShouldBeTrue(); searchResult.Any(s => s.TransactionReportingId == 10).ShouldBeTrue(); - result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, 1, 3, null, null, CancellationToken.None); + result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, 1, 3, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; searchResult.Count.ShouldBe(3); @@ -1596,7 +1597,7 @@ public async Task FactTransactionsController_TransactionSearch_ResponseCodeFilte searchResult.Any(s => s.TransactionReportingId == 4).ShouldBeTrue(); searchResult.Any(s => s.TransactionReportingId == 6).ShouldBeTrue(); - result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, 2, 3, null, null, CancellationToken.None); + result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, 2, 3, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; searchResult.Count.ShouldBe(2); @@ -1653,7 +1654,7 @@ public async Task FactTransactionsController_TransactionSearch_MerchantFiltering DataTransferObjects.TransactionSearchRequest searchRequest = new() { QueryDate = transactionDate, Merchants = new List() { 2, 3 } }; // No Paging - var result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, null, null, null, null, CancellationToken.None); + var result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, null, null, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); List searchResult = result.Data; @@ -1671,7 +1672,7 @@ public async Task FactTransactionsController_TransactionSearch_MerchantFiltering searchResult.Count(s => s.MerchantName == "Test Merchant 2").ShouldBe(5); searchResult.Count(s => s.MerchantName == "Test Merchant 3").ShouldBe(5); - result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, 1, 5, null, null, CancellationToken.None); + result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, 1, 5, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; @@ -1684,7 +1685,7 @@ public async Task FactTransactionsController_TransactionSearch_MerchantFiltering searchResult.Count(s => s.MerchantName == "Test Merchant 2").ShouldBe(5); searchResult.Count(s => s.MerchantName == "Test Merchant 3").ShouldBe(0); - result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, 2, 5, null, null, CancellationToken.None); + result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, 2, 5, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; @@ -1741,7 +1742,7 @@ public async Task FactTransactionsController_TransactionSearch_OperatorFiltering DataTransferObjects.TransactionSearchRequest searchRequest = new() { QueryDate = transactionDate, Operators = new List() { 2, 4 } }; // No Paging - var result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, null, null, null, null, CancellationToken.None); + var result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, null, null, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); List searchResult = result.Data; searchResult.Count.ShouldBe(4); @@ -1752,7 +1753,7 @@ public async Task FactTransactionsController_TransactionSearch_OperatorFiltering searchResult.Count(s => s.OperatorName == "Voucher").ShouldBe(2); searchResult.Count(s => s.OperatorName == "PataPawa PrePay").ShouldBe(2); - result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, 1, 2, null, null, CancellationToken.None); + result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, 1, 2, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; searchResult.Count.ShouldBe(2); @@ -1761,7 +1762,7 @@ public async Task FactTransactionsController_TransactionSearch_OperatorFiltering searchResult.Count(s => s.OperatorName == "Voucher").ShouldBe(2); searchResult.Count(s => s.OperatorName == "PataPawa PrePay").ShouldBe(0); - result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, 2, 2, null, null, CancellationToken.None); + result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, 2, 2, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; searchResult.Count.ShouldBe(2); @@ -1806,7 +1807,7 @@ public async Task FactTransactionsController_TransactionSearch_SortingTest_Trans DataTransferObjects.TransactionSearchRequest searchRequest = new() { QueryDate = transactionDate }; // Default Sort - var result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, null, null, null, null, CancellationToken.None); + var result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, null, null, null, null, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); var searchResult = result.Data; searchResult.Count.ShouldBe(3); @@ -1815,7 +1816,7 @@ public async Task FactTransactionsController_TransactionSearch_SortingTest_Trans searchResult[2].TransactionAmount.ShouldBe(300); // Sort By merchant Name ascending - result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, null, null, DataTransferObjects.SortField.MerchantName, SortDirection.Ascending, CancellationToken.None); + result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, null, null, DataTransferObjects.SortField.MerchantName, SortDirection.Ascending, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; searchResult.Count.ShouldBe(3); @@ -1824,7 +1825,7 @@ public async Task FactTransactionsController_TransactionSearch_SortingTest_Trans searchResult[2].MerchantName.ShouldBe("Test Merchant 3"); // Sort By merchant Name descending - result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, null, null, DataTransferObjects.SortField.MerchantName, SortDirection.Descending, CancellationToken.None); + result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, null, null, DataTransferObjects.SortField.MerchantName, SortDirection.Descending, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; searchResult.Count.ShouldBe(3); @@ -1833,7 +1834,7 @@ public async Task FactTransactionsController_TransactionSearch_SortingTest_Trans searchResult[2].MerchantName.ShouldBe("Test Merchant 1"); // Sort By operator Name ascending - result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, null, null, DataTransferObjects.SortField.OperatorName, SortDirection.Ascending, CancellationToken.None); + result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, null, null, DataTransferObjects.SortField.OperatorName, SortDirection.Ascending, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; @@ -1843,7 +1844,7 @@ public async Task FactTransactionsController_TransactionSearch_SortingTest_Trans searchResult[2].OperatorName.ShouldBe("Voucher"); // Sort By operator Name descending - result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, null, null, DataTransferObjects.SortField.OperatorName, SortDirection.Descending, CancellationToken.None); + result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, null, null, DataTransferObjects.SortField.OperatorName, SortDirection.Descending, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; searchResult.Count.ShouldBe(3); @@ -1852,7 +1853,7 @@ public async Task FactTransactionsController_TransactionSearch_SortingTest_Trans searchResult[2].OperatorName.ShouldBe("PataPawa PostPay"); // Sort By transaction amount ascending - result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, null, null, DataTransferObjects.SortField.TransactionAmount, SortDirection.Ascending, CancellationToken.None); + result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, null, null, DataTransferObjects.SortField.TransactionAmount, SortDirection.Ascending, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; searchResult.Count.ShouldBe(3); @@ -1861,7 +1862,7 @@ public async Task FactTransactionsController_TransactionSearch_SortingTest_Trans searchResult[2].TransactionAmount.ShouldBe(300); // Sort By transaction amount descending - result = await ApiClient.TransactionSearch(string.Empty, Guid.NewGuid(), searchRequest, null, null, DataTransferObjects.SortField.TransactionAmount, SortDirection.Descending, CancellationToken.None); + result = await ApiClient.TransactionSearch(string.Empty, this.TestId, searchRequest, null, null, DataTransferObjects.SortField.TransactionAmount, SortDirection.Descending, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); searchResult = result.Data; searchResult.Count.ShouldBe(3); From ac648c9a7371d7f7b844bbdaae0a3684ae1d1d69 Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Sat, 19 Jul 2025 16:23:41 +0100 Subject: [PATCH 2/3] fix bootstrapper test --- .../General/BootstrapperTests.cs | 2 ++ .../Bootstrapper/RepositoryRegistry.cs | 31 +++++++------------ EstateReportingAPI/Startup.cs | 30 +++++++++++------- 3 files changed, 31 insertions(+), 32 deletions(-) diff --git a/EstateReportingAPI.Tests/General/BootstrapperTests.cs b/EstateReportingAPI.Tests/General/BootstrapperTests.cs index 6f13675..da1c3e2 100644 --- a/EstateReportingAPI.Tests/General/BootstrapperTests.cs +++ b/EstateReportingAPI.Tests/General/BootstrapperTests.cs @@ -42,6 +42,8 @@ private IConfigurationRoot SetupMemoryConfiguration() IConfigurationBuilder builder = new ConfigurationBuilder(); configuration.Add("ConnectionStrings:HealthCheck", "HeathCheckConnString"); + configuration.Add("ConnectionStrings:TransactionProcessorReadModel", "TransactionProcessorReadModel"); + configuration.Add("SecurityConfiguration:Authority", "https://127.0.0.1"); configuration.Add("EventStoreSettings:ConnectionString", "https://127.0.0.1:2113"); configuration.Add("EventStoreSettings:ConnectionName", "UnitTestConnection"); diff --git a/EstateReportingAPI/Bootstrapper/RepositoryRegistry.cs b/EstateReportingAPI/Bootstrapper/RepositoryRegistry.cs index f9ba75c..5212855 100644 --- a/EstateReportingAPI/Bootstrapper/RepositoryRegistry.cs +++ b/EstateReportingAPI/Bootstrapper/RepositoryRegistry.cs @@ -5,6 +5,7 @@ namespace EstateReportingAPI.Bootstrapper; using BusinessLogic; using Common; using Lamar; +using Microsoft.EntityFrameworkCore; using Shared.EntityFramework; using Shared.EntityFramework.ConnectionStringConfiguration; using Shared.General; @@ -14,31 +15,21 @@ namespace EstateReportingAPI.Bootstrapper; [ExcludeFromCodeCoverage] public class RepositoryRegistry : ServiceRegistry{ public RepositoryRegistry(){ - - Boolean useConnectionStringConfig = bool.Parse(ConfigurationReader.GetValue("AppSettings", "UseConnectionStringConfig")); - - if (useConnectionStringConfig) + String? inTestMode = Environment.GetEnvironmentVariable("InTestMode"); + if (String.Compare(inTestMode, Boolean.TrueString, StringComparison.InvariantCultureIgnoreCase) != 0) { - String connectionStringConfigurationConnString = ConfigurationReader.GetConnectionString("ConnectionStringConfiguration"); - this.AddSingleton(); - this.AddTransient(c => { return new ConnectionStringConfigurationContext(connectionStringConfigurationConnString); }); + this.AddSingleton(); + } - // TODO: Read this from a the database and set + this.AddSingleton(typeof(IDbContextResolver<>), typeof(DbContextResolver<>)); + if (Startup.WebHostEnvironment.IsEnvironment("IntegrationTest") || Startup.Configuration.GetValue("ServiceOptions:UseInMemoryDatabase") == true) + { + this.AddDbContext(builder => builder.UseInMemoryDatabase("TransactionProcessorReadModel")); } else { - this.AddSingleton(); + this.AddDbContext(options => + options.UseSqlServer(ConfigurationReader.GetConnectionString("TransactionProcessorReadModel"))); } - - String? inTestMode = Environment.GetEnvironmentVariable("InTestMode"); - if (String.Compare(inTestMode, Boolean.TrueString, StringComparison.InvariantCultureIgnoreCase) != 0){ - this.AddSingleton(); - } - - this.AddSingleton, DbContextFactory>(); - - this.AddSingleton>(cont => connectionString => { - return new EstateManagementContext(connectionString); - }); } } \ No newline at end of file diff --git a/EstateReportingAPI/Startup.cs b/EstateReportingAPI/Startup.cs index b2cce86..e65e8aa 100644 --- a/EstateReportingAPI/Startup.cs +++ b/EstateReportingAPI/Startup.cs @@ -43,24 +43,30 @@ public void ConfigureContainer(ServiceRegistry services) services.IncludeRegistry(); services.IncludeRegistry(); + //String? inTestMode = Environment.GetEnvironmentVariable("InTestMode"); + //if (String.Compare(inTestMode, Boolean.TrueString, StringComparison.InvariantCultureIgnoreCase) == 0) + //{ + // services.AddSingleton(); + //} + Container = new Container(services); } - public void ConfigureServices(IServiceCollection services){ - // ConfigurationReader.Initialise(Configuration); - // ServiceRegistry registry = new ServiceRegistry(services); - // registry.IncludeRegistry(); - // registry.IncludeRegistry(); + //public void ConfigureServices(IServiceCollection services){ + // // ConfigurationReader.Initialise(Configuration); + // // ServiceRegistry registry = new ServiceRegistry(services); + // // registry.IncludeRegistry(); + // // registry.IncludeRegistry(); - // Container = new Container(registry); - String? inTestMode = Environment.GetEnvironmentVariable("InTestMode"); - if (String.Compare(inTestMode, Boolean.TrueString, StringComparison.InvariantCultureIgnoreCase) == 0) - { - services.AddSingleton(); - } + // // Container = new Container(registry); + // String? inTestMode = Environment.GetEnvironmentVariable("InTestMode"); + // if (String.Compare(inTestMode, Boolean.TrueString, StringComparison.InvariantCultureIgnoreCase) == 0) + // { + // services.AddSingleton(); + // } - } + //} public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) { From 9d1dea5ba09016636d24a542005b57a5aeb34a54 Mon Sep 17 00:00:00 2001 From: Stuart Ferguson Date: Sat, 19 Jul 2025 16:31:54 +0100 Subject: [PATCH 3/3] fix code review issues --- .../CustomWebApplicationFactory.cs | 33 +------------------ EstateReportingAPI/Startup.cs | 24 +------------- 2 files changed, 2 insertions(+), 55 deletions(-) diff --git a/EstateReportingAPI.IntegrationTests/CustomWebApplicationFactory.cs b/EstateReportingAPI.IntegrationTests/CustomWebApplicationFactory.cs index 3c4a901..2f7c46c 100644 --- a/EstateReportingAPI.IntegrationTests/CustomWebApplicationFactory.cs +++ b/EstateReportingAPI.IntegrationTests/CustomWebApplicationFactory.cs @@ -53,11 +53,9 @@ protected override void ConfigureWebHost(IWebHostBuilder builder) var context = new EstateManagementContext(DatabaseConnectionString); Func f = connectionString => context; - //this.DbContextFactory = new Mock>(); containerBuilder.AddTransient(_ => context); var serviceProvider = containerBuilder.BuildServiceProvider(); - //var scope = serviceProvider.CreateScope(); - + var inMemorySettings = new Dictionary { { "ConnectionStrings:TransactionProcessorReadModel", DatabaseConnectionString } @@ -68,8 +66,6 @@ protected override void ConfigureWebHost(IWebHostBuilder builder) .Build(); IDbContextResolver resolver = new DbContextResolver(serviceProvider, configuration); - //IDbContextFactory factory = new DbContextFactory(new TestConnectionStringConfigurationRepository(DatabaseConnectionString), f); - IReportingManager manager = new ReportingManager(resolver); containerBuilder.AddSingleton(manager); @@ -86,33 +82,6 @@ protected override void ConfigureWebHost(IWebHostBuilder builder) } -public class TestConnectionStringConfigurationRepository : IConnectionStringConfigurationRepository -{ - private readonly string DbConnectionString; - - public TestConnectionStringConfigurationRepository(String dbConnectionString) - { - DbConnectionString = dbConnectionString; - } - public Task DeleteConnectionStringConfiguration(string externalIdentifier, string connectionStringIdentifier, - CancellationToken cancellationToken) - { - throw new NotImplementedException(); - } - - public async Task GetConnectionString(string externalIdentifier, string connectionStringIdentifier, - CancellationToken cancellationToken) - { - return DbConnectionString; - } - - public Task CreateConnectionString(string externalIdentifier, string connectionStringIdentifier, string connectionString, - CancellationToken cancellationToken) - { - throw new NotImplementedException(); - } -} - public class TestAuthHandlerOptions : AuthenticationSchemeOptions { public string DefaultUserId { get; set; } = null!; diff --git a/EstateReportingAPI/Startup.cs b/EstateReportingAPI/Startup.cs index e65e8aa..670637d 100644 --- a/EstateReportingAPI/Startup.cs +++ b/EstateReportingAPI/Startup.cs @@ -42,32 +42,10 @@ public void ConfigureContainer(ServiceRegistry services) services.IncludeRegistry(); services.IncludeRegistry(); services.IncludeRegistry(); - - //String? inTestMode = Environment.GetEnvironmentVariable("InTestMode"); - //if (String.Compare(inTestMode, Boolean.TrueString, StringComparison.InvariantCultureIgnoreCase) == 0) - //{ - // services.AddSingleton(); - //} - + Container = new Container(services); } - //public void ConfigureServices(IServiceCollection services){ - // // ConfigurationReader.Initialise(Configuration); - // // ServiceRegistry registry = new ServiceRegistry(services); - // // registry.IncludeRegistry(); - // // registry.IncludeRegistry(); - - // // Container = new Container(registry); - // String? inTestMode = Environment.GetEnvironmentVariable("InTestMode"); - // if (String.Compare(inTestMode, Boolean.TrueString, StringComparison.InvariantCultureIgnoreCase) == 0) - // { - // services.AddSingleton(); - // } - - - //} - public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) { if (env.IsDevelopment())