示例#1
0
        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();
                }
        }
示例#2
0
        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);
        }