Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 public virtual Task UpdateA(FakeMessageEnvelope ctx, RegisteredMessageA msg) => Task.FromResult(0);