diff --git a/TransactionProcessor.DatabaseTests/BaseTest.cs b/TransactionProcessor.DatabaseTests/BaseTest.cs
index 7c6135e9..c0d56bb4 100644
--- a/TransactionProcessor.DatabaseTests/BaseTest.cs
+++ b/TransactionProcessor.DatabaseTests/BaseTest.cs
@@ -57,8 +57,8 @@ public async Task GetRepository()
this.Repository = new TransactionProcessorReadModelRepository(resolver.Object);
}
- public virtual async Task DisposeAsync()
- {
+ public virtual async Task DisposeAsync() {
+ await this.DockerHelper.StopContainersForScenarioRun(DockerServices.None);
}
//protected abstract Task ClearStandingData();
@@ -94,16 +94,16 @@ internal async Task StartSqlContainer()
await DockerHelper.StartContainersForScenarioRun(this.TestId.ToString(), DockerServices.SqlServer);
}
- public void Dispose()
- {
- EstateManagementContext context = new EstateManagementContext(this.GetLocalConnectionString($"EstateReportingReadModel{this.TestId.ToString()}"));
+ //public void Dispose()
+ //{
+ // EstateManagementContext context = new EstateManagementContext(this.GetLocalConnectionString($"EstateReportingReadModel{this.TestId.ToString()}"));
- Console.WriteLine($"About to delete database EstateReportingReadModel{this.TestId.ToString()}");
- Boolean result = context.Database.EnsureDeleted();
- Console.WriteLine($"Delete result is {result}");
- result.ShouldBeTrue();
+ // Console.WriteLine($"About to delete database EstateReportingReadModel{this.TestId.ToString()}");
+ // Boolean result = context.Database.EnsureDeleted();
+ // Console.WriteLine($"Delete result is {result}");
+ // result.ShouldBeTrue();
- }
+ //}
}
diff --git a/TransactionProcessor.DatabaseTests/ContractEventTests.cs b/TransactionProcessor.DatabaseTests/ContractEventTests.cs
index 7cf896fa..e8607cc0 100644
--- a/TransactionProcessor.DatabaseTests/ContractEventTests.cs
+++ b/TransactionProcessor.DatabaseTests/ContractEventTests.cs
@@ -15,7 +15,8 @@ namespace TransactionProcessor.DatabaseTests
{
public class MerchantEventTests : BaseTest {
[Fact]
- public async Task AddMerchant_MerchantIsAdded() {
+ public async Task AddMerchant_MerchantIsAdded()
+ {
Result result = await this.Repository.AddMerchant(TestData.DomainEvents.MerchantCreatedEvent, CancellationToken.None);
result.IsSuccess.ShouldBeTrue();
EstateManagementContext context = this.GetContext();
@@ -32,7 +33,8 @@ public async Task AddMerchant_EventReplayHandled() {
}
[Fact]
- public async Task AddMerchantDevice_MerchantContractIsAdded() {
+ public async Task AddMerchantDevice_MerchantContractIsAdded()
+ {
Result result = await this.Repository.AddMerchantDevice(TestData.DomainEvents.DeviceAddedToMerchantEvent, CancellationToken.None);
result.IsSuccess.ShouldBeTrue();
EstateManagementContext context = this.GetContext();
@@ -101,6 +103,26 @@ public async Task SwapMerchantDevice_EventReplayHandled()
}
+ public class StatementEventTests : BaseTest {
+ [Fact]
+ public async Task CreateStatement_StatementIsAdded()
+ {
+ Result result = await this.Repository.CreateStatement(TestData.DomainEvents.StatementCreatedEvent, CancellationToken.None);
+ result.IsSuccess.ShouldBeTrue();
+ EstateManagementContext context = this.GetContext();
+ StatementHeader? statement = await context.StatementHeaders.SingleOrDefaultAsync(c => c.StatementId == TestData.DomainEvents.StatementCreatedEvent.MerchantStatementId);
+ statement.ShouldNotBeNull();
+ }
+ [Fact]
+ public async Task CreateStatement_EventReplayHandled()
+ {
+ Result result = await this.Repository.CreateStatement(TestData.DomainEvents.StatementCreatedEvent, CancellationToken.None);
+ result.IsSuccess.ShouldBeTrue();
+ result = await this.Repository.CreateStatement(TestData.DomainEvents.StatementCreatedEvent, CancellationToken.None);
+ result.IsSuccess.ShouldBeTrue();
+ }
+ }
+
public class ContractEventTests : BaseTest
{
[Fact]
@@ -124,7 +146,8 @@ public async Task AddOperator_EventReplayHandled()
}
[Fact]
- public async Task AddContract_ContractIsAdded() {
+ public async Task AddContract_ContractIsAdded()
+ {
Result result = await this.Repository.AddContract(TestData.DomainEvents.ContractCreatedEvent, CancellationToken.None);
result.IsSuccess.ShouldBeTrue();
EstateManagementContext context = this.GetContext();
@@ -142,7 +165,8 @@ public async Task AddContract_EventReplayHandled() {
}
[Fact]
- public async Task AddContractProduct_ContractProductIsAdded() {
+ public async Task AddContractProduct_ContractProductIsAdded()
+ {
Result result = await this.Repository.AddContractProduct(TestData.DomainEvents.FixedValueProductAddedToContractEvent, CancellationToken.None);
result.IsSuccess.ShouldBeTrue();
EstateManagementContext context = this.GetContext();
@@ -176,7 +200,7 @@ public async Task AddContractProduct_EventReplayHandled() {
result = await this.Repository.AddContractProduct(TestData.DomainEvents.VariableValueProductAddedToContractEvent, CancellationToken.None);
result.IsSuccess.ShouldBeTrue();
}
-
+
[Fact]
public async Task AddContractProductTransactionFee_ContractIsAdded()
{
@@ -197,7 +221,7 @@ public async Task AddContractProductTransactionFee_EventReplayHandled()
result = await this.Repository.AddContractProductTransactionFee(TestData.DomainEvents.TransactionFeeForProductAddedToContractEvent, CancellationToken.None);
result.IsSuccess.ShouldBeTrue();
}
-
+
[Fact]
public async Task AddFileImportLog_FileImportLogIsAdded()
{
diff --git a/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj b/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj
index 5d50a9d6..ce5e1f12 100644
--- a/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj
+++ b/TransactionProcessor.DatabaseTests/TransactionProcessor.DatabaseTests.csproj
@@ -35,4 +35,10 @@
+
+
+ Always
+
+
+
diff --git a/TransactionProcessor.DatabaseTests/xunit.runner.json b/TransactionProcessor.DatabaseTests/xunit.runner.json
new file mode 100644
index 00000000..bac550d0
--- /dev/null
+++ b/TransactionProcessor.DatabaseTests/xunit.runner.json
@@ -0,0 +1,5 @@
+{
+ "parallelizeAssembly": true,
+ "parallelizeTestCollections": true,
+ "maxParallelThreads": 3
+}
\ No newline at end of file
diff --git a/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs b/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs
index 495caf05..9479bc46 100644
--- a/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs
+++ b/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs
@@ -1762,7 +1762,7 @@ public async Task CreateStatement(StatementCreatedEvent domainEvent,
await context.StatementHeaders.AddAsync(header, cancellationToken);
- return await context.SaveChangesAsync(cancellationToken);
+ return await context.SaveChangesWithDuplicateHandling(cancellationToken);
}
// TODO@ Add this back in