public void Create_RefWithMultipleMatchingTransactionId_UseLastReference() { // Arrange var func = new SagaStepResolver().Create(); var sagaEvent = new SagaEvent01(); var references = new List <ISagaReference> { new SagaReference(new SagaVersion("1.0.0"), 0, SagaMessageType.Command, sagaEvent.ProcessId, sagaEvent.TransactionId), new SagaReference(new SagaVersion("1.0.0"), 1, SagaMessageType.Command, sagaEvent.ProcessId, sagaEvent.TransactionId) }; var configuration = new SagaStepConfiguration <SagaEvent01, SagaStep01Mock>(new SagaVersion("1.0.0"), 2, null); var configurations = new List <ISagaStepConfiguration> { new SagaStepConfiguration <SagaEvent01, SagaStep01Mock>(new SagaVersion("1.0.0"), 0, null), new SagaStepConfiguration <SagaEvent01, SagaStep01Mock>(new SagaVersion("1.0.0"), 1, null), configuration, }; // Act var result = func(sagaEvent, references, configurations); // Assert Assert.Same(configuration, result); }
public async Task RunAsync_EventIsNull_ThrowsArgumentNull() { // Arrange var sagaStepAdapter = CreateSagaStepAdapter(); SagaEvent01 sagaEvent = null; // Assert await Assert .ThrowsAsync <ArgumentNullException>(() => sagaStepAdapter.RunAsync(sagaEvent)) .ConfigureAwait(false); }
public async Task RunAsync_NoAddStepsCalled_ThrowInvalidOperation() { // Arrange var sagaProcessor = CreateSagaProcessor(); var sagaEvent = new SagaEvent01(); // Assert await Assert .ThrowsAsync <InvalidOperationException>(() => sagaProcessor.RunAsync(sagaEvent)) .ConfigureAwait(false); }
public void Create_ConfigurationsNull_ThrowArgumentNull() { // Arrange var func = new SagaStepResolver().Create(); var sagaEvent = new SagaEvent01(); IList <ISagaStepConfiguration> configurations = null; // Assert Assert.Throws <ArgumentNullException>(() => func(sagaEvent, null, configurations)); }
public void IsResponsible_EventTypeEqualPredicateReturnsFalse_ReturnFalse() { // Arrange var sagaStepConfiguration = new SagaStepConfiguration <SagaEvent01, SagaStep01Mock>(new SagaVersion("1.0.0"), 1, _ => false); var sagaEvent = new SagaEvent01(); // Act var result = sagaStepConfiguration.IsResponsible(sagaEvent); // Assert Assert.False(result); }
public void Create_RefsNullOneStepWithFalsePredicate_ThrowInvalidOperation() { // Arrange var func = new SagaStepResolver().Create(); var sagaEvent = new SagaEvent01(); var configurations = new List <ISagaStepConfiguration> { new SagaStepConfiguration <SagaEvent01, SagaStep01Mock>(new SagaVersion("1.0.0"), 0, _ => false) }; // Assert Assert.Throws <InvalidOperationException>(() => func(sagaEvent, null, configurations)); }
public async Task RunAsync_RunWithEvent_CompleteRun() { // Arrange var saga = CreateSaga(); var sagaEvent = new SagaEvent01(); _mockSagaProfile.Setup(prfl => prfl.Configure(It.IsAny <ISagaProcessorBuilder>())); _mockSagaProcessorBuilder.Setup(bldr => bldr.Build()).Returns(_mockSagaProcessor.Object); _mockSagaProcessor.Setup(prcssr => prcssr.RunAsync(sagaEvent)).ReturnsAsync(new ArraySegment <ISagaCommand>()); // Act await saga .RunAsync(sagaEvent) .ConfigureAwait(false); }
public void Create_RefsNullOneStepWithCorrectEvent_ReturnStep() { // Arrange var func = new SagaStepResolver().Create(); var sagaEvent = new SagaEvent01(); var configuartion = new SagaStepConfiguration <SagaEvent01, SagaStep01Mock>(new SagaVersion("1.0.0"), 0, null); var configurations = new List <ISagaStepConfiguration> { configuartion }; // Act var result = func(sagaEvent, null, configurations); // Assert Assert.Same(configuartion, result); }
public async Task RunAsync_ValidInjections_CallsRunAsyncOfStep() { // Arrange var sagaStepAdapter = CreateSagaStepAdapter(); var sagaEvent = new SagaEvent01(); _mockSagaStep .Setup(stp => stp.RunAsync(It.IsAny <SagaEvent01>())) .ReturnsAsync(new List <ISagaCommand>()); // Act await sagaStepAdapter .RunAsync(sagaEvent) .ConfigureAwait(false); // Assert _mockSagaStep.Verify(stp => stp.RunAsync(sagaEvent), Times.Once); }
public void Create_RefWithMatchingTransactionIdButFailingPredicate_ThrowInvalidOperation() { // Arrange var func = new SagaStepResolver().Create(); var sagaEvent = new SagaEvent01(); var references = new List <ISagaReference> { new SagaReference(new SagaVersion("1.0.0"), 1, SagaMessageType.Command, sagaEvent.ProcessId, sagaEvent.TransactionId) }; var configurations = new List <ISagaStepConfiguration> { new SagaStepConfiguration <SagaEvent01, SagaStep01Mock>(new SagaVersion("1.0.0"), 0, _ => false), new SagaStepConfiguration <SagaEvent01, SagaStep01Mock>(new SagaVersion("1.0.0"), 1, _ => false) }; // Assert Assert.Throws <InvalidOperationException>(() => func(sagaEvent, references, configurations)); }
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 RunAsync_RunTwice_BuildCalledOnce() { // Arrange var saga = CreateSaga(); var sagaEvent = new SagaEvent01(); _mockSagaProfile.Setup(prfl => prfl.Configure(It.IsAny <ISagaProcessorBuilder>())); _mockSagaProcessorBuilder.Setup(bldr => bldr.Build()).Returns(_mockSagaProcessor.Object); _mockSagaProcessor.Setup(prcssr => prcssr.RunAsync(sagaEvent)).ReturnsAsync(new ArraySegment <ISagaCommand>()); // Act await saga .RunAsync(sagaEvent) .ConfigureAwait(false); await saga .RunAsync(sagaEvent) .ConfigureAwait(false); // Assert _mockSagaProcessorBuilder.Verify(bldr => bldr.Build(), Times.Once); }
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 void Create_RefsNullLastStepTruePredicate_ReturnLastStep() { // Arrange var func = new SagaStepResolver().Create(); var sagaEvent = new SagaEvent01(); var configuartion = new SagaStepConfiguration <SagaEvent01, SagaStep01Mock>( new SagaVersion("1.0.0"), 1, sgEvnt => sgEvnt.TransactionId == sagaEvent.TransactionId); var configurations = new List <ISagaStepConfiguration> { new SagaStepConfiguration <SagaEvent01, SagaStep01Mock>(new SagaVersion("1.0.0"), 0, _ => false), configuartion }; // Act var result = func(sagaEvent, null, configurations); // Assert Assert.Same(configuartion, result); }
public void Create_RefWithoutMatchingReferenceId_HandledLikeRefsNull() { // Arrange var func = new SagaStepResolver().Create(); var sagaEvent = new SagaEvent01(); var references = new List <ISagaReference> { new SagaReference(new SagaVersion("1.0.0"), 0, SagaMessageType.Command, Guid.NewGuid(), sagaEvent.TransactionId) }; var configuration = new SagaStepConfiguration <SagaEvent01, SagaStep01Mock>(new SagaVersion("1.0.0"), 0, null); var configurations = new List <ISagaStepConfiguration> { configuration, new SagaStepConfiguration <SagaEvent01, SagaStep01Mock>(new SagaVersion("1.0.0"), 1, null) }; // Act var result = func(sagaEvent, references, configurations); // Assert Assert.Same(configuration, result); }