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