public async Task HelpProvidesDirections()
        {
            var container   = Substitute.For <IContainer>();
            var writer      = new MockTextWriter();
            var deliverable = new HelpDeliverable(null, writer, container);

            container.ResolveDeliverableByName(Arg.Is("help")).Returns(deliverable);

            await deliverable.Run(null, new[] { "help" });

            Assert.Equal(4, writer.Messages.Count());
        }
        public async Task DisplaysHelpForSingleDeliverable()
        {
            var container = Substitute.For <IContainer>();

            var writer          = new MockTextWriter();
            var mockDeliverable = new MockDeliverable(writer);

            container.ResolveDeliverableByName(Arg.Is("mock")).Returns(mockDeliverable);

            var deliverable = new HelpDeliverable(null, writer, container);

            await deliverable.Run(null, new[] { "mock" });

            Assert.Equal("I have directions", writer.Messages.First());
        }
        public async Task DisplaysErrorWhenDeliverableDoesntProvideDirections()
        {
            var container = Substitute.For <IContainer>();

            var writer          = new MockTextWriter();
            var mockDeliverable = new MockDeliverableNoDirections(writer);

            container.ResolveDeliverableByName(Arg.Is("mock2")).Returns(mockDeliverable);

            var deliverable = new HelpDeliverable(null, writer, container);

            await deliverable.Run(null, new[] { "mock2" });

            Assert.Equal("The deliverable 'mock2' doesn't implement help, you best contact the author", writer.Messages.First());
        }
        public async Task DisplaysAllAvailableDeliverables()
        {
            var container = Substitute.For <IContainer>();

            var writer = new MockTextWriter();

            container.ResolveAllDeliverables().Returns(new[] { new MockDeliverable(writer) });

            var deliverable = new HelpDeliverable(null, writer, container);

            await deliverable.Run(null, new string[0]);

            Assert.Equal(2, writer.Messages.Count());
            Assert.Equal("mock (aliases: m)", writer.Messages.Last());
        }