Example #1
0
        private static IDictionary <ISagaVersion, IList <ISagaStepConfiguration> > CreateVersions(params string[] versions)
        {
            var result = new Dictionary <ISagaVersion, IList <ISagaStepConfiguration> >();

            foreach (var version in versions)
            {
                var sagaVersion = new SagaVersion(version);

                result.Add(sagaVersion, new List <ISagaStepConfiguration> {
                    new SagaStepConfiguration <SagaEvent01, SagaStep01Mock>(sagaVersion, 0, null)
                });
            }

            return(result);
        }
Example #2
0
        public async Task RunAsync_ValidCall_ReturnsCommand()
        {
            // Arrange
            var sagaProcessor = CreateSagaProcessor();
            var sagaEvent     = new SagaEvent01();
            var sagaVersion   = new SagaVersion("1.0.0");

            var mockSagaStep        = new SagaStepAdapter <SagaEvent01>(sagaVersion, 0, new SagaStep01Mock());
            var mockConfiguration01 = _mockRepository.Create <ISagaStepConfiguration>();

            mockConfiguration01
            .Setup(cnfgrtn => cnfgrtn.Create(It.IsAny <ISagaServiceProvider>()))
            .Returns(mockSagaStep);

            var mockConfiguration02 = _mockRepository.Create <ISagaStepConfiguration>();

            var configurations = new List <ISagaStepConfiguration>
            {
                mockConfiguration01.Object,
                mockConfiguration02.Object
            };

            _mockSagaVersionStepResolver
            .Setup(rslvr => rslvr.ResolveAsync(sagaEvent, It.Is <IDictionary <ISagaVersion, IList <ISagaStepConfiguration> > >(dctnry => dctnry.Single().Value == configurations)))
            .ReturnsAsync(mockConfiguration01.Object);

            _mockSagaProcess
            .Setup(prcss => prcss.RunAsync(sagaEvent, mockSagaStep))
            .ReturnsAsync(await mockSagaStep.RunAsync(sagaEvent).ConfigureAwait(false));

            // Act
            sagaProcessor.AddSteps(sagaVersion, configurations);

            var commands = await sagaProcessor
                           .RunAsync(sagaEvent)
                           .ConfigureAwait(false);

            // Assert
            Assert.NotEmpty(commands);
        }
Example #3
0
        public async Task ResolveAsync_EventStoreReturnsNull_FunctionsAreCalled()
        {
            // Arrange
            var sagaVersionStepResolver = CreateSagaVersionStepResolver();
            var sagaEvent = new SagaEvent01();

            var sagaVersion         = new SagaVersion("1.0.0");
            var mockConfiguration01 = _mockRepository.Create <ISagaStepConfiguration>();
            var mockConfiguration02 = _mockRepository.Create <ISagaStepConfiguration>();

            var versions = new Dictionary <ISagaVersion, IList <ISagaStepConfiguration> >
            {
                {
                    sagaVersion,
                    new List <ISagaStepConfiguration>
                    {
                        mockConfiguration01.Object,
                        mockConfiguration02.Object
                    }
                }
            };

            _mockSagaVersionResolver
            .Setup(vrsnRslvr => vrsnRslvr.Create())
            .Returns((_, versions) => versions.Single().Value);

            _mockSagaStepResolver
            .Setup(stpRslvr => stpRslvr.Create())
            .Returns((_, __, configurations) => configurations[0]);

            // Act
            var result = await sagaVersionStepResolver
                         .ResolveAsync(sagaEvent, versions)
                         .ConfigureAwait(false);

            // Assert
            Assert.Same(mockConfiguration01.Object, result);
        }
        public async Task <TSagaData> ReadSagaData <TSagaData>(string streamName, ResolvedEvent lastEvent, string messageId)
            where TSagaData : IContainSagaData
        {
            TSagaData result;
            var       count        = 2;
            var       currentEvent = lastEvent;

            while (!TryReadSagaData(streamName, currentEvent, messageId, out result))
            {
                var slice = await session.ReadStreamEventsBackwardAsync(streamName, -1, count, true).ConfigureAwait(false);

                if (slice.Status != SliceReadStatus.Success)
                {
                    return(default(TSagaData));
                }
                currentEvent = slice.Events.Last();
                count++;
            }
            var versionInfo = new SagaVersion(lastEvent.OriginalEventNumber, streamName);

            session.StoreSagaVersion(result.Id, versionInfo);
            return(result);
        }
 public void StoreSagaVersion(Guid sagaId, SagaVersion versionInfo)
 {
     session.StoreSagaVersion(sagaId, versionInfo);
 }
 public void StoreSagaVersion(Guid sagaId, SagaVersion version)
 {
     sagaVersions[sagaId] = version;
 }