예제 #1
0
        async Task RaiseEvent <T>(Guid id, Event <T> @event, T data)
        {
            using (ISession session = _sessionFactory.OpenSession())
                using (ITransaction transaction = session.BeginTransaction())
                {
                    bool save     = false;
                    var  instance = session.Get <ShoppingChore>(id, LockMode.Upgrade);
                    if (instance == null)
                    {
                        instance = new ShoppingChore(id);
                        save     = true;
                    }

                    await _machine.RaiseEvent(instance, @event, data);

                    if (save)
                    {
                        session.Save(instance);
                    }
                    else
                    {
                        session.Update(instance);
                    }

                    transaction.Commit();
                }
        }
예제 #2
0
        public void Should_have_a_saga_in_the_proper_state()
        {
            ShoppingChore shoppingChore = _test.Saga.ContainsInState(_correlationId, _machine.Final, _machine);

            foreach (ShoppingChore result in _repository.Select(x => x))
            {
                Console.WriteLine("{0} - {1} ({2})", result.CorrelationId, result.CurrentState, result.Screwed);
            }

            Assert.IsNotNull(shoppingChore);
        }
예제 #3
0
        public async Task Should_have_the_state_machine()
        {
            Guid correlationId = Guid.NewGuid();

            await RaiseEvent(correlationId, _machine.ExitFrontDoor, new GirlfriendYelling
            {
                CorrelationId = correlationId
            });

            await RaiseEvent(correlationId, _machine.GotHitByCar, new GotHitByACar
            {
                CorrelationId = correlationId
            });

            ShoppingChore instance = await GetStateMachine(correlationId);

            Assert.IsTrue(instance.Screwed);
        }
예제 #4
0
        public void Should_have_a_saga()
        {
            ShoppingChore shoppingChore = _test.Saga.Created.Contains(_correlationId);

            Assert.IsNotNull(shoppingChore);
        }