예제 #1
0
        public async Task Process_WithPrepareContextNotificationHandler_ShouldCallPrepareContextNotificationHandler()
        {
            // Arrange
            var serviceScopeMock        = new Mock <IServiceScope>();
            var serviceScopeFactoryMock = NewServiceScopeFactoryMock;

            serviceScopeFactoryMock.Setup(x => x.CreateScope()).Returns(() => serviceScopeMock.Object);
            var commandHandlingContext = new CommandHandlingContext();

            serviceScopeMock
            .Setup(x => x.GetService(typeof(CommandHandlingContext)))
            .Returns(commandHandlingContext);
            serviceScopeMock
            .Setup(x => x.GetService(typeof(IEnumerable <ICommandHandler <FakeCommand> >)))
            .Returns(new[] { new Mock <ICommandHandler <FakeCommand> >().Object });
            var command              = new FakeCommand();
            var prepareContextMock   = new Mock <Action <object, CommandHandlingContext> >();
            var notificationHandlers = new CommandProcessorNotificationHandlers {
                PrepareContext = prepareContextMock.Object
            };
            var processor = new CommandProcessor(serviceScopeFactoryMock.Object, NewEventStoreMock.Object, NewEventDispatcherMock.Object, notificationHandlers);

            // Act
            await processor.Process(command);

            // Assert
            prepareContextMock.Verify(x => x(command, commandHandlingContext), Times.Once);
            prepareContextMock.Verify(x => x(It.IsAny <object>(), It.IsAny <CommandHandlingContext>()), Times.Once);
        }
예제 #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CommandProcessor"/> class.
 /// </summary>
 /// <param name="serviceScopeFactory">The service scope factory.</param>
 /// <param name="eventStore">The event store.</param>
 /// <param name="eventDispatcher">The event dispatcher.</param>
 /// <param name="notificationHandlers">Optional <see cref="CommandProcessorNotificationHandlers"/> instance.</param>
 public CommandProcessor(
     IServiceScopeFactory serviceScopeFactory,
     IEventStore <string, object> eventStore,
     IEventDispatcher <object> eventDispatcher,
     CommandProcessorNotificationHandlers notificationHandlers = null)
     : base(serviceScopeFactory, eventStore, eventDispatcher, notificationHandlers)
 {
 }
        public void OnEnrichEvent_EnrichEventIsNull_ShouldNotThrowException()
        {
            // Arrange
            var handlers = new CommandProcessorNotificationHandlers();

            handlers.EnrichEvent = null;

            // Act & Assert
            Action action = () => handlers.OnEnrichEvent(null, null, null);

            action.Should().NotThrow();
        }
        public void OnPrepareContext_PrepareContextIsNull_ShouldNotThrowException()
        {
            // Arrange
            var handlers = new CommandProcessorNotificationHandlers();

            handlers.PrepareContext = null;

            // Act & Assert
            Action action = () => handlers.OnPrepareContext(null, null);

            action.Should().NotThrow();
        }
        public void OnPrepareContext_PrepareContextIsSet_ShouldCallPrepareContext()
        {
            // Arrange
            var command     = new Mock <object>().Object;
            var context     = new CommandHandlingContext();
            var handlers    = new CommandProcessorNotificationHandlers();
            var handlerMock = new Mock <Action <object, CommandHandlingContext> >();

            handlers.PrepareContext = handlerMock.Object;

            // Act
            handlers.OnPrepareContext(command, context);

            // Assert
            handlerMock.Verify(x => x(command, context), Times.Once);
        }
        public void OnEnrichEvent_EnrichEventIsSet_ShouldCallEnrichEvent()
        {
            // Arrange
            var @event        = new Mock <object>().Object;
            var command       = new Mock <object>().Object;
            var enrichedEvent = new Mock <object>().Object;
            var context       = new CommandHandlingContext();
            var handlers      = new CommandProcessorNotificationHandlers();
            var handlerMock   = new Mock <Func <object, object, CommandHandlingContext, object> >();

            handlerMock.Setup(x => x(@event, command, context)).Returns(enrichedEvent);
            handlers.EnrichEvent = handlerMock.Object;

            // Act
            var result = handlers.OnEnrichEvent(@event, command, context);

            // Assert
            handlerMock.Verify(x => x(@event, command, context), Times.Once);
            result.Should().Be(enrichedEvent);
        }
예제 #7
0
        public async Task Process_WithEnrichEventNotificationHandler_ShouldCallEnrichEventNotificationHandler()
        {
            // Arrange
            object capturedEvent1 = null;
            object capturedEvent2 = null;
            IEnumerable <object> capturedStoredEvents = null;
            var serviceScopeMock        = new Mock <IServiceScope>();
            var serviceScopeFactoryMock = NewServiceScopeFactoryMock;

            serviceScopeFactoryMock.Setup(x => x.CreateScope()).Returns(() => serviceScopeMock.Object);
            var commandHandlingContext = new CommandHandlingContext();

            serviceScopeMock
            .Setup(x => x.GetService(typeof(CommandHandlingContext)))
            .Returns(commandHandlingContext);
            serviceScopeMock
            .Setup(x => x.GetService(typeof(IEnumerable <ICommandHandler <FakeCommand> >)))
            .Returns(new[] { new FakeCommandHandler(commandHandlingContext, x => x.DoSomething()) });
            var transactionMock = new Mock <IEventStoreTransaction <string, object> >();
            var eventStoreMock  = NewEventStoreMock;

            eventStoreMock
            .Setup(x => x.BeginTransaction(It.IsAny <CommandHandlingContext>()))
            .Returns(transactionMock.Object);
            transactionMock
            .Setup(x => x.StoreEvents("some_id", 5, It.IsAny <IEnumerable <object> >(), default(CancellationToken)))
            .Callback <string, long, IEnumerable <object>, CancellationToken>((_, __, x, ___) => capturedStoredEvents = x)
            .Returns(Task.CompletedTask);
            var command         = new FakeCommand();
            var event1          = new FakeEvent1();
            var event2          = new FakeEvent2();
            var enrichEventMock = new Mock <Func <object, object, CommandHandlingContext, object> >();

            enrichEventMock
            .Setup(x => x(It.Is <object>(y => y is FakeEvent1), command, It.IsAny <CommandHandlingContext>()))
            .Callback <object, object, CommandHandlingContext>((x, _, __) => capturedEvent1 = x)
            .Returns(event1);
            enrichEventMock
            .Setup(x => x(It.Is <object>(y => y is FakeEvent2), command, It.IsAny <CommandHandlingContext>()))
            .Callback <object, object, CommandHandlingContext>((x, _, __) => capturedEvent2 = x)
            .Returns(event2);
            var notificationHandlers = new CommandProcessorNotificationHandlers {
                EnrichEvent = enrichEventMock.Object
            };
            var processor = new CommandProcessor(serviceScopeFactoryMock.Object, eventStoreMock.Object, NewEventDispatcherMock.Object, notificationHandlers);

            // Act
            await processor.Process(command);

            // Assert
            capturedEvent1.Should().NotBeNull();
            capturedEvent2.Should().NotBeNull();
            capturedStoredEvents.Should().NotBeNull();

            enrichEventMock.Verify(x => x(capturedEvent1, command, commandHandlingContext), Times.Once);
            enrichEventMock.Verify(x => x(capturedEvent2, command, commandHandlingContext), Times.Once);

            transactionMock.Verify(x => x.StoreEvents("some_id", 5, capturedStoredEvents, default(CancellationToken)), Times.Once);
            capturedStoredEvents.Should().Contain(event1);
            capturedStoredEvents.Should().Contain(event2);
        }