From f48470b7a74519b56e3bc954c97554ba52619947 Mon Sep 17 00:00:00 2001 From: Rafael Lillo Date: Sat, 11 Oct 2025 13:47:36 +0100 Subject: [PATCH] fix: MongoDBUnitOfWork when resolving the transaction --- .../IAmAMongoDbTransactionProvider.cs | 3 ++- .../MongoDbUnitOfWork.cs | 20 ++++++++++---- .../When_Resolving_Transaction_Provider.cs | 26 +++++++++++++++++++ 3 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 tests/Paramore.Brighter.MongoDb.Tests/Outbox/When_Resolving_Transaction_Provider.cs diff --git a/src/Paramore.Brighter.MongoDb/IAmAMongoDbTransactionProvider.cs b/src/Paramore.Brighter.MongoDb/IAmAMongoDbTransactionProvider.cs index 2531fd0be5..a025f149c7 100644 --- a/src/Paramore.Brighter.MongoDb/IAmAMongoDbTransactionProvider.cs +++ b/src/Paramore.Brighter.MongoDb/IAmAMongoDbTransactionProvider.cs @@ -8,4 +8,5 @@ namespace Paramore.Brighter.MongoDb; /// This interface combines MongoDB client access with transaction management /// using for ACID guarantees. /// -public interface IAmAMongoDbTransactionProvider : IAmAMongoDbConnectionProvider, IAmABoxTransactionProvider; +public interface IAmAMongoDbTransactionProvider : IAmAMongoDbConnectionProvider, + IAmABoxTransactionProvider; diff --git a/src/Paramore.Brighter.MongoDb/MongoDbUnitOfWork.cs b/src/Paramore.Brighter.MongoDb/MongoDbUnitOfWork.cs index f324ff057b..32478ac2d1 100644 --- a/src/Paramore.Brighter.MongoDb/MongoDbUnitOfWork.cs +++ b/src/Paramore.Brighter.MongoDb/MongoDbUnitOfWork.cs @@ -13,9 +13,9 @@ namespace Paramore.Brighter.MongoDb; /// to offer both connection and transaction management. /// /// The MongoDB configuration used to obtain the client. -public class MongoDbUnitOfWork(IAmAMongoDbConfiguration configuration) : IAmAMongoDbTransactionProvider +public class MongoDbUnitOfWork(IAmAMongoDbConfiguration configuration) : IAmAMongoDbTransactionProvider, IAmABoxTransactionProvider { - private IClientSession? _session; + private IClientSessionHandle? _session; /// public IMongoClient Client { get; } = configuration.Client; @@ -102,14 +102,24 @@ public async Task RollbackAsync(CancellationToken cancellationToken = default) } /// - public IClientSession GetTransaction() + public IClientSessionHandle GetTransaction() { return _session = Client.StartSession(); } - + /// - public async Task GetTransactionAsync(CancellationToken cancellationToken = default) + public async Task GetTransactionAsync(CancellationToken cancellationToken = default) { return _session = await Client.StartSessionAsync(cancellationToken: cancellationToken); } + + async Task IAmABoxTransactionProvider.GetTransactionAsync(CancellationToken cancellationToken) + { + return await GetTransactionAsync(cancellationToken); + } + + IClientSession IAmABoxTransactionProvider.GetTransaction() + { + return GetTransaction(); + } } diff --git a/tests/Paramore.Brighter.MongoDb.Tests/Outbox/When_Resolving_Transaction_Provider.cs b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/When_Resolving_Transaction_Provider.cs new file mode 100644 index 0000000000..b86f8d495b --- /dev/null +++ b/tests/Paramore.Brighter.MongoDb.Tests/Outbox/When_Resolving_Transaction_Provider.cs @@ -0,0 +1,26 @@ +using System; +using MongoDB.Driver; +using Xunit; + +namespace Paramore.Brighter.MongoDb.Tests.Outbox; + +[Trait("Category", "MongoDb")] +public class MongoDbValidateTransactionProvider +{ + [Fact] + public void When_Resolving_Transaction_Provider() + { + Type transactionProviderInterface = typeof(IAmABoxTransactionProvider<>); + Type? transactionType = null; + foreach (Type i in typeof(MongoDbUnitOfWork).GetInterfaces()) + { + if (i.IsGenericType && i.GetGenericTypeDefinition() == transactionProviderInterface) + { + transactionType = i.GetGenericArguments()[0]; + } + } + + Assert.NotNull(transactionType); + Assert.Equal(typeof(IClientSessionHandle) , transactionType); + } +}