private CosmosSagaStateRepository CreateSut(CosmosSagaStateRepositoryOptions options = null) { var serializer = new JsonSerializer(); options ??= CosmosSagaStateRepositoryOptions.Default; var sut = new CosmosSagaStateRepository(_fixture.DbContext, serializer, options); return(sut); }
public async Task LockAsync_should_return_state_if_lock_expired() { var options = new CosmosSagaStateRepositoryOptions(TimeSpan.Zero); var sut = CreateSut(options); var newState = DummyState.New(); var(firstState, firstLockId) = await sut.LockAsync(newState.Id, newState, CancellationToken.None); await Task.Delay(500); var(secondState, secondLockId) = await sut.LockAsync(newState.Id, newState, CancellationToken.None); secondLockId.Should().NotBe(firstLockId); secondState.Should().NotBeNull(); }
public async Task ReleaseLockAsync_should_throw_when_release_lock_fails() { var newState = DummyState.New(); var coll = NSubstitute.Substitute.For <IMongoCollection <Entities.SagaState> >(); coll.UpdateOneAsync(Arg.Any <FilterDefinition <Entities.SagaState> >(), Arg.Any <UpdateDefinition <Entities.SagaState> >(), Arg.Any <UpdateOptions>(), Arg.Any <CancellationToken>()) .ReturnsForAnyArgs((UpdateResult)null); var dbContext = NSubstitute.Substitute.For <IDbContext>(); dbContext.SagaStates.Returns(coll); var serializer = NSubstitute.Substitute.For <ISerializer>(); var options = new CosmosSagaStateRepositoryOptions(TimeSpan.FromMinutes(1)); var sut = new CosmosSagaStateRepository(dbContext, serializer, options); var ex = await Assert.ThrowsAsync <LockException>(async() => await sut.ReleaseLockAsync(newState, Guid.NewGuid(), CancellationToken.None)); ex.Message.Should().Contain("unable to release lock on saga state"); }
public CosmosSagaStateRepository(IDbContext dbContext, ISerializer serializer, CosmosSagaStateRepositoryOptions options) { _dbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext)); _serializer = serializer ?? throw new ArgumentNullException(nameof(serializer)); _options = options ?? throw new ArgumentNullException(nameof(options)); }