Esempio n. 1
0
        public async Task apply_stream_event_when_event_type_is_resolvable_and_update_state()
        {
            var mockEventResolver = new Mock <IBusinessEventResolver>();
            var mockBusinessEvent = new Mock <IBusinessEvent>();
            var streamId          = "s";
            var position          = 5;
            var eventType         = "x";
            var eventData         = Encoding.Unicode.GetBytes("data");
            var streamEvent       = new StreamEvent(streamId, position, null, eventType, eventData);
            var causalId          = "c";
            var cancellationToken = CancellationToken.None;
            var state             = new TestState(mockEventResolver.Object);
            var handlerCalled     = false;
            var addCausalIdCalled = false;

            mockEventResolver.Setup(x => x.CanResolve(eventType)).Returns(true);
            mockEventResolver.Setup(x => x.Resolve(eventType, eventData)).Returns(mockBusinessEvent.Object);
            mockBusinessEvent.Setup(x => x.GetCausalId()).Returns(causalId);

            state.HandlerDelegate = (pStreamId, pPos, pEvent, pToken) =>
            {
                Assert.Equal(streamId, pStreamId);
                Assert.Equal(position, pPos);
                Assert.Equal(mockBusinessEvent.Object, pEvent);
                Assert.Equal(cancellationToken, pToken);
                handlerCalled = true;
                return(Task.CompletedTask);
            };

            state.CausalIdAdderDelegate = (pCausalId) =>
            {
                Assert.Equal(causalId, pCausalId);
                addCausalIdCalled = true;
                return(Task.FromResult(true));
            };

            await state.ApplyStreamEventAsync(streamEvent, CancellationToken.None);

            Assert.True(handlerCalled);
            Assert.True(addCausalIdCalled);                         // Added causal id to history?
            Assert.Equal(position, state.StreamPositionCheckpoint); // Updated stream checkpoint?
        }
Esempio n. 2
0
        public async Task not_apply_stream_event_but_update_stream_position_when_event_type_is_not_resolvable()
        {
            var mockEventResolver = new Mock <IBusinessEventResolver>();
            var called            = false;
            var state             = new TestState(mockEventResolver.Object);
            var position          = 5;
            var eventType         = "x";
            var streamEvent       = new StreamEvent(null, position, null, eventType, null);

            mockEventResolver.Setup(x => x.CanResolve(eventType)).Returns(false);

            state.HandlerDelegate = (_1, _2, _3, _4) =>
            {
                called = true;
                return(Task.CompletedTask);
            };

            await state.ApplyStreamEventAsync(streamEvent, CancellationToken.None);

            Assert.False(called);
            Assert.Equal(position, state.StreamPositionCheckpoint);             // Updated stream checkpoint?
        }