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); }
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); }
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; }