public async Task Should_get_result()
        {
            var handler = new TestGetSomethingHandler();

            _router.RegisterHandler <TestGetSomething>((x, token) => handler.Handle(x, token));
            var res = await _router.Query(new TestGetSomething());

            Assert.Equal("test", res);
        }
        public async Task Should_run_cancellation_handler()
        {
            var handler = new TestGetSomethingHandler();

            _router.RegisterHandler <TestGetSomething>((x, token) => handler.Handle(x, token));
            await _router.Query(new TestGetSomething());

            Assert.Equal(1, handler.TimesRun);
        }
        public async Task Should_forward_cancellation_token()
        {
            var token   = new CancellationToken();
            var handler = new TestGetSomethingHandler();

            _router.RegisterHandler <TestGetSomething>(handler.Handle);
            await _router.Query(new TestGetSomething(), token);

            Assert.Equal(token, handler.Token);
        }
        public async Task Should_throw_if_handler_throws()
        {
            var handler = new TestGetSomethingHandler();

            _router.RegisterHandler <TestGetSomething>(handler.Handle);
            await Assert.ThrowsAsync <ConcurrencyException>(
                async() => await _router.Query(new TestGetSomething {
                ExpectedVersion = 30
            }));
        }
        public async Task Should_throw_if_more_handlers()
        {
            var handler = new TestGetSomethingHandler();

            _router.RegisterHandler <TestGetSomething>(handler.Handle);
            _router.RegisterHandler <TestGetSomething>(handler.Handle);

            await Assert.ThrowsAsync <InvalidOperationException>(async() =>
                                                                 await _router.Query(new TestGetSomething()));
        }