Example #1
0
        public async Task Should_be_able_to_execute_query_sucessfully()
        {
            var scope   = Substitute.For <IHandlerScope>();
            var result  = new OneResult();
            var handler = new OneQueryHandler(result);

            scope.Create(typeof(IQueryHandler <OneQuery, OneResult>)).Returns(new[] { handler });

            var sut     = new MessageInvoker(scope);
            var context = new ExecuteQueriesInvocationContext(ClaimsPrincipal.Current, sut);
            await sut.ProcessAsync(context, new OneQuery());

            context.Replies.First().Body.Should().BeSameAs(result);
        }
Example #2
0
        public void Should_abort_if_multiple_query_handlers_have_been_registered()
        {
            var scope   = Substitute.For <IHandlerScope>();
            var result  = new OneResult();
            var handler = new OneQueryHandler(result);

            scope.Create(typeof(IQueryHandler <OneQuery, OneResult>)).Returns(new[] { handler, handler });

            var         sut     = new MessageInvoker(scope);
            var         context = new ExecuteQueriesInvocationContext(ClaimsPrincipal.Current, sut);
            Func <Task> actual  = () => sut.ProcessAsync(context, new OneQuery());

            actual.Should().Throw <OnlyOneQueryHandlerAllowedException>();
        }
Example #3
0
        public async Task Should_invoke_second_level_queries_directly()
        {
            var            scope    = Substitute.For <IHandlerScope>();
            var            result   = new OneResult();
            QueryTwoResult expected = null;
            var            handler  = new OneQueryHandler(result, (messageContext, query) =>
            {
                expected = messageContext.QueryAsync(new QueryTwo()).GetAwaiter().GetResult();
            });
            var result2  = new QueryTwoResult();
            var handler2 = new QueryTwoHandler(result2);

            scope.Create(typeof(IQueryHandler <OneQuery, OneResult>)).Returns(new[] { handler });
            scope.Create(typeof(IQueryHandler <QueryTwo, QueryTwoResult>)).Returns(new[] { handler2 });

            var sut     = new MessageInvoker(scope);
            var context = new ExecuteQueriesInvocationContext(ClaimsPrincipal.Current, sut);
            await sut.ProcessAsync(context, new OneQuery());

            expected.Should().BeSameAs(result2, "because it should not be enqueued as queries that comes from the queue");
            context.Replies.Count.Should().Be(1, "because only result from first queue should be enqueued");
            context.Replies.First().Body.Should().Be(result);
            context.Messages.Should().BeEmpty("because no messages were enqueued by the handlers");
        }