public async Task LoadSaga_DeserializesExisting()
        {
            var context = new QueueContext
            {
            };
            var testSaga = new TestSaga
            {
            };

            dataAccess.Setup(d => d.GetSagaData(It.IsAny <string>(), It.IsAny <string>()))
            .Returns(Task.FromResult(new SagaData
            {
                Blocked = false,
                Data    = "{}",
                Key     = "SagaKey",
            }));

            serializer.Setup(s => s.DeserializeSaga("{}", typeof(TestSagaData)))
            .Returns(new TestSagaData());

            await reader.LoadSaga(testSaga, context);

            Assert.IsNotNull(testSaga.Data);

            serializer.Verify(s => s.DeserializeSaga("{}", typeof(TestSagaData)), Times.Once);
        }
        public async Task SaveSaga_UpdatesExistingSagaData()
        {
            var context = new QueueContext
            {
                MessageData = new QueueMessage
                {
                    Id        = 12345,
                    NotBefore = clock.Object.UtcNow,
                },
                SourceQueue = "SourceQueue",
                SagaKey     = "SagaKey",
                SagaData    = new SagaData
                {
                    Key  = "SagaKey",
                    Data = "InitialData",
                }
            };

            var testSaga = new TestSaga
            {
                SagaComplete = false
            };

            await reader.SaveSaga(testSaga, context);

            dataAccess.Verify(d => d.Update(It.IsAny <SagaData>(), It.IsAny <string>()), Times.Once);

            Assert.AreEqual(testSaga.SagaName, UpdatedSagaName);
            Assert.AreEqual("SerializedTestSagaData", UpdatedSagaData.Data);
            Assert.AreEqual(context.SagaKey, UpdatedSagaData.Key);
        }
示例#3
0
        public void Should_have_the_saga_instance_with_the_value()
        {
            TestSaga saga = _test.Saga.Created.Contains(_sagaId);

            saga.ShouldNotBeNull();

            saga.ValueA.ShouldEqual(_testValueA);
        }
示例#4
0
        public async Task BuilderTest2()
        {
            var context = new FakeContext();

            var saga = new TestSaga();

            await saga.Execute(context);
        }
示例#5
0
        public void Should_track_changes()
        {
            var agg = new TestSaga(_dependencyResolver, Guid.NewGuid());

            _unitOfWork.Add(agg);
            var saga = _unitOfWork.Get <TestSaga>(agg.Id);

            Assert.AreEqual(agg, saga);
        }
		protected virtual void EstablishContext()
		{
			var saga = new TestSaga(Guid.NewGuid());

			var inspector = new SagaStateMachineEventInspector<TestSaga>();
			saga.Inspect(inspector);

			Results = inspector.GetResults().ToArray();
		}
 public void StartSagaSaga(string sagaId, string profileName)
 {
     ObjectFactory.GetInstance <IBus>().CurrentMessageContext.Headers[BusExtensions.PROFILENAME_KEY] = profileName;
     _sagaId = new Guid(sagaId);
     _saga   = new TestSaga {
         Data = new TestSagaData {
             Id = _sagaId
         }
     };
 }
 public void StartSagaByProfile(string sagaDataValue, string profileName)
 {
     ObjectFactory.GetInstance <IBus>().CurrentMessageContext.Headers[BusExtensions.PROFILENAME_KEY] = profileName;
     _sagaId = Guid.NewGuid();
     _saga   = new TestSaga {
         Data = new TestSagaData {
             TestValue = sagaDataValue, Id = _sagaId
         }
     };
 }
        protected virtual void EstablishContext()
        {
            var saga = new TestSaga(Guid.NewGuid());

            var inspector = new SagaStateMachineEventInspector <TestSaga>();

            saga.Inspect(inspector);

            Results = inspector.GetResults().ToArray();
        }
示例#10
0
            public async Task Should_receive_the_message_a()
            {
                Guid?sagaId = await _repository.ShouldContainSaga(_sagaId, TestTimeout);

                Assert.IsTrue(sagaId.HasValue);

                TestSaga saga = _repository[sagaId.Value].Instance;

                await saga.A.Task;
            }
示例#11
0
        public void Initialize_should_throw_when_message_is_not_mapped()
        {
            //arrange
            var id           = "something-unique";
            var store        = new Mock <ISagaStore>();
            var saga         = new TestSaga();
            var startMessage = new TestSagaMessage(id);
            var handler      = new SagaHandler <TestSagaData, TestSagaMessage>(store.Object, saga, startMessage);

            //act & assert
            handler.Awaiting(x => x.Initialize()).Should().Throw <SagaMessageMappingNotFoundException>();
        }
示例#12
0
            public async Task Should_receive_the_message_b()
            {
                Guid?sagaId = await _repository.ShouldContainSaga(_sagaId, TestTimeout);

                Assert.IsTrue(sagaId.HasValue);

                TestSaga saga = _repository[sagaId.Value].Instance;

                await InputQueueSendEndpoint.Send(new B { CorrelationId = _sagaId });

                await saga.B.Task;
            }
示例#13
0
        public async Task Initialize_should_start_new_saga_when_start_message_is_received()
        {
            //arrange
            var id           = "something-unique";
            var store        = new Mock <ISagaStore>();
            var saga         = new TestSaga();
            var startMessage = new TestSagaStartMessage(id);
            var handler      = new SagaHandler <TestSagaData, TestSagaStartMessage>(store.Object, saga, startMessage);
            //act
            await handler.Initialize();

            //assert
            store.Verify(x => x.Create(saga.PartitionKey, id, It.IsAny <TestSagaData>()), Times.Once);
        }
示例#14
0
        public static void SagaTest1()
        {
            SagaStateHelper hh = new SagaStateHelper();
            var repo = new Mock<ISagaRepository>();

            hh.SagaStateRepo = repo.Object;
            hh.UseDbRecordLocking = true;
            var m = new SagaMessage1 {
                Id = "T1"
            };
            var sh = new TestSaga();
            hh.DispatchToSaga(null, m, true, true, sh, sb =>
            {
            });
        }
示例#15
0
        public async Task LoadSaga_InitializesWhenNew()
        {
            var context = new QueueContext
            {
            };
            var testSaga = new TestSaga
            {
            };

            dataAccess.Setup(d => d.GetSagaData(It.IsAny <string>(), It.IsAny <string>()))
            .Returns(Task.FromResult <SagaData>(null));

            await reader.LoadSaga(testSaga, context);

            Assert.IsNotNull(testSaga.Data);
        }
示例#16
0
        public async Task SaveSaga_DeletesCompleteSaga()
        {
            var context = new QueueContext
            {
                MessageData = new QueueMessage
                {
                    Id        = 12345,
                    NotBefore = clock.Object.UtcNow,
                },
                SourceQueue = "SourceQueue",
                SagaKey     = "SagaKey"
            };

            var testSaga = new TestSaga
            {
                SagaComplete = true
            };

            await reader.SaveSaga(testSaga, context);

            dataAccess.Verify(d => d.DeleteSagaData(testSaga.SagaName, context.SagaKey), Times.Once);
        }
示例#17
0
        public async Task LoadSaga_ReturnsWhenBlocked()
        {
            var context = new QueueContext
            {
            };
            var testSaga = new TestSaga
            {
            };

            dataAccess.Setup(d => d.GetSagaData(It.IsAny <string>(), It.IsAny <string>()))
            .Returns(Task.FromResult(new SagaData
            {
                Blocked = true,
                Data    = "{}",
                Key     = "SagaKey",
            }));

            await reader.LoadSaga(testSaga, context);

            Assert.IsNull(testSaga.Data);
            Assert.IsTrue(context.SagaData.Blocked);
        }
		protected override void Context()
		{
			base.Context();
			_id = "something";
			_testSaga = new TestSaga(_id);
		}
示例#19
0
 protected override void Context()
 {
     base.Context();
     _id       = "something";
     _testSaga = new TestSaga(_id);
 }
示例#20
0
 IEnumerable <Action <IConsumeContext <InitiateSimpleSaga> > > GetHandlers(TestSaga instance, IConsumeContext <InitiateSimpleSaga> context)
 {
     yield return(x => instance.RaiseEvent(TestSaga.Initiate, x.Message));
 }
 private IEnumerable<Action<IConsumeContext<InitiateSimpleSaga>>> GetHandlers(
     TestSaga instance,
     IConsumeContext<InitiateSimpleSaga> context)
 {
     yield return x => instance.RaiseEvent(TestSaga.Initiate, x.Message);
 }