From 886975fe00027fb1c2dbbf095ac64b2dc96d875c Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 26 Aug 2025 19:04:44 +0100 Subject: [PATCH] estate duplicate handling added --- .../ContractEventTests.cs | 31 ++++++++++++++++--- ...TransactionProcessorReadModelRepository.cs | 2 +- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/TransactionProcessor.DatabaseTests/ContractEventTests.cs b/TransactionProcessor.DatabaseTests/ContractEventTests.cs index baefdc8..4251350 100644 --- a/TransactionProcessor.DatabaseTests/ContractEventTests.cs +++ b/TransactionProcessor.DatabaseTests/ContractEventTests.cs @@ -27,7 +27,7 @@ public async Task AddOperator_OperatorIsAdded() } [Fact] - public async Task AddOperator_OperatorIsAdded_EventReplayHandled() + public async Task AddOperator_EventReplayHandled() { Result result = await this.Repository.AddOperator(TestData.DomainEvents.OperatorCreatedEvent, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); @@ -46,7 +46,7 @@ public async Task AddContract_ContractIsAdded() { } [Fact] - public async Task AddContract_ContractIsAdded_EventReplayHandled() { + public async Task AddContract_EventReplayHandled() { Result result = await this.Repository.AddContract(TestData.DomainEvents.ContractCreatedEvent, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); @@ -70,7 +70,7 @@ public async Task AddContractProduct_ContractProductIsAdded() { } [Fact] - public async Task AddContractProduct_ContractProductIsAdded_EventReplayHandled() { + public async Task AddContractProduct_EventReplayHandled() { Result result = await this.Repository.AddContractProduct(TestData.DomainEvents.FixedValueProductAddedToContractEvent, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); EstateManagementContext context = this.GetContext(); @@ -102,7 +102,7 @@ public async Task AddContractProductTransactionFee_ContractIsAdded() } [Fact] - public async Task AddContractProductTransactionFee_ContractIsAdded_EventReplayHandled() + public async Task AddContractProductTransactionFee_EventReplayHandled() { Result result = await this.Repository.AddContractProductTransactionFee(TestData.DomainEvents.TransactionFeeForProductAddedToContractEvent, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); @@ -122,7 +122,7 @@ public async Task AddFileImportLog_FileImportLogIsAdded() } [Fact] - public async Task AddFileImportLog_FileImportLogIsAdded_EventReplayHandled() + public async Task AddFileImportLog_EventReplayHandled() { Result result = await this.Repository.AddFileImportLog(TestData.DomainEvents.ImportLogCreatedEvent, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); @@ -150,5 +150,26 @@ public async Task AddFileImportLogFile_EventReplayHandled() result = await this.Repository.AddFileToImportLog(TestData.DomainEvents.FileAddedToImportLogEvent, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); } + + + [Fact] + public async Task AddEstate_EstateIsAdded() + { + Result result = await this.Repository.AddEstate(TestData.DomainEvents.EstateCreatedEvent, CancellationToken.None); + result.IsSuccess.ShouldBeTrue(); + EstateManagementContext context = this.GetContext(); + var estate = await context.Estates.SingleOrDefaultAsync(f => f.EstateId == TestData.DomainEvents.EstateCreatedEvent.EstateId); + estate.ShouldNotBeNull(); + } + + [Fact] + public async Task AddEstate_EventReplayHandled() + { + Result result = await this.Repository.AddEstate(TestData.DomainEvents.EstateCreatedEvent, CancellationToken.None); + result.IsSuccess.ShouldBeTrue(); + + result = await this.Repository.AddEstate(TestData.DomainEvents.EstateCreatedEvent, CancellationToken.None); + result.IsSuccess.ShouldBeTrue(); + } } } diff --git a/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs b/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs index 891e221..7db530b 100644 --- a/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs +++ b/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs @@ -976,7 +976,7 @@ public async Task AddEstate(EstateDomainEvents.EstateCreatedEvent domain }; await context.Estates.AddAsync(estate, cancellationToken); - return await context.SaveChangesAsync(cancellationToken); + return await context.SaveChangesWithDuplicateHandling(cancellationToken); } public async Task AddEstateSecurityUser(EstateDomainEvents.SecurityUserAddedToEstateEvent domainEvent,