async Task RaiseEvent <T>(Guid id, Event <T> @event, T data) { using (ISession session = _sessionFactory.OpenSession()) using (ITransaction transaction = session.BeginTransaction()) { var instance = session.Get <ShoppingChore>(id, LockMode.Upgrade); if (instance == null) { instance = new ShoppingChore(id); } await _machine.RaiseEvent(instance, @event, data); session.SaveOrUpdate(instance); transaction.Commit(); } }
public async Task Should_have_the_state_machine() { Guid correlationId = Guid.NewGuid(); await InputQueueSendEndpoint.Send(new GirlfriendYelling { CorrelationId = correlationId }); Guid?sagaId = await _repository.ShouldContainSaga(correlationId, TestTimeout); Assert.IsTrue(sagaId.HasValue); await InputQueueSendEndpoint.Send(new GotHitByACar { CorrelationId = correlationId }); sagaId = await _repository.ShouldContainSaga(x => x.CorrelationId == correlationId && x.CurrentState == _machine.Dead.Name, TestTimeout); Assert.IsTrue(sagaId.HasValue); ShoppingChore instance = await GetSaga(correlationId); Assert.IsTrue(instance.Screwed); }