Ejemplo n.º 1
0
        public void Dispose_should_dispose_transaction()
        {
            var session = NSubstitute.Substitute.For <IClientSessionHandle>();
            var sut     = new MongoTransaction(session);

            sut.Dispose();
            session.Received(1).Dispose();
        }
Ejemplo n.º 2
0
        public async Task CommitAsync_should_commit_transaction()
        {
            var session = NSubstitute.Substitute.For <IClientSessionHandle>();
            var sut     = new MongoTransaction(session);

            await sut.CommitAsync();

            await session.Received(1).CommitTransactionAsync();
        }
Ejemplo n.º 3
0
        public async Task RollbackAsync_should_rollback_transaction()
        {
            var session = NSubstitute.Substitute.For <IClientSessionHandle>();
            var sut     = new MongoTransaction(session);

            await sut.RollbackAsync();

            await session.Received(1).AbortTransactionAsync();
        }
Ejemplo n.º 4
0
        public async Task ReleaseLockAsync_should_use_transaction_when_available()
        {
            var state  = DummyState.New();
            var lockId = Guid.NewGuid();

            var session          = NSubstitute.Substitute.For <IClientSessionHandle>();
            var mongoTransaction = new MongoTransaction(session);

            var updateResult = NSubstitute.Substitute.ForPartsOf <UpdateResult>();

            updateResult.MatchedCount.ReturnsForAnyArgs(1);

            var repo = NSubstitute.Substitute.For <IMongoCollection <Entities.SagaState> >();

            repo.UpdateOneAsync(session,
                                (FilterDefinition <Entities.SagaState>)null,
                                (UpdateDefinition <Entities.SagaState>)null,
                                (UpdateOptions)null,
                                CancellationToken.None)
            .ReturnsForAnyArgs(updateResult);

            var dbContext = NSubstitute.Substitute.For <IDbContext>();

            dbContext.SagaStates.Returns(repo);
            dbContext.Transaction.Returns(mongoTransaction);

            var serializer = NSubstitute.Substitute.For <IPersistenceSerializer>();
            var sut        = new MongoSagaStateRepository(dbContext, serializer, MongoSagaStateRepositoryOptions.Default);

            await sut.ReleaseLockAsync <DummyState>(state, lockId);

            await repo.Received(1)
            .UpdateOneAsync(session,
                            Arg.Any <FilterDefinition <Entities.SagaState> >(),
                            Arg.Any <UpdateDefinition <Entities.SagaState> >(),
                            Arg.Any <UpdateOptions>(),
                            Arg.Any <CancellationToken>());
        }