public void Save_Updates_ExistingSagaData()
        {
            //Arrange
            var correlationId = Guid.NewGuid();
            var expectedGuid  = Guid.NewGuid();
            var saga          = new MySaga
            {
                CorrelationId = correlationId,
                SagaData      = { SomeGuid = Guid.NewGuid(), },
            };

            SetStoredModel(correlationId, new AzureTablesSagaRepository.StorageModel()
            {
                BlobData = JsonConvert.SerializeObject(saga.SagaData),
            });

            saga.SagaData.SomeGuid = expectedGuid;

            // Act
            sut.Save(saga);

            // Assert
            var updatedData = GetStoredModel(correlationId);

            updatedData.Should().NotBeNull();
            updatedData.BlobData.Should().ContainEquivalentOf(expectedGuid.ToString());
        }
        public void Save_Updates_ExistingHeaders()
        {
            //Arrange
            var correlationId = Guid.NewGuid();
            var expectedValue = Guid.NewGuid().ToString();
            var saga          = new MySaga
            {
                CorrelationId = correlationId,
                Headers       = new Dictionary <string, string>()
                {
                    { "SomeKey", Guid.NewGuid().ToString() }
                },
            };

            database.Insert(new SagaData()
            {
                CorrelationId = correlationId, BlobData = JsonConvert.SerializeObject(saga.SagaData)
            });
            database.Insert(new SagaHeaders()
            {
                CorrelationId = correlationId, Key = saga.Headers.First().Key, Value = saga.Headers.First().Value
            });

            saga.Headers["SomeKey"] = expectedValue;

            // Act
            sut.Save(saga);

            // Assert
            var updatedHeaders = DatabaseHelpers.GetSagaHeaders(database, correlationId);

            updatedHeaders.Should().HaveCount(1);
            updatedHeaders.First().Value.Should().Be(expectedValue);
        }
        public MetadataPipelineHookConsumingTests()
        {
            initialisationTime   = new DateTime(1905, 9, 13);
            TimeProvider.Current = new StubTimeProvider(initialisationTime);

            sut           = new MetadataPipelineHook(new JsonNetSerialiser());
            correlationId = Guid.NewGuid();
            var initiatingMessage = new MySagaInitiatingMessage(correlationId)
            {
                SomeRandomValue = Guid.NewGuid(),
            };

            saga = new MySaga();
            var context = new PipelineContext(initiatingMessage, saga);

            sut.AfterInitialisation(context);

            // change time so we can compare dates
            consumingTime        = new DateTime(1955, 7, 13);
            TimeProvider.Current = new StubTimeProvider(consumingTime);

            // and throw in another message
            consumingMessage = new MySagaConsumingMessage(correlationId)
            {
                SomeRandomValue = Guid.NewGuid().ToString()
            };
            sut.AfterConsuming(new PipelineContext(consumingMessage, saga));

            sagaMetadata = saga.GetSagaMetadata(new JsonNetSerialiser());
        }
        public void Save_Updates_ExistingHeaders()
        {
            //Arrange
            var correlationId = Guid.NewGuid();
            var expectedValue = Guid.NewGuid().ToString();
            var saga          = new MySaga
            {
                CorrelationId = correlationId,
                Headers       = new Dictionary <string, string>()
                {
                    { "SomeKey", Guid.NewGuid().ToString() }
                },
            };

            SetStoredModel(correlationId, new AzureTablesSagaRepository.StorageModel()
            {
                BlobData = JsonConvert.SerializeObject(saga.SagaData),
                Headers  = JsonConvert.SerializeObject(saga.Headers),
            });

            saga.Headers["SomeKey"] = expectedValue;

            // Act
            sut.Save(saga);

            // Assert
            var storedHeaders  = GetStoredModel(correlationId).Headers;
            var updatedHeaders = JsonConvert.DeserializeObject <Dictionary <String, String> >(storedHeaders);

            updatedHeaders.Should().HaveCount(1);
            updatedHeaders.First().Value.Should().Be(expectedValue);
        }
        public void Complete_Removes_Headers()
        {
            //Arrange
            var correlationId = Guid.NewGuid();
            var saga          = new MySaga
            {
                CorrelationId = correlationId,
                Headers       = new Dictionary <string, string>()
                {
                    { "SomeKey", Guid.NewGuid().ToString() }
                },
            };

            database.Insert(new SagaData()
            {
                CorrelationId = correlationId, BlobData = JsonConvert.SerializeObject(saga.SagaData)
            });
            database.Insert(new SagaHeaders()
            {
                CorrelationId = correlationId, Key = saga.Headers.First().Key, Value = saga.Headers.First().Value
            });


            // Act
            sut.Complete(saga);

            // Assert
            var updatedHeaders = DatabaseHelpers.GetSagaHeaders(database, correlationId);

            updatedHeaders.Should().HaveCount(0);
        }
        public void Save_Updates_ExistingSagaData()
        {
            //Arrange
            var correlationId = Guid.NewGuid();
            var expectedGuid  = Guid.NewGuid();
            var saga          = new MySaga
            {
                CorrelationId = correlationId,
                SagaData      = { SomeGuid = Guid.NewGuid(), },
            };

            database.Insert(new SagaData()
            {
                CorrelationId = correlationId, BlobData = JsonConvert.SerializeObject(saga.SagaData)
            });

            saga.SagaData.SomeGuid = expectedGuid;

            // Act
            sut.Save(saga);

            // Assert
            var updatedData = DatabaseHelpers.GetSagaData(database, correlationId);

            updatedData.Should().NotBeNull();
            updatedData.BlobData.Should().ContainEquivalentOf(expectedGuid.ToString());
        }
Пример #7
0
 public void NewDispatchesAreExposedThroughGetDispatches()
 {
     Action<E> onApplied = e => { };
     var saga = new MySaga(onApplied);
     saga.Method();
     saga.GetDispatches().Count().Should().Be.EqualTo(1);
 }
Пример #8
0
 public void NewEventsAreExposedThroughGetUncommittedChanged()
 {
     E newEvent = null;
     Action<E> onApplied = e => newEvent = e;
     var saga = new MySaga(onApplied);
     saga.Method();
     saga.GetUncommittedChanges().Should().Have.SameSequenceAs(new[] {newEvent});
 }
Пример #9
0
 public void HistoricalEventsAreNotExposedThroughGetUncommitedChanged()
 {
     E historicalEvent = null;
     Action<E> onApplied = e => { };
     var saga = new MySaga(onApplied);
     saga.LoadsFromHistory(new[] { historicalEvent });
     saga.GetUncommittedChanges().Should().Be.Empty();
 }
Пример #10
0
 public void UncommittedEventsAreClearedWhenMarkedAsCommitted()
 {
     Action<E> onApplied = e => { };
     var saga = new MySaga(onApplied);
     saga.Method();
     saga.MarkChangesAsCommitted();
     saga.GetUncommittedChanges().Should().Be.Empty();
 }
Пример #11
0
 public void NewEventsAreAppliedToTheSaga()
 {
     E appliedEvent = null;
     Action<E> onApplied = e => appliedEvent = e;
     var saga = new MySaga(onApplied);
     saga.Method();
     appliedEvent.Should().Not.Be.Null();
 }
Пример #12
0
 public void HistoricalEventsAreAppliedToTheSaga()
 {
     E historicalEvent = null;
     E appliedEvent = null;
     Action<E> onApplied = e => appliedEvent = e;
     var saga = new MySaga(onApplied);
     saga.LoadsFromHistory(new[] {historicalEvent});
     appliedEvent.Should().Be.EqualTo(historicalEvent);
 }
Пример #13
0
        public void Save_Persists_Headers()
        {
            //Arrange
            var correlationId = Guid.NewGuid();
            var saga          = new MySaga {
                CorrelationId = correlationId
            };

            // Act
            sut.Save(saga);

            // Assert
            InMemorySagaRepository.HeadersDictionary.Should().NotBeNull()
            .And.ContainKey(correlationId);
        }
Пример #14
0
        public void Save_Returns_SavedData()
        {
            //Arrange
            var correlationId = Guid.NewGuid();
            var saga          = new MySaga {
                CorrelationId = correlationId
            };

            // Act
            sut.Save(saga);

            // Assert
            InMemorySagaRepository.DataDictionary.Should().NotBeNull()
            .And.ContainKey(correlationId);
        }
        public void Complete_Removes_HeadersFromStorage()
        {
            //Arrange
            var correlationId = Guid.NewGuid();
            var saga          = new MySaga();

            saga.CorrelationId = correlationId;
            sut.Save(saga);

            // Act
            sut.Complete(saga);

            // Assert
            sut.HeadersDictionary.Should().NotContainKey(correlationId);
        }
Пример #16
0
        public async Task HandleAsync_StartSaga_should_publish_ProcessMySaga_message()
        {
            var state  = new MySagaState(Guid.NewGuid());
            var logger = NSubstitute.Substitute.For <ILogger <MySaga> >();
            var sut    = new MySaga(logger, state);

            var message = new StartSaga(Guid.NewGuid(), Guid.NewGuid());
            var ctx     = new FakeMessageContext <StartSaga>(message);
            await sut.HandleAsync(ctx);

            state.Outbox.Count.Should().Be(1);
            var outgoingMessage = state.Outbox.First();

            outgoingMessage.Should().BeOfType <ProcessMySaga>();
            outgoingMessage.CorrelationId.Should().Be(message.CorrelationId);
        }
Пример #17
0
    public async Task Saga()
    {
        var saga = new MySaga
        {
            Data = new MySagaData()
        };
        var context = new TestableMessageHandlerContext();

        await saga.Handle(new MySagaMessage(), context);

        await Verify(new
        {
            context,
            saga.Data
        });
    }
        public MetadataPipelineHookInitialisationTests()
        {
            currentTime          = new DateTime(1905, 9, 13);
            TimeProvider.Current = new StubTimeProvider(currentTime);

            sut           = new MetadataPipelineHook(new JsonNetSerialiser());
            correlationId = Guid.NewGuid();
            message       = new MySagaInitiatingMessage(correlationId)
            {
                SomeRandomValue = Guid.NewGuid(),
            };

            saga = new MySaga();
            var context = new PipelineContext(message, saga);

            sut.AfterInitialisation(context);

            sagaMetadata = saga.GetSagaMetadata(new JsonNetSerialiser());
        }
Пример #19
0
        public void ClearData_Removes_Data()
        {
            //Arrange
            var correlationId = Guid.NewGuid();
            var expected      = Guid.NewGuid();
            var saga          = new MySaga {
                CorrelationId = correlationId
            };

            sut.Save(saga);

            // Act
            InMemorySagaRepository.ResetStorage();

            // Assert
            var deletedSaga = sut.Find <MySaga>(correlationId);

            deletedSaga.Should().BeNull();
        }
        public void Save_Persists_SagaData()
        {
            //Arrange
            var correlationId = Guid.NewGuid();
            var saga          = new MySaga {
                CorrelationId = correlationId
            };
            var expectedGuid = Guid.NewGuid();

            saga.SagaData.SomeGuid = expectedGuid;

            // Act
            sut.Save(saga);

            // Assert
            var restoredSaga = GetStoredModel(correlationId);

            restoredSaga.Should().NotBeNull();
            restoredSaga.BlobData.Should().ContainEquivalentOf(expectedGuid.ToString());
        }
Пример #21
0
        public void MultipleRepo_Instances_ShareDataStorage()
        {
            //Arrange
            var correlationId = Guid.NewGuid();
            var expected      = Guid.NewGuid();
            var saga          = new MySaga {
                CorrelationId = correlationId, SagaData = new MySagaData()
                {
                    SomeGuid = expected
                }
            };

            sut.Save(saga);

            // Act
            var anotherInstance = new InMemorySagaRepository(new JsonNetSerialiser(), new DumbSagaFactory());
            var restoredSaga    = anotherInstance.Find <MySaga>(correlationId);

            // Assert
            restoredSaga.SagaData.SomeGuid.Should().Be(expected);
        }
        public void Complete_Removes_Data()
        {
            //Arrange
            var correlationId = Guid.NewGuid();
            var saga          = new MySaga
            {
                CorrelationId = correlationId,
            };

            database.Insert(new SagaData()
            {
                CorrelationId = correlationId, BlobData = JsonConvert.SerializeObject(saga.SagaData)
            });

            // Act
            sut.Complete(saga);

            // Assert
            var updatedData = DatabaseHelpers.GetSagaData(database, correlationId);

            updatedData.Should().BeNull();
        }
        public void Save_Persists_Headers()
        {
            //Arrange
            var correlationId = Guid.NewGuid();
            var saga          = new MySaga {
                CorrelationId = correlationId
            };
            var expectedValue = Guid.NewGuid().ToString();

            saga.Headers = new Dictionary <string, string>()
            {
                { "key", expectedValue }
            };

            // Act
            sut.Save(saga);

            // Assert
            var restoredHeaders = DatabaseHelpers.GetSagaHeaders(database, correlationId);

            restoredHeaders.Should().HaveCount(1);
            restoredHeaders.First().Value.Should().Be(expectedValue);
        }
        public void Complete_Removes_Data()
        {
            //Arrange
            var correlationId = Guid.NewGuid();
            var saga          = new MySaga
            {
                CorrelationId = correlationId,
            };

            SetStoredModel(correlationId, new AzureTablesSagaRepository.StorageModel()
            {
                BlobData = JsonConvert.SerializeObject(saga.SagaData),
                Headers  = JsonConvert.SerializeObject(saga.Headers),
            });


            // Act
            sut.Complete(saga);

            // Assert
            var updatedData = GetStoredModel(correlationId);

            updatedData.Should().BeNull();
        }
        public void Save_Persists_Headers()
        {
            //Arrange
            var correlationId = Guid.NewGuid();
            var saga          = new MySaga {
                CorrelationId = correlationId
            };
            var expectedValue = Guid.NewGuid().ToString();

            saga.Headers = new Dictionary <string, string>()
            {
                { "key", expectedValue }
            };

            // Act
            sut.Save(saga);

            // Assert
            var restoredSaga    = GetStoredModel(correlationId);
            var restoredHeaders = JsonConvert.DeserializeObject <Dictionary <String, String> >(restoredSaga.Headers);

            restoredHeaders.Should().HaveCount(1);
            restoredHeaders.First().Value.Should().Be(expectedValue);
        }
Пример #26
0
 public void UncommittedEventsAreInOrder()
 {
     var events = new List<E>();
     Action<E> onApply = e => events.Add(e);
     var saga = new MySaga(onApply);
     saga.Method();
     saga.Method();
     saga.GetUncommittedChanges().Should().Have.SameSequenceAs(events);
 }