Skip to content

Commit 01f5740

Browse files
Merge pull request #133 from TransactionProcessing/task/#129_use_new_dbresolver
Refactor database context resolution in ReportingManager
2 parents 9c23a89 + 9d1dea5 commit 01f5740

File tree

9 files changed

+183
-193
lines changed

9 files changed

+183
-193
lines changed

EstateReportingAPI.BusinessLogic/ReportingManager.cs

Lines changed: 47 additions & 29 deletions
Large diffs are not rendered by default.

EstateReportingAPI.IntegrationTests/ControllerTestsBase.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ public virtual async Task InitializeAsync()
3636

3737
await this.StartSqlContainer();
3838

39-
String dbConnString = GetLocalConnectionString($"EstateReportingReadModel{this.TestId}");
39+
String dbConnString = GetLocalConnectionString($"TransactionProcessorReadModel-{this.TestId}");
4040

4141
this.factory = new CustomWebApplicationFactory<Startup>(dbConnString);
4242
this.Client = this.factory.CreateClient();
4343
this.ApiClient = new EstateReportingApiClient((s) => "http://localhost", this.Client);
4444

45-
this.context = new EstateManagementContext(GetLocalConnectionString($"EstateReportingReadModel{this.TestId.ToString()}"));
45+
this.context = new EstateManagementContext(GetLocalConnectionString($"TransactionProcessorReadModel-{this.TestId.ToString()}"));
4646

4747
this.helper = new DatabaseHelper(context);
4848
await this.helper.CreateStoredProcedures(CancellationToken.None);

EstateReportingAPI.IntegrationTests/CustomWebApplicationFactory.cs

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
using System.Collections.Generic;
33
using System.Threading;
44
using System.Threading.Tasks;
5+
using Microsoft.Data.SqlClient;
6+
using Microsoft.Extensions.Configuration;
57
using Shared.Repositories;
68
using TransactionProcessor.Database.Contexts;
79

@@ -24,7 +26,7 @@ namespace EstateReportingAPI.IntegrationTests;
2426

2527
public class CustomWebApplicationFactory<TStartup> : WebApplicationFactory<TStartup> where TStartup : class
2628
{
27-
private readonly string DatabaseConnectionString;
29+
private string DatabaseConnectionString;
2830

2931
public CustomWebApplicationFactory(string databaseConnectionString)
3032
{
@@ -38,12 +40,33 @@ protected override void ConfigureWebHost(IWebHostBuilder builder)
3840
{
3941
builder.ConfigureServices(containerBuilder =>
4042
{
43+
var createcontext = new EstateManagementContext(DatabaseConnectionString);
44+
bool b = createcontext.Database.EnsureCreated();
45+
b.ShouldBeTrue();
46+
47+
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(DatabaseConnectionString)
48+
{
49+
InitialCatalog = "TransactionProcessorReadModel",
50+
};
51+
this.DatabaseConnectionString = builder.ToString();
52+
4153
var context = new EstateManagementContext(DatabaseConnectionString);
4254
Func<string, EstateManagementContext> f = connectionString => context;
4355

44-
IDbContextFactory<EstateManagementContext> factory = new DbContextFactory<EstateManagementContext>(new TestConnectionStringConfigurationRepository(DatabaseConnectionString), f);
56+
containerBuilder.AddTransient<EstateManagementContext>(_ => context);
57+
var serviceProvider = containerBuilder.BuildServiceProvider();
58+
59+
var inMemorySettings = new Dictionary<string, string>
60+
{
61+
{ "ConnectionStrings:TransactionProcessorReadModel", DatabaseConnectionString }
62+
};
63+
64+
IConfiguration configuration = new ConfigurationBuilder()
65+
.AddInMemoryCollection(inMemorySettings)
66+
.Build();
4567

46-
IReportingManager manager = new ReportingManager(factory);
68+
IDbContextResolver<EstateManagementContext> resolver = new DbContextResolver<EstateManagementContext>(serviceProvider, configuration);
69+
IReportingManager manager = new ReportingManager(resolver);
4770

4871
containerBuilder.AddSingleton(manager);
4972

@@ -52,42 +75,13 @@ protected override void ConfigureWebHost(IWebHostBuilder builder)
5275
containerBuilder.AddAuthentication(TestAuthHandler.AuthenticationScheme)
5376
.AddScheme<TestAuthHandlerOptions, TestAuthHandler>(TestAuthHandler.AuthenticationScheme, options => { });
5477

55-
bool b = context.Database.EnsureCreated();
5678

57-
b.ShouldBeTrue();
5879
});
5980

6081
}
6182

6283
}
6384

64-
public class TestConnectionStringConfigurationRepository : IConnectionStringConfigurationRepository
65-
{
66-
private readonly string DbConnectionString;
67-
68-
public TestConnectionStringConfigurationRepository(String dbConnectionString)
69-
{
70-
DbConnectionString = dbConnectionString;
71-
}
72-
public Task DeleteConnectionStringConfiguration(string externalIdentifier, string connectionStringIdentifier,
73-
CancellationToken cancellationToken)
74-
{
75-
throw new NotImplementedException();
76-
}
77-
78-
public async Task<string> GetConnectionString(string externalIdentifier, string connectionStringIdentifier,
79-
CancellationToken cancellationToken)
80-
{
81-
return DbConnectionString;
82-
}
83-
84-
public Task CreateConnectionString(string externalIdentifier, string connectionStringIdentifier, string connectionString,
85-
CancellationToken cancellationToken)
86-
{
87-
throw new NotImplementedException();
88-
}
89-
}
90-
9185
public class TestAuthHandlerOptions : AuthenticationSchemeOptions
9286
{
9387
public string DefaultUserId { get; set; } = null!;

EstateReportingAPI.IntegrationTests/DimensionControllerTests.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class DimensionsControllerTests : ControllerTestsBase
2020
[Fact]
2121
public async Task DimensionsController_GetCalendarYears_NoDataInDatabase()
2222
{
23-
var yearsResult = await ApiClient.GetCalendarYears(string.Empty, Guid.NewGuid(), CancellationToken.None);
23+
var yearsResult = await ApiClient.GetCalendarYears(string.Empty, this.TestId, CancellationToken.None);
2424
yearsResult.IsFailed.ShouldBeTrue();
2525
}
2626

@@ -40,7 +40,7 @@ public async Task DimensionsController_GetCalendarYears_YearsReturned()
4040
await helper.AddCalendarYear(year);
4141
}
4242

43-
var result = await ApiClient.GetCalendarYears(string.Empty, Guid.NewGuid(), CancellationToken.None);
43+
var result = await ApiClient.GetCalendarYears(string.Empty, this.TestId, CancellationToken.None);
4444
result.IsSuccess.ShouldBeTrue();
4545
var years = result.Data;
4646
years.ShouldNotBeNull();
@@ -53,7 +53,7 @@ public async Task DimensionsController_GetCalendarComparisonDates_DatesReturned(
5353
List<DateTime> datesInYear = helper.GetDatesForYear(DateTime.Now.Year);
5454
await helper.AddCalendarDates(datesInYear);
5555

56-
Result<List<ComparisonDate>> result = await ApiClient.GetComparisonDates(string.Empty, Guid.NewGuid(), CancellationToken.None);
56+
Result<List<ComparisonDate>> result = await ApiClient.GetComparisonDates(string.Empty, this.TestId, CancellationToken.None);
5757
result.IsSuccess.ShouldBeTrue();
5858
List<ComparisonDate> dates = result.Data;
5959
List <DateTime> expectedDates = datesInYear.Where(d => d <= DateTime.Now.Date.AddDays(-1)).ToList();
@@ -73,7 +73,7 @@ public async Task DimensionsController_GetCalendarComparisonDates_DatesReturned(
7373
[Fact]
7474
public async Task DimensionsController_GetCalendarComparisonDates_NoDataInDatabase()
7575
{
76-
var result= await ApiClient.GetComparisonDates(string.Empty, Guid.NewGuid(), CancellationToken.None);
76+
var result= await ApiClient.GetComparisonDates(string.Empty, this.TestId, CancellationToken.None);
7777
result.IsFailed.ShouldBeTrue();;
7878
}
7979

@@ -83,7 +83,7 @@ public async Task DimensionsController_GetCalendarDates_DatesReturned()
8383
List<DateTime> datesInYear = helper.GetDatesForYear(2023);
8484
await helper.AddCalendarDates(datesInYear);
8585

86-
var datesResult = await ApiClient.GetCalendarDates(string.Empty, Guid.NewGuid(), 2023, CancellationToken.None);
86+
var datesResult = await ApiClient.GetCalendarDates(string.Empty, this.TestId, 2023, CancellationToken.None);
8787

8888
datesResult.IsSuccess.ShouldBeTrue();
8989
var dates = datesResult.Data;
@@ -100,13 +100,13 @@ public async Task DimensionsController_GetCalendarDates_DatesReturned()
100100
[Fact]
101101
public async Task DimensionsController_GetCalendarDates_NoDataInDatabase()
102102
{
103-
var datesResult = await ApiClient.GetCalendarDates(string.Empty, Guid.NewGuid(), 2023, CancellationToken.None);
103+
var datesResult = await ApiClient.GetCalendarDates(string.Empty, this.TestId, 2023, CancellationToken.None);
104104
datesResult.IsFailed.ShouldBeTrue();
105105
}
106106

107107
[Fact]
108108
public async Task DimensionsController_GetMerchants_NoData_NoMerchantsReturned() {
109-
var result = await ApiClient.GetMerchants(string.Empty, Guid.NewGuid(), CancellationToken.None);
109+
var result = await ApiClient.GetMerchants(string.Empty, this.TestId, CancellationToken.None);
110110
result.IsFailed.ShouldBeTrue();
111111
}
112112

@@ -120,7 +120,7 @@ public async Task DimensionsController_GetMerchants_NoAddresses_MerchantsReturne
120120
await helper.AddMerchant("Test Estate", $"Test Merchant {i}", DateTime.Now);
121121
}
122122

123-
var result = await ApiClient.GetMerchants(string.Empty, Guid.NewGuid(), CancellationToken.None);
123+
var result = await ApiClient.GetMerchants(string.Empty, this.TestId, CancellationToken.None);
124124
result.IsSuccess.ShouldBeTrue();
125125
var merchants = result.Data;
126126

@@ -150,7 +150,7 @@ public async Task DimensionsController_GetMerchants_EachMerchantHasOneAddress_Me
150150
await helper.AddMerchant("Test Estate", $"Test Merchant {i}", DateTime.Now, addressList);
151151
}
152152

153-
var result = await ApiClient.GetMerchants(string.Empty, Guid.NewGuid(), CancellationToken.None);
153+
var result = await ApiClient.GetMerchants(string.Empty, this.TestId, CancellationToken.None);
154154
result.IsSuccess.ShouldBeTrue();
155155
var merchants = result.Data;
156156

@@ -181,7 +181,7 @@ public async Task DimensionsController_GetMerchants_EachMerchantHasTwoAddress_Me
181181
await helper.AddMerchant("Test Estate", $"Test Merchant {i}", DateTime.Now, addressList);
182182
}
183183

184-
var result = await ApiClient.GetMerchants(string.Empty, Guid.NewGuid(), CancellationToken.None);
184+
var result = await ApiClient.GetMerchants(string.Empty, this.TestId, CancellationToken.None);
185185
result.IsSuccess.ShouldBeTrue();
186186
var merchants = result.Data;
187187

@@ -200,7 +200,7 @@ public async Task DimensionsController_GetMerchants_EachMerchantHasTwoAddress_Me
200200
[Fact]
201201
public async Task DimensionsController_GetOperators_NoData_NoOperatorsReturned()
202202
{
203-
Result<List<Operator>> result = await ApiClient.GetOperators(string.Empty, Guid.NewGuid(), CancellationToken.None);
203+
Result<List<Operator>> result = await ApiClient.GetOperators(string.Empty, this.TestId, CancellationToken.None);
204204
result.IsFailed.ShouldBeTrue();
205205
}
206206

@@ -213,7 +213,7 @@ public async Task DimensionsController_GetOperators_OperatorsReturned()
213213
Int32 operator2ReportingId = await this.helper.AddOperator("Test Estate", "Operator2");
214214
Int32 operator3ReportingId = await this.helper.AddOperator("Test Estate", "Operator3");
215215

216-
var result = await ApiClient.GetOperators(string.Empty, Guid.NewGuid(), CancellationToken.None);
216+
var result = await ApiClient.GetOperators(string.Empty, this.TestId, CancellationToken.None);
217217
result.IsSuccess.ShouldBeTrue();
218218

219219
var operators = result.Data;
@@ -244,7 +244,7 @@ public async Task DimensionsController_GetResponseCodes_ResponseCodesReturned()
244244
await helper.AddResponseCode(1002, "Unknown Merchant");
245245
await helper.AddResponseCode(1003, "No Devices Configured");
246246

247-
var result = await ApiClient.GetResponseCodes(string.Empty, Guid.NewGuid(), CancellationToken.None);
247+
var result = await ApiClient.GetResponseCodes(string.Empty, this.TestId, CancellationToken.None);
248248
result.IsSuccess.ShouldBeTrue();
249249

250250
var responseCodes = result.Data;
@@ -261,7 +261,7 @@ public async Task DimensionsController_GetResponseCodes_ResponseCodesReturned()
261261
[Fact]
262262
public async Task DimensionsController_GetResponseCodes_NoData_NoResponseCodesReturned()
263263
{
264-
var result = await ApiClient.GetResponseCodes(string.Empty, Guid.NewGuid(), CancellationToken.None);
264+
var result = await ApiClient.GetResponseCodes(string.Empty, this.TestId, CancellationToken.None);
265265
result.IsFailed.ShouldBeTrue();
266266
}
267267

0 commit comments

Comments
 (0)