public async Task CanInvokeAsyncMethod()
        {
            var handler = new ValueCommandHandler();
            var command = new ValueCommand(11);

            await this.testee.InvokeAsync(handler, command).ConfigureAwait(false);

            handler.Value.Should().Be(11);
        }
        public async Task DoesNotInvokeAsyncHandler_WhenItWasNotAddedBefore()
        {
            var handler = new ValueCommandHandler();
            var command = new ValueCommand(11);

            await this.testee.InvokeAsync(handler, command).ConfigureAwait(false);

            handler.Value.Should().Be(0);
        }
        public void CanSubscribeCommandHandler()
        {
            var handler = new ValueCommandHandler();

            this.testee.SubscribeCommandHandler <ValueCommand>(handler.HandleAsync);

            var subscription = this.testee.Subscriptions.GetCommandSubscription(new ValueCommand(11));

            subscription.Should().BeAssignableTo <CommandSubscription <ValueCommand> >();
        }
        public async Task CanInvokeAsyncHandlerWithMessage_WhenTheirTypeRelationshipWasAddedBefore()
        {
            this.testee.Add(typeof(ValueCommandHandler), typeof(ValueCommand));

            var handler = new ValueCommandHandler();
            var command = new ValueCommand(11);

            await this.testee.InvokeAsync(handler, command).ConfigureAwait(false);

            handler.Value.Should().Be(11);
        }
        public async Task CanGetCommandSubscription_WhenItHasBeenSubscribedWithAssemblyScanningBefore()
        {
            Action <Type> register = t => { };

            var command = new ValueCommand(Value);
            var handler = new ValueCommandHandler();

            A.CallTo(() => this.handlerRegistry.GetCommandHandler(command)).Returns(handler);

            this.testee.ScanAssemblyForMessageHandlers(Assembly.GetExecutingAssembly(), register);

            var subscription = this.testee.GetCommandSubscription(command);
            await subscription.HandleAsync(command).ConfigureAwait(false);

            handler.Value.Should().Be(Value);
        }