public void Dispose_should_dispose_transaction() { var session = NSubstitute.Substitute.For <IClientSessionHandle>(); var sut = new MongoTransaction(session); sut.Dispose(); session.Received(1).Dispose(); }
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(); }
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(); }
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>()); }