public async Task Should_complete_message_if_saga_already_is_started() { //arrange var partitionKey = "a"; var id = "b"; var sagaStore = new Mock <ISagaStore>(); sagaStore.Setup(x => x.Create <SagaData>(partitionKey, id, It.IsAny <SagaData>(), TimeSpan.FromHours(1))).ThrowsAsync(new SagaAlreadyStartedException(partitionKey, id)); var di = new Mock <IDependencyInjection>(); di.Setup(x => x.GetInstance <IProcessMessage <SagaStartMessage> >(typeof(IProcessCommand <SagaStartMessage, Settings>))).Returns(new Saga()); var hostConfiguration = new Mock <IHostConfiguration>(); hostConfiguration.Setup(x => x.Log).Returns(Mock.Of <ILog>()); hostConfiguration.Setup(x => x.DependencyInjection).Returns(di.Object); // TODO: setup dependency injection var messageStateHandler = new Mock <IMessageStateHandler <SagaStartMessage> >(); messageStateHandler.Setup(x => x.MessageScope).Returns(di.Object); var pipelineInformation = new Mock <IPipelineInformation>(); pipelineInformation.Setup(x => x.HostConfiguration).Returns(hostConfiguration.Object); pipelineInformation.Setup(x => x.ProcessorInterfaceType).Returns(typeof(IProcessCommand <SagaStartMessage, Settings>)); var middleware = new SagaMiddleware(sagaStore.Object); //act await middleware.ProcessAsync(messageStateHandler.Object, pipelineInformation.Object, null, CancellationToken.None); //assert messageStateHandler.Verify(x => x.CompleteAsync(), Times.Once); }
public async Task Should_load_sagadata_and_call_next_when_success() { //arrange var partitionKey = "a"; var id = "b"; var sagaStore = new Mock <ISagaStore>(); sagaStore.Setup(x => x.Create(partitionKey, id, It.IsAny <SagaData>(), TimeSpan.FromHours(1))).ReturnsAsync(new SagaData { Data = "loaded" }); var saga = new Saga(); var di = new Mock <IDependencyInjection>(); di.Setup(x => x.GetInstance <IProcessMessage <SagaStartMessage> >(typeof(IProcessCommand <SagaStartMessage, Settings>))).Returns(saga); var hostConfiguration = new Mock <IHostConfiguration>(); hostConfiguration.Setup(x => x.Log).Returns(Mock.Of <ILog>()); hostConfiguration.Setup(x => x.DependencyInjection).Returns(di.Object); var messageStateHandler = new Mock <IMessageStateHandler <SagaStartMessage> >(); messageStateHandler.Setup(x => x.MessageScope).Returns(di.Object); var pipelineInformation = new Mock <IPipelineInformation>(); pipelineInformation.Setup(x => x.HostConfiguration).Returns(hostConfiguration.Object); pipelineInformation.Setup(x => x.ProcessorInterfaceType).Returns(typeof(IProcessCommand <SagaStartMessage, Settings>)); var next = new Mock <IMessageProcessor>(); var middleware = new SagaMiddleware(sagaStore.Object); //act await middleware.ProcessAsync(messageStateHandler.Object, pipelineInformation.Object, next.Object, CancellationToken.None); //assert next.Verify(x => x.ProcessAsync(messageStateHandler.Object, CancellationToken.None), Times.Once); saga.Data.Data.Should().Be("loaded"); }