diff --git a/EstateReportingAPI.BusinessLogic.UnitTests/UnitTest1.cs b/EstateReportingAPI.BusinessLogic.UnitTests/UnitTest1.cs index 414d79d..25541a0 100644 --- a/EstateReportingAPI.BusinessLogic.UnitTests/UnitTest1.cs +++ b/EstateReportingAPI.BusinessLogic.UnitTests/UnitTest1.cs @@ -81,4 +81,4 @@ await context.Calendar.AddRangeAsync(new Calendar{ years.ShouldContain(2023); } } -} \ No newline at end of file +} diff --git a/EstateReportingAPI.BusinessLogic/QueryTimingInterceptor.cs b/EstateReportingAPI.BusinessLogic/QueryTimingInterceptor.cs index 950e576..cdbb0ff 100644 --- a/EstateReportingAPI.BusinessLogic/QueryTimingInterceptor.cs +++ b/EstateReportingAPI.BusinessLogic/QueryTimingInterceptor.cs @@ -98,7 +98,7 @@ public ResolvedDbContext Resolve(String connectionStringKey, if (retryOptions != null) { services.AddDbContext(options => { - options.UseSharedSqlServer(ConfigurationReader.GetConnectionString("TransactionProcessorReadModel"), retry => { + options.UseSharedSqlServer(connectionString, retry => { retry.AdditionalTransientErrorNumbers = retryOptions.AdditionalTransientErrorNumbers; retry.MaxRetryCount = retryOptions.MaxRetryCount; retry.MaxRetryDelay = retryOptions.MaxRetryDelay; @@ -109,7 +109,7 @@ public ResolvedDbContext Resolve(String connectionStringKey, else { services.AddDbContext(options => { - options.UseSqlServer(ConfigurationReader.GetConnectionString("TransactionProcessorReadModel"), retry => { retry.EnableRetryOnFailure(); }); + options.UseSqlServer(connectionString, retry => { retry.EnableRetryOnFailure(); }); options.AddInterceptors(Interceptor); }); diff --git a/EstateReportingAPI.Tests/BusinessLogic/DbContextResolverXTests.cs b/EstateReportingAPI.Tests/BusinessLogic/DbContextResolverXTests.cs new file mode 100644 index 0000000..f6a9fa2 --- /dev/null +++ b/EstateReportingAPI.Tests/BusinessLogic/DbContextResolverXTests.cs @@ -0,0 +1,42 @@ +using EstateReportingAPI.BusinessLogic; +using Microsoft.Data.SqlClient; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using System.Collections.Generic; +using Shared.EntityFramework; +using Shared.General; +using Shouldly; +using TransactionProcessor.Database.Contexts; +using Xunit; + +namespace EstateReportingAPI.Tests.BusinessLogic; + +public class DbContextResolverXTests +{ + [Fact] + public void Resolve_WhenEstateSuffixIsProvided_UsesTheSuffixedCatalog() + { + IConfigurationRoot configuration = new ConfigurationBuilder() + .AddInMemoryCollection(new Dictionary + { + ["ConnectionStrings:TransactionProcessorReadModel"] = "Server=localhost;Initial Catalog=TransactionProcessorReadModel;Integrated Security=True;TrustServerCertificate=True" + }) + .Build(); + + ConfigurationReader.Initialise(configuration); + + using ServiceProvider rootProvider = new ServiceCollection().BuildServiceProvider(); + DbContextResolverX resolver = + new(rootProvider, configuration, new QueryTimingInterceptor()); + + using ResolvedDbContext resolvedContext = + resolver.Resolve("TransactionProcessorReadModel", "estate-123"); + + SqlConnectionStringBuilder connectionStringBuilder = + new(resolvedContext.Context.Database.GetDbConnection().ConnectionString); + + connectionStringBuilder.InitialCatalog.ShouldBe("TransactionProcessorReadModel-estate-123"); + } +} diff --git a/EstateReportingAPI.Tests/EstateReportingAPI.Tests.csproj b/EstateReportingAPI.Tests/EstateReportingAPI.Tests.csproj index aec0648..9fd8de3 100644 --- a/EstateReportingAPI.Tests/EstateReportingAPI.Tests.csproj +++ b/EstateReportingAPI.Tests/EstateReportingAPI.Tests.csproj @@ -35,6 +35,7 @@ +