From c180b49ae732d6d92268dc36cf07f0709131089b Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 26 Aug 2025 16:15:47 +0100 Subject: [PATCH 1/2] File Import Log File duplicate handling --- .../ContractEventTests.cs | 20 +++++++++++++++++++ ...TransactionProcessorReadModelRepository.cs | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/TransactionProcessor.DatabaseTests/ContractEventTests.cs b/TransactionProcessor.DatabaseTests/ContractEventTests.cs index 7675bb9..8329c15 100644 --- a/TransactionProcessor.DatabaseTests/ContractEventTests.cs +++ b/TransactionProcessor.DatabaseTests/ContractEventTests.cs @@ -87,5 +87,25 @@ public async Task AddFileImportLog_FileImportLogIsAdded_EventReplayHandled() { result = await this.Repository.AddFileImportLog(TestData.DomainEvents.ImportLogCreatedEvent, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); } + + [Fact] + public async Task AddFileImportLogFile_FileImportLogIsAdded() + { + Result result = await this.Repository.AddFileToImportLog(TestData.DomainEvents.FileAddedToImportLogEvent, CancellationToken.None); + result.IsSuccess.ShouldBeTrue(); + EstateManagementContext context = this.GetContext(); + var fileImportLogFile = await context.FileImportLogFiles.SingleOrDefaultAsync(f => f.FileImportLogId == TestData.DomainEvents.FileAddedToImportLogEvent.FileImportLogId && f.FileId == TestData.DomainEvents.FileAddedToImportLogEvent.FileId); + fileImportLogFile.ShouldNotBeNull(); + } + + [Fact] + public async Task AddFileImportLogFile_EventReplayHandled() + { + Result result = await this.Repository.AddFileToImportLog(TestData.DomainEvents.FileAddedToImportLogEvent, CancellationToken.None); + result.IsSuccess.ShouldBeTrue(); + + result = await this.Repository.AddFileToImportLog(TestData.DomainEvents.FileAddedToImportLogEvent, CancellationToken.None); + result.IsSuccess.ShouldBeTrue(); + } } } diff --git a/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs b/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs index bda3b78..02d5d21 100644 --- a/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs +++ b/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs @@ -1878,7 +1878,7 @@ public async Task AddFileToImportLog(FileAddedToImportLogEvent domainEve await context.FileImportLogFiles.AddAsync(fileImportLogFile, cancellationToken); - return await context.SaveChangesAsync(cancellationToken); + return await context.SaveChangesWithDuplicateHandling(cancellationToken); } public async Task UpdateFileAsComplete(FileProcessingCompletedEvent domainEvent, From 67cbce1f5988f3e00ca0f7303097deff82a0b84a Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 26 Aug 2025 18:31:36 +0100 Subject: [PATCH 2/2] merge --- .../ContractEventTests.cs | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/TransactionProcessor.DatabaseTests/ContractEventTests.cs b/TransactionProcessor.DatabaseTests/ContractEventTests.cs index 2d642d0..baefdc8 100644 --- a/TransactionProcessor.DatabaseTests/ContractEventTests.cs +++ b/TransactionProcessor.DatabaseTests/ContractEventTests.cs @@ -130,5 +130,25 @@ public async Task AddFileImportLog_FileImportLogIsAdded_EventReplayHandled() result = await this.Repository.AddFileImportLog(TestData.DomainEvents.ImportLogCreatedEvent, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); } - } + + [Fact] + public async Task AddFileImportLogFile_FileImportLogIsAdded() + { + Result result = await this.Repository.AddFileToImportLog(TestData.DomainEvents.FileAddedToImportLogEvent, CancellationToken.None); + result.IsSuccess.ShouldBeTrue(); + EstateManagementContext context = this.GetContext(); + var fileImportLogFile = await context.FileImportLogFiles.SingleOrDefaultAsync(f => f.FileImportLogId == TestData.DomainEvents.FileAddedToImportLogEvent.FileImportLogId && f.FileId == TestData.DomainEvents.FileAddedToImportLogEvent.FileId); + fileImportLogFile.ShouldNotBeNull(); + } + + [Fact] + public async Task AddFileImportLogFile_EventReplayHandled() + { + Result result = await this.Repository.AddFileToImportLog(TestData.DomainEvents.FileAddedToImportLogEvent, CancellationToken.None); + result.IsSuccess.ShouldBeTrue(); + + result = await this.Repository.AddFileToImportLog(TestData.DomainEvents.FileAddedToImportLogEvent, CancellationToken.None); + result.IsSuccess.ShouldBeTrue(); + } + } }