From 24a64da8a85ea01838240a16197b319a1b2832a1 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 26 Aug 2025 15:35:29 +0100 Subject: [PATCH 1/2] operator duplicate handling --- .../ContractEventTests.cs | 22 +++++++++++++++++++ ...TransactionProcessorReadModelRepository.cs | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/TransactionProcessor.DatabaseTests/ContractEventTests.cs b/TransactionProcessor.DatabaseTests/ContractEventTests.cs index 4182635..5416a29 100644 --- a/TransactionProcessor.DatabaseTests/ContractEventTests.cs +++ b/TransactionProcessor.DatabaseTests/ContractEventTests.cs @@ -13,6 +13,28 @@ namespace TransactionProcessor.DatabaseTests { + public class OperatorEventTests : BaseTest { + [Fact] + public async Task AddOperator_OperatorIsAdded() + { + Result result = await this.Repository.AddOperator(TestData.DomainEvents.OperatorCreatedEvent, CancellationToken.None); + result.IsSuccess.ShouldBeTrue(); + EstateManagementContext context = this.GetContext(); + Operator? @operator = await context.Operators.SingleOrDefaultAsync(c => c.OperatorId == TestData.DomainEvents.OperatorCreatedEvent.OperatorId); + @operator.ShouldNotBeNull(); + } + + [Fact] + public async Task AddOperator_OperatorIsAdded_EventReplayHandled() + { + Result result = await this.Repository.AddOperator(TestData.DomainEvents.OperatorCreatedEvent, CancellationToken.None); + result.IsSuccess.ShouldBeTrue(); + + result = await this.Repository.AddOperator(TestData.DomainEvents.OperatorCreatedEvent, CancellationToken.None); + result.IsSuccess.ShouldBeTrue(); + } + } + public class ContractEventTests : BaseTest { [Fact] diff --git a/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs b/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs index 521442f..d3d8c59 100644 --- a/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs +++ b/TransactionProcessor.Repository/ITransactionProcessorReadModelRepository.cs @@ -1642,7 +1642,7 @@ public async Task AddOperator(OperatorDomainEvents.OperatorCreatedEvent await context.Operators.AddAsync(@operator, cancellationToken); - return await context.SaveChangesAsync(cancellationToken); + return await context.SaveChangesWithDuplicateHandling(cancellationToken); } public async Task AddContract(ContractDomainEvents.ContractCreatedEvent domainEvent, From 149be055c18ba0434f98f2b2a7548ed7cd859155 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Tue, 26 Aug 2025 16:39:46 +0100 Subject: [PATCH 2/2] :| --- TransactionProcessor.DatabaseTests/ContractEventTests.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/TransactionProcessor.DatabaseTests/ContractEventTests.cs b/TransactionProcessor.DatabaseTests/ContractEventTests.cs index 02122bf..d8c1618 100644 --- a/TransactionProcessor.DatabaseTests/ContractEventTests.cs +++ b/TransactionProcessor.DatabaseTests/ContractEventTests.cs @@ -13,7 +13,9 @@ namespace TransactionProcessor.DatabaseTests { - public class OperatorEventTests : BaseTest { + + public class ContractEventTests : BaseTest + { [Fact] public async Task AddOperator_OperatorIsAdded() { @@ -33,10 +35,7 @@ public async Task AddOperator_OperatorIsAdded_EventReplayHandled() result = await this.Repository.AddOperator(TestData.DomainEvents.OperatorCreatedEvent, CancellationToken.None); result.IsSuccess.ShouldBeTrue(); } - } - public class ContractEventTests : BaseTest - { [Fact] public async Task AddContract_ContractIsAdded() { Result result = await this.Repository.AddContract(TestData.DomainEvents.ContractCreatedEvent, CancellationToken.None);