public async Task Project_MessageWithCorrectSequenceNumber_ShouldCallHandleMethodOfProjectionsWithMatchingSequenceNumber() { await _sequenceNumberRepository.Store(new Dictionary <string, int> { { "A", 5 }, { "B", 6 }, { "C", 5 } }); _projectionMocks[0].SetupGet(x => x.Key).Returns("A"); _projectionMocks[1].SetupGet(x => x.Key).Returns("B"); _projectionMocks[2].SetupGet(x => x.Key).Returns("C"); var message = new RegisteredMessageA(); _projectionMocks[0] .Setup(x => x.Handle(It.IsAny <Func <object> >(), It.Is <FakeMessageEnvelope>(e => e.Message == message), CancellationToken.None)) .Returns(() => Task.FromResult(true)); _projectionMocks[1] .Setup(x => x.Handle(It.IsAny <Func <object> >(), It.Is <FakeMessageEnvelope>(e => e.Message == message), CancellationToken.None)) .Returns(() => Task.FromResult(true)); _projectionMocks[2] .Setup(x => x.Handle(It.IsAny <Func <object> >(), It.Is <FakeMessageEnvelope>(e => e.Message == message), CancellationToken.None)) .Returns(() => Task.FromResult(true)); var projections = new HashSet <IProjection <string, FakeMessageEnvelope> >(_projectionMocks.Select(x => x.Object)); var projector = new Projector <string, FakeMessageEnvelope, TestNextSequenceNumberRepository>(projections, _factoryMock.Object); await projector.Project(new FakeMessageEnvelope(5, message)); _projectionMocks[0].Verify( x => x.Handle(It.IsAny <Func <object> >(), It.IsAny <FakeMessageEnvelope>(), It.IsAny <CancellationToken>()), Times.Once); _projectionMocks[1].Verify( x => x.Handle(It.IsAny <Func <object> >(), It.IsAny <FakeMessageEnvelope>(), It.IsAny <CancellationToken>()), Times.Never); _projectionMocks[2].Verify( x => x.Handle(It.IsAny <Func <object> >(), It.IsAny <FakeMessageEnvelope>(), It.IsAny <CancellationToken>()), Times.Once); await projector.Project(new FakeMessageEnvelope(6, message)); _projectionMocks[0].Verify( x => x.Handle(It.IsAny <Func <object> >(), It.IsAny <FakeMessageEnvelope>(), It.IsAny <CancellationToken>()), Times.Exactly(2)); _projectionMocks[1].Verify( x => x.Handle(It.IsAny <Func <object> >(), It.IsAny <FakeMessageEnvelope>(), It.IsAny <CancellationToken>()), Times.Once); _projectionMocks[2].Verify( x => x.Handle(It.IsAny <Func <object> >(), It.IsAny <FakeMessageEnvelope>(), It.IsAny <CancellationToken>()), Times.Exactly(2)); }
public void Handle_TwoDifferentMessages_ShouldCallCorrectHandlerWithCorrectArguments() { var connectionMock = new Mock <FakeConnection>(); Func <object> connectionFactory = () => connectionMock.Object; var token = new CancellationToken(); var messageA = new RegisteredMessageA(); var messageB = new RegisteredMessageB(); var messageEnvelopeA = new FakeMessageEnvelope(1, messageA); var messageEnvelopeB = new FakeMessageEnvelope(2, messageB); IProjection <string, FakeMessageEnvelope> projection = new TestProjection("A"); projection.Handle(connectionFactory, messageEnvelopeA, token); projection.Handle(connectionFactory, messageEnvelopeB, token); connectionMock.Verify(x => x.UpdateA(messageEnvelopeA, messageA), Times.Once); connectionMock.Verify(x => x.UpdateB(messageEnvelopeB, messageB, token), Times.Once); }
public virtual Task UpdateA(FakeMessageEnvelope ctx, RegisteredMessageA msg) => Task.FromResult(0);