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