protected override void Context() { base.Context(); listener = A.Fake <IFakeListener>(); fakeEvent1 = A.Fake <FakeEvent1>(); fakeEvent2 = A.Fake <FakeEvent2>(); sut.AddListener(listener); }
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); }