Пример #1
0
            public void SagaContextRequired()
            {
                var saga = new FakeSaga();
                var e    = new FakeEvent();

                Assert.Throws <InvalidOperationException>(() => saga.Handle(e));
            }
Пример #2
0
            public void SagaContextIsRequired()
            {
                var saga = new FakeSaga();
                var ex   = Assert.Throws <InvalidOperationException>(() => saga.Handle(new FakeEvent()));

                Assert.Equal(Exceptions.NoSagaContext, ex.Message);
            }
Пример #3
0
            public void SagaContextRequired()
            {
                var saga = new FakeSaga();
                var e = new FakeEvent();

                Assert.Throws<InvalidOperationException>(() => saga.Handle(e));
            }
Пример #4
0
            public void FlagSagaAsCompleteOnMarkCompleted()
            {
                var saga = new FakeSaga();

                saga.Handle(new FakeEvent());

                Assert.True(saga.Completed);
            }
Пример #5
0
            public void FlagSagaAsCompleteOnMarkCompleted()
            {
                var saga = new FakeSaga();

                saga.Handle(new FakeEvent());

                Assert.True(saga.Completed);
            }
Пример #6
0
            public void CannotClearTimeoutIfNotScheduled()
            {
                var saga = new FakeSaga {
                    CorrelationId = GuidStrategy.NewGuid(), Timeout = null
                };
                var ex = Assert.Throws <InvalidOperationException>(() => saga.Handle(new FakeEvent()));

                Assert.Equal(Exceptions.SagaTimeoutNotScheduled.FormatWith(saga.GetType(), saga.CorrelationId), ex.Message);
            }
Пример #7
0
            public void CannotRescheduleIfTimeoutNotAlreadyScheduled()
            {
                var e    = new FakeEvent();
                var saga = new FakeSaga {
                    Timeout = null
                };

                using (new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                    Assert.Throws <InvalidOperationException>(() => saga.Handle(e));
            }
Пример #8
0
            public void EventContextIsRequired()
            {
                var saga = new FakeSaga();

                using (new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), new FakeEvent()))
                {
                    var ex = Assert.Throws <InvalidOperationException>(() => saga.Handle(new FakeEvent()));

                    Assert.Equal(Exceptions.NoEventContext, ex.Message);
                }
            }
Пример #9
0
            public void TimeoutRepresentedAsUtcDateTime()
            {
                var saga = new FakeSaga();
                var e    = new FakeEvent();

                using (var context = new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                {
                    saga.Handle(e);

                    Assert.Equal(DateTimeKind.Utc, saga.Timeout.GetValueOrDefault().Kind);
                    Assert.True(context.TimeoutChanged);
                }
            }
Пример #10
0
            public void CanScheduleTimeoutIfNotScheduled()
            {
                var saga = new FakeSaga();
                var e = new FakeEvent();

                using (var context = new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                {
                    saga.Handle(e);

                    Assert.NotNull(saga.Timeout);
                    Assert.True(context.TimeoutChanged);
                }
            }
Пример #11
0
            public void CanScheduleTimeoutIfNotScheduled()
            {
                var saga = new FakeSaga();
                var e    = new FakeEvent();

                using (var context = new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                {
                    saga.Handle(e);

                    Assert.NotNull(saga.Timeout);
                    Assert.True(context.TimeoutChanged);
                }
            }
Пример #12
0
            public void CanClearTimeoutIfScheduled()
            {
                var saga = new FakeSaga {
                    Timeout = SystemTime.Now
                };
                var e = new FakeEvent();

                using (var context = new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                {
                    saga.Handle(e);

                    Assert.Null(saga.Timeout);
                    Assert.True(context.TimeoutChanged);
                }
            }
Пример #13
0
            public void CannotScheduleTimeoutIfAlreadyScheduled()
            {
                var saga = new FakeSaga {
                    CorrelationId = GuidStrategy.NewGuid(), Timeout = SystemTime.Now
                };
                var e = new FakeEvent();

                using (var context = new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                {
                    var ex = Assert.Throws <InvalidOperationException>(() => saga.Handle(e));

                    Assert.Equal(Exceptions.SagaTimeoutAlreadyScheduled.FormatWith(saga.GetType(), saga.CorrelationId), ex.Message);
                    Assert.False(context.TimeoutChanged);
                }
            }
Пример #14
0
            public void CanRescheduleIfTimeoutAlreadyScheduled()
            {
                var e       = new FakeEvent();
                var timeout = SystemTime.Now;
                var saga    = new FakeSaga {
                    Timeout = timeout
                };

                using (var context = new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                {
                    saga.Handle(e);

                    Assert.NotEqual(timeout, saga.Timeout);
                    Assert.True(context.TimeoutChanged);
                }
            }
Пример #15
0
            public void CopyRemoteAddressHeaderFromEventContextIfNoUserAddress()
            {
                var saga        = new FakeSaga();
                var userAddress = IPAddress.Loopback.ToString();
                var e           = new FakeEvent {
                    Id = GuidStrategy.NewGuid()
                };
                var headers = new HeaderCollection(new Dictionary <String, string> {
                    { Header.RemoteAddress, userAddress }
                });

                using (new EventContext(e.Id, headers, e))
                    using (var sagaContext = new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                    {
                        saga.Handle(new FakeEvent());

                        Assert.Equal(userAddress, sagaContext.GetPublishedCommands().Single().Headers.Single().Value);
                    }
            }
Пример #16
0
            public void CopyUserNameHeaderFromEventContext()
            {
                var saga     = new FakeSaga();
                var userName = Guid.NewGuid().ToString();
                var e        = new FakeEvent {
                    Id = GuidStrategy.NewGuid()
                };
                var headers = new HeaderCollection(new Dictionary <String, string> {
                    { Header.UserName, userName }
                });

                using (new EventContext(e.Id, headers, e))
                    using (var sagaContext = new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                    {
                        saga.Handle(new FakeEvent());

                        Assert.Equal(userName, sagaContext.GetPublishedCommands().Single().Headers.Single().Value);
                    }
            }
Пример #17
0
            public void PreferCustomHeaderOverEventContextHeaderIfDefined()
            {
                var saga           = new FakeSaga();
                var userName       = Guid.NewGuid().ToString();
                var customUserName = Guid.NewGuid().ToString();
                var e = new FakeEvent {
                    Id = GuidStrategy.NewGuid()
                };
                var headers = new HeaderCollection(new Dictionary <String, string> {
                    { Header.UserName, userName }
                });

                using (new EventContext(e.Id, headers, e))
                    using (var sagaContext = new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                    {
                        saga.Handle(new FakeEvent {
                            CustomHeaders = new[] { new Header(Header.UserName, customUserName, checkReservedNames: false) }
                        });

                        Assert.Equal(customUserName, sagaContext.GetPublishedCommands().Single().Headers.Single().Value);
                    }
            }
Пример #18
0
            public void CanRescheduleIfTimeoutAlreadyScheduled()
            {
                var e = new FakeEvent();
                var timeout = SystemTime.Now;
                var saga = new FakeSaga { Timeout = timeout };

                using (var context = new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                {
                    saga.Handle(e);

                    Assert.NotEqual(timeout, saga.Timeout);
                    Assert.True(context.TimeoutChanged);
                }
            }
Пример #19
0
            public void PreferCustomHeaderOverEventContextHeaderIfDefined()
            {
                var saga = new FakeSaga();
                var userName = Guid.NewGuid().ToString();
                var customUserName = Guid.NewGuid().ToString();
                var e = new FakeEvent { Id = GuidStrategy.NewGuid() };
                var headers = new HeaderCollection(new Dictionary<String, string> { { Header.UserName, userName } });

                using (new EventContext(e.Id, headers, e))
                using (var sagaContext = new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                {
                    saga.Handle(new FakeEvent { CustomHeaders = new[] { new Header(Header.UserName, customUserName, checkReservedNames: false) } });

                    Assert.Equal(customUserName, sagaContext.GetPublishedCommands().Single().Headers.Single().Value);
                }
            }
Пример #20
0
            public void CopyUserNameHeaderFromEventContext()
            {
                var saga = new FakeSaga();
                var userName = Guid.NewGuid().ToString();
                var e = new FakeEvent { Id = GuidStrategy.NewGuid() };
                var headers = new HeaderCollection(new Dictionary<String, string> { { Header.UserName, userName } });

                using (new EventContext(e.Id, headers, e))
                using (var sagaContext = new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                {
                    saga.Handle(new FakeEvent());

                    Assert.Equal(userName, sagaContext.GetPublishedCommands().Single().Headers.Single().Value);
                }
            }
Пример #21
0
            public void CopyRemoteAddressHeaderFromEventContextIfNoUserAddress()
            {
                var saga = new FakeSaga();
                var userAddress = IPAddress.Loopback.ToString();
                var e = new FakeEvent { Id = GuidStrategy.NewGuid() };
                var headers = new HeaderCollection(new Dictionary<String, string> { { Header.RemoteAddress, userAddress } });

                using (new EventContext(e.Id, headers, e))
                using (var sagaContext = new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                {
                    saga.Handle(new FakeEvent());

                    Assert.Equal(userAddress, sagaContext.GetPublishedCommands().Single().Headers.Single().Value);
                }
            }
Пример #22
0
            public void EventContextIsRequired()
            {
                var saga = new FakeSaga();

                using (new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), new FakeEvent()))
                {
                    var ex = Assert.Throws<InvalidOperationException>(() => saga.Handle(new FakeEvent()));

                    Assert.Equal(Exceptions.NoEventContext, ex.Message);
                }
            }
Пример #23
0
            public void SagaContextIsRequired()
            {
                var saga = new FakeSaga();
                var ex = Assert.Throws<InvalidOperationException>(() => saga.Handle(new FakeEvent()));

                Assert.Equal(Exceptions.NoSagaContext, ex.Message);
            }
Пример #24
0
            public void CannotRescheduleIfTimeoutNotAlreadyScheduled()
            {
                var e = new FakeEvent();
                var saga = new FakeSaga { Timeout = null };

                using (new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                    Assert.Throws<InvalidOperationException>(() => saga.Handle(e));
            }
Пример #25
0
            public void CannotClearTimeoutIfNotScheduled()
            {
                var saga = new FakeSaga { CorrelationId = GuidStrategy.NewGuid(), Timeout = null };
                var ex = Assert.Throws<InvalidOperationException>(() => saga.Handle(new FakeEvent()));

                Assert.Equal(Exceptions.SagaTimeoutNotScheduled.FormatWith(saga.GetType(), saga.CorrelationId), ex.Message);
            }
Пример #26
0
            public void CanClearTimeoutIfScheduled()
            {
                var saga = new FakeSaga { Timeout = SystemTime.Now };
                var e = new FakeEvent();

                using (var context = new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                {
                    saga.Handle(e);

                    Assert.Null(saga.Timeout);
                    Assert.True(context.TimeoutChanged);
                }
            }
Пример #27
0
            public void TimeoutRepresentedAsUtcDateTime()
            {
                var saga = new FakeSaga();
                var e = new FakeEvent();

                using (var context = new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                {
                    saga.Handle(e);

                    Assert.Equal(DateTimeKind.Utc, saga.Timeout.GetValueOrDefault().Kind);
                    Assert.True(context.TimeoutChanged);
                }
            }
Пример #28
0
            public void CannotScheduleTimeoutIfAlreadyScheduled()
            {
                var saga = new FakeSaga { CorrelationId = GuidStrategy.NewGuid(), Timeout = SystemTime.Now };
                var e = new FakeEvent();

                using (var context = new SagaContext(typeof(Saga), GuidStrategy.NewGuid(), e))
                {
                    var ex = Assert.Throws<InvalidOperationException>(() => saga.Handle(e));

                    Assert.Equal(Exceptions.SagaTimeoutAlreadyScheduled.FormatWith(saga.GetType(), saga.CorrelationId), ex.Message);
                    Assert.False(context.TimeoutChanged);
                }
            }