public async Task DoesNotCallNext()
        {
            var next   = A.Fake <Func <Task> >();
            var testee = new FinalOutgoingMessageStep();

            await testee.InvokeAsync(A.Fake <OutgoingMessageContext>(), next).ConfigureAwait(false);

            A.CallTo(() => next.Invoke()).MustNotHaveHappened();
        }
        public async Task CreatesNewEnvelopeForCommands()
        {
            var testee = new FinalOutgoingMessageStep();
            var outgoingMessageContext = A.Fake <OutgoingMessageContext>();
            var configuration          = A.Fake <IHavePipelineConfiguration>();
            var endpointAddress        = new EndpointAddress("recipient");

            A.CallTo(() => outgoingMessageContext.Message).Returns(new ValueCommand(11));
            A.CallTo(() => outgoingMessageContext.Configuration).Returns(configuration);

            A.CallTo(() => configuration.GetConsumingEndpointAddress(A <ICommand> .Ignored))
            .Returns(endpointAddress);

            await testee.InvokeAsync(outgoingMessageContext, null).ConfigureAwait(false);

            A.CallTo(() => outgoingMessageContext.CreateEnvelope(endpointAddress)).MustHaveHappened();
        }
        public async Task CreatesNewEnvelopeForSubscriptionMessages()
        {
            var testee = new FinalOutgoingMessageStep();
            var outgoingMessageContext = A.Fake <OutgoingMessageContext>();
            var configuration          = A.Fake <IHavePipelineConfiguration>();
            var subscriptionMessage    = new SubscriptionMessage(new EndpointAddress("recipient"), typeof(ValueEvent).FullName);
            var endpointAddress        = new EndpointAddress("publisher");

            A.CallTo(() => outgoingMessageContext.Message).Returns(subscriptionMessage);
            A.CallTo(() => outgoingMessageContext.Configuration).Returns(configuration);

            A.CallTo(() => configuration.GetPublishingEndpointAddress(A <string> .Ignored))
            .Returns(endpointAddress);

            await testee.InvokeAsync(outgoingMessageContext, null).ConfigureAwait(false);

            A.CallTo(() => outgoingMessageContext.CreateEnvelope(endpointAddress)).MustHaveHappened();
        }
        public async Task CreatesNewEnvelopesForEvents()
        {
            var testee = new FinalOutgoingMessageStep();
            var outgoingMessageContext = A.Fake <OutgoingMessageContext>();
            var configuration          = A.Fake <IHavePipelineConfiguration>();
            var endpointAddress1       = new EndpointAddress("recipient1");
            var endpointAddress2       = new EndpointAddress("recipient2");

            A.CallTo(() => outgoingMessageContext.Message).Returns(new ValueEvent(11));
            A.CallTo(() => outgoingMessageContext.Configuration).Returns(configuration);

            A.CallTo(() => configuration.GetSubscribedEndpointAddresses(A <IEvent> .Ignored))
            .Returns(new[] { endpointAddress1, endpointAddress2 });

            await testee.InvokeAsync(outgoingMessageContext, null).ConfigureAwait(false);

            A.CallTo(() => outgoingMessageContext.CreateEnvelope(endpointAddress1)).MustHaveHappened();
            A.CallTo(() => outgoingMessageContext.CreateEnvelope(endpointAddress2)).MustHaveHappened();
        }