public async Task Invoke_CommandRequest_ShouldCallListener()
        {
            // Arrange
            var listener = new FakeCommandListener();

            ServiceProvider
            .Setup(s => s.GetService(typeof(IEnumerable <ICommandListener>)))
            .Returns(new[] { listener });
            HttpRequest
            .SetupGet(r => r.Path)
            .Returns("/commands");
            var commandBytes = Encoding.UTF8.GetBytes("{\"id\":\"1\",\"method\":\"get\",\"uri\":\"/ping\"}");

            RequestBody.Write(commandBytes);
            RequestBody.Position = 0;

            var target = GetTarget();

            // Act
            await target.Invoke(HttpContext.Object);

            // Assert
            listener.Envelopes.Count.ShouldBe(1);
            listener.Envelopes[0].Id.ShouldBe("1");
            listener.Envelopes[0].Method.ShouldBe(CommandMethod.Get);
            listener.Envelopes[0].Uri.ToString().ShouldBe("/ping");
        }
        public void SetUp()
        {
            base.SetUp();

            MessageListener  = new FakeMessageListener();
            MessageListeners = new List <FakeMessageListener>();
            MessageListeners.Add(MessageListener);
            ServiceProvider
            .Setup(s => s.GetService(typeof(IEnumerable <IMessageListener>)))
            .Returns(() => MessageListeners);
            NotificationListener  = new FakeNotificationListener();
            NotificationListeners = new List <FakeNotificationListener>();
            NotificationListeners.Add(NotificationListener);
            ServiceProvider
            .Setup(s => s.GetService(typeof(IEnumerable <INotificationListener>)))
            .Returns(() => NotificationListeners);
            CommandListener  = new FakeCommandListener();
            CommandListeners = new List <FakeCommandListener>();
            CommandListeners.Add(CommandListener);
            ServiceProvider
            .Setup(s => s.GetService(typeof(IEnumerable <ICommandListener>)))
            .Returns(() => CommandListeners);
        }