public async Task GivenANonZeroExitCodeShutdownFails()
        {
            const string FakeRazorAssemblyPath = "/path/to/razor.dll";
            const string ErrorMessage          = "failed!";

            var resolverMock = new Mock <IRazorAssemblyResolver>(MockBehavior.Strict);

            resolverMock.Setup(r => r.EnumerateRazorToolAssemblies()).Returns(new FilePath[] { new FilePath(FakeRazorAssemblyPath) });

            var commandMock = new Mock <ICommand>(MockBehavior.Strict);

            commandMock.Setup(c => c.CaptureStdOut()).Returns(commandMock.Object);
            commandMock.Setup(c => c.CaptureStdErr()).Returns(commandMock.Object);
            commandMock.Setup(c => c.Execute()).Returns(new CommandResult(null, 1, "", ErrorMessage));

            var commandFactoryMock = new Mock <ICommandFactory>(MockBehavior.Strict);

            commandFactoryMock
            .Setup(
                f => f.Create(
                    "exec",
                    new string[] { FakeRazorAssemblyPath, "shutdown" },
                    It.IsAny <NuGetFramework>(),
                    Constants.DefaultConfiguration))
            .Returns(commandMock.Object);

            var manager = new RazorServerManager(resolverMock.Object, commandFactoryMock.Object);

            var result = await manager.ShutdownServerAsync();

            result.Kind.Should().Be(ResultKind.Failure);
            result.Message.Should().Be(ErrorMessage);
            result.Exception.Should().BeNull();
        }
        public async Task GivenNoRazorAssemblyShutdownIsSkipped()
        {
            var resolverMock = new Mock <IRazorAssemblyResolver>(MockBehavior.Strict);

            resolverMock.Setup(r => r.EnumerateRazorToolAssemblies()).Returns(new FilePath[] {});

            var commandFactoryMock = new Mock <ICommandFactory>(MockBehavior.Strict);

            var manager = new RazorServerManager(resolverMock.Object, commandFactoryMock.Object);

            var result = await manager.ShutdownServerAsync();

            result.Kind.Should().Be(ResultKind.Skipped);
            result.Message.Should().Be(LocalizableStrings.NoRazorProjectFound);
            result.Exception.Should().BeNull();
        }
        public async Task GivenAnInvalidProjectFileShutdownFails()
        {
            var exception = new InvalidProjectFileException("invalid project!");

            var resolverMock = new Mock <IRazorAssemblyResolver>(MockBehavior.Strict);

            resolverMock.Setup(r => r.EnumerateRazorToolAssemblies()).Throws(exception);

            var commandFactoryMock = new Mock <ICommandFactory>(MockBehavior.Strict);

            var manager = new RazorServerManager(resolverMock.Object, commandFactoryMock.Object);

            var result = await manager.ShutdownServerAsync();

            result.Kind.Should().Be(ResultKind.Failure);
            result.Message.Should().Be(exception.Message);
            result.Exception.Should().Be(exception);
        }