public void WhenRunWithValidVersionWildcardItShouldSucceed()
        {
            ParseResult   result         = Parser.Instance.Parse($"dotnet install tool -g {PackageId} --version 1.0.*");
            AppliedOption appliedCommand = result["dotnet"]["install"]["tool"];

            var installToolCommand = new InstallToolCommand(
                appliedCommand,
                result,
                _toolPackageStore,
                CreateToolPackageInstaller(),
                _shellShimRepositoryMock,
                new EnvironmentPathInstructionMock(_reporter, PathToPlaceShim, true),
                _reporter);

            installToolCommand.Execute().Should().Be(0);

            _reporter
            .Lines
            .Should()
            .Equal(string.Format(
                       LocalizableStrings.InstallationSucceeded,
                       ProjectRestorerMock.FakeCommandName,
                       PackageId,
                       PackageVersion).Green());
        }
        public void GivenCreateShimItShouldHaveNoBrokenFolderOnDisk()
        {
            _fileSystem.File.CreateEmptyFile(ExpectedCommandPath()); // Create conflict shim

            var installToolCommand = new InstallToolCommand(
                _appliedCommand,
                _parseResult,
                _toolPackageStore,
                CreateToolPackageInstaller(),
                _shellShimRepositoryMock,
                _environmentPathInstructionMock,
                _reporter);

            installToolCommand.Execute().Should().Be(1);

            _reporter
            .Lines[0]
            .Should()
            .Contain(
                string.Format(
                    CommonLocalizableStrings.ShellShimConflict,
                    ProjectRestorerMock.FakeCommandName));

            _fileSystem.Directory.Exists(Path.Combine(PathToPlacePackages, PackageId)).Should().BeFalse();
        }
        public void GivenInCorrectToolConfigurationWhenRunWithPackageIdItShouldFail()
        {
            var toolPackageObtainerSimulatorThatThrows
                = new ToolPackageObtainerMock(
                      _fileSystemWrapper, true, null,
                      () => throw new ToolConfigurationException("Simulated error"));
            var installToolCommand = new InstallToolCommand(
                _appliedCommand,
                _parseResult,
                toolPackageObtainerSimulatorThatThrows,
                _shellShimMakerMock,
                _environmentPathInstructionMock,
                _reporter);

            installToolCommand.Execute().Should().Be(1);

            _reporter.Lines.Count.Should().Be(2);

            _reporter
            .Lines[0]
            .Should()
            .Contain(
                string.Format(
                    LocalizableStrings.InvalidToolConfiguration,
                    "Simulated error"));

            _reporter
            .Lines[1]
            .Should()
            .Contain(string.Format(LocalizableStrings.ToolInstallationFailedContactAuthor, "global.tool.console.demo"));
        }
        public void WhenRunWithPackageIdItShouldShowPathInstruction()
        {
            var installToolCommand = new InstallToolCommand(_appliedCommand,
                                                            _parseResult,
                                                            _toolPackageObtainerMock,
                                                            _shellShimMakerMock,
                                                            _environmentPathInstructionMock);

            installToolCommand.Execute().Should().Be(0);

            _reporter.Lines.Single().Should().NotBeEmpty();
        }
Exemple #5
0
        public void WhenRunWithPackageIdItShouldShowPathInstruction()
        {
            var installToolCommand = new InstallToolCommand(_appliedCommand,
                                                            _parseResult,
                                                            _createToolPackageStoreAndInstaller,
                                                            _createShellShimRepository,
                                                            _environmentPathInstructionMock,
                                                            _reporter);

            installToolCommand.Execute().Should().Be(0);

            _reporter.Lines.First().Should().Be(EnvironmentPathInstructionMock.MockInstructionText);
        }
        public void WhenRunWithPackageIdItShouldShowPathInstruction()
        {
            var installToolCommand = new InstallToolCommand(_appliedCommand,
                                                            _parseResult,
                                                            _toolPackageStore,
                                                            CreateToolPackageInstaller(),
                                                            _shellShimRepositoryMock,
                                                            _environmentPathInstructionMock,
                                                            _reporter);

            installToolCommand.Execute().Should().Be(0);

            _reporter.Lines.First().Should().Be("INSTRUCTION");
        }
Exemple #7
0
        public void WhenRunWithPackageIdPackageFormatIsNotFullySupportedItShouldShowPathInstruction()
        {
            var _toolPackageStore  = new ToolPackageStoreMock(new DirectoryPath(PathToPlacePackages), _fileSystem);
            var installToolCommand = new InstallToolCommand(_appliedCommand,
                                                            _parseResult,
                                                            _toolPackageStore,
                                                            CreateToolPackageInstaller(),
                                                            _shellShimRepositoryMock,
                                                            _environmentPathInstructionMock,
                                                            _reporter);

            installToolCommand.Execute().Should().Be(0);

            _reporter.Lines.First().Should().Be("WARNING");
            _reporter.Lines.Skip(1).First().Should().Be("INSTRUCTION");
        }
        public void WhenRunWithPackageIdItShouldCreateValidShim()
        {
            var installToolCommand = new InstallToolCommand(_appliedCommand,
                                                            _parseResult,
                                                            _toolPackageObtainerMock,
                                                            _shellShimMakerMock,
                                                            _environmentPathInstructionMock);

            installToolCommand.Execute().Should().Be(0);

            // It is hard to simulate shell behavior. Only Assert shim can point to executable dll
            _fileSystemWrapper.File.Exists(ExpectedCommandPath()).Should().BeTrue();
            var deserializedFakeShim = JsonConvert.DeserializeObject <ShellShimMakerMock.FakeShim>(
                _fileSystemWrapper.File.ReadAllText(ExpectedCommandPath()));

            _fileSystemWrapper.File.Exists(deserializedFakeShim.ExecutablePath).Should().BeTrue();
        }
        public void WhenRunWithPackageIdItShouldShowSuccessMessage()
        {
            var installToolCommand = new InstallToolCommand(
                _appliedCommand,
                _parseResult,
                _toolPackageObtainerMock,
                _shellShimMakerMock,
                new EnvironmentPathInstructionMock(_reporter, PathToPlaceShim, true),
                _reporter);

            installToolCommand.Execute().Should().Be(0);

            _reporter
            .Lines
            .Single().Should()
            .Contain(string.Format(LocalizableStrings.InstallationSucceeded, "SimulatorCommand"));
        }
Exemple #10
0
        public void WhenRunWithPackageIdAndBinPathItShouldNoteHaveEnvironmentPathInstruction()
        {
            var result         = Parser.Instance.Parse($"dotnet install tool --tool-path /tmp/folder {PackageId}");
            var appliedCommand = result["dotnet"]["install"]["tool"];
            var parser         = Parser.Instance;
            var parseResult    = parser.ParseFrom("dotnet install", new[] { "tool", PackageId });

            var installToolCommand = new InstallToolCommand(appliedCommand,
                                                            parseResult,
                                                            _createToolPackageStoreAndInstaller,
                                                            _createShellShimRepository,
                                                            new EnvironmentPathInstructionMock(_reporter, PathToPlaceShim),
                                                            _reporter);

            installToolCommand.Execute().Should().Be(0);

            _reporter.Lines.Should().NotContain(l => l.Contains(EnvironmentPathInstructionMock.MockInstructionText));
        }
        public void GivenFailedPackageObtainWhenRunWithPackageIdItShouldHaveNoBrokenFolderOnDisk()
        {
            var toolPackageObtainerSimulatorThatThrows
                = new ToolPackageObtainerMock(
                      _fileSystemWrapper, true, null,
                      duringObtain: () => throw new PackageObtainException("Simulated error"),
                      toolsPath: PathToPlacePackages);
            var installToolCommand = new InstallToolCommand(
                _appliedCommand,
                _parseResult,
                toolPackageObtainerSimulatorThatThrows,
                _shellShimMakerMock,
                _environmentPathInstructionMock,
                _reporter);

            installToolCommand.Execute();

            _fileSystemWrapper.Directory.Exists(Path.Combine(PathToPlacePackages, PackageId)).Should().BeFalse();
        }
        public void WhenRunWithPackageIdWithSourceItShouldCreateValidShim()
        {
            const string  sourcePath     = "http://mysouce.com";
            ParseResult   result         = Parser.Instance.Parse($"dotnet install tool -g {PackageId} --source {sourcePath}");
            AppliedOption appliedCommand = result["dotnet"]["install"]["tool"];
            ParseResult   parseResult    =
                Parser.Instance.ParseFrom("dotnet install", new[] { "tool", PackageId, "--source", sourcePath });

            var installToolCommand = new InstallToolCommand(appliedCommand,
                                                            parseResult,
                                                            _toolPackageStore,
                                                            CreateToolPackageInstaller(
                                                                feeds: new MockFeed[] {
                new MockFeed
                {
                    Type     = MockFeedType.Source,
                    Uri      = sourcePath,
                    Packages = new List <MockFeedPackage>
                    {
                        new MockFeedPackage
                        {
                            PackageId = PackageId,
                            Version   = PackageVersion
                        }
                    }
                }
            }),
                                                            _shellShimRepositoryMock,
                                                            _environmentPathInstructionMock,
                                                            _reporter);

            installToolCommand.Execute().Should().Be(0);

            // It is hard to simulate shell behavior. Only Assert shim can point to executable dll
            _fileSystem.File.Exists(ExpectedCommandPath())
            .Should().BeTrue();
            var deserializedFakeShim =
                JsonConvert.DeserializeObject <ShellShimRepositoryMock.FakeShim>(
                    _fileSystem.File.ReadAllText(ExpectedCommandPath()));

            _fileSystem.File.Exists(deserializedFakeShim.ExecutablePath).Should().BeTrue();
        }
Exemple #13
0
        public void WhenRunWithPackageIdWithSourceItShouldCreateValidShim()
        {
            const string  sourcePath     = "http://mysouce.com";
            ParseResult   result         = Parser.Instance.Parse($"dotnet install tool -g global.tool.console.demo --source {sourcePath}");
            AppliedOption appliedCommand = result["dotnet"]["install"]["tool"];
            const string  packageId      = "global.tool.console.demo";
            ParseResult   parseResult    =
                Parser.Instance.ParseFrom("dotnet install", new[] { "tool", packageId, "--source", sourcePath });

            var installToolCommand = new InstallToolCommand(appliedCommand,
                                                            parseResult,
                                                            new ToolPackageObtainerMock(_fileSystemWrapper, additionalFeeds: new List <MockFeed>
            {
                new MockFeed
                {
                    Type     = MockFeedType.Source,
                    Uri      = sourcePath,
                    Packages = new List <MockFeedPackage>
                    {
                        new MockFeedPackage
                        {
                            PackageId = packageId,
                            Version   = "1.0.4"
                        }
                    }
                }
            }),
                                                            _shellShimMakerMock,
                                                            _environmentPathInstructionMock);

            installToolCommand.Execute();

            // It is hard to simulate shell behavior. Only Assert shim can point to executable dll
            _fileSystemWrapper.File.Exists(Path.Combine("pathToPlace", ToolPackageObtainerMock.FakeCommandName))
            .Should().BeTrue();
            ShellShimMakerMock.FakeShim deserializedFakeShim =
                JsonConvert.DeserializeObject <ShellShimMakerMock.FakeShim>(
                    _fileSystemWrapper.File.ReadAllText(
                        Path.Combine("pathToPlace",
                                     ToolPackageObtainerMock.FakeCommandName)));
            _fileSystemWrapper.File.Exists(deserializedFakeShim.ExecutablePath).Should().BeTrue();
        }
Exemple #14
0
        public void GivenInCorrectToolConfigurationWhenRunWithPackageIdItShouldThrow()
        {
            var toolPackageObtainerSimulatorThatThrows
                = new ToolPackageObtainerMock(
                      _fileSystemWrapper, true, null,
                      () => throw new ToolConfigurationException("Simulated error"));
            var installToolCommand = new InstallToolCommand(
                _appliedCommand,
                _parseResult,
                toolPackageObtainerSimulatorThatThrows,
                _shellShimMakerMock,
                _environmentPathInstructionMock,
                _fakeReporter);

            Action a = () => installToolCommand.Execute();

            a.ShouldThrow <GracefulException>()
            .And.Message.Should()
            .Contain(string.Format(LocalizableStrings.InstallFailedPackage, "Simulated error"));
        }
Exemple #15
0
        public void WhenRunWithNeitherOfGlobalNorToolPathShowErrorMessage()
        {
            var result         = Parser.Instance.Parse($"dotnet install tool {PackageId}");
            var appliedCommand = result["dotnet"]["install"]["tool"];
            var parser         = Parser.Instance;
            var parseResult    = parser.ParseFrom("dotnet install", new[] { "tool", PackageId });

            var installToolCommand = new InstallToolCommand(
                appliedCommand,
                parseResult,
                _createToolPackageStoreAndInstaller,
                _createShellShimRepository,
                new EnvironmentPathInstructionMock(_reporter, PathToPlaceShim, true),
                _reporter);

            Action a = () => installToolCommand.Execute();

            a.ShouldThrow <GracefulException>().And.Message
            .Should().Contain(LocalizableStrings.InstallToolCommandNeedGlobalOrToolPath);
        }
Exemple #16
0
        public void WhenRunWithPackageIdItShouldShowSuccessMessage()
        {
            var installToolCommand = new InstallToolCommand(
                _appliedCommand,
                _parseResult,
                _createToolPackageStoreAndInstaller,
                _createShellShimRepository,
                new EnvironmentPathInstructionMock(_reporter, PathToPlaceShim, true),
                _reporter);

            installToolCommand.Execute().Should().Be(0);

            _reporter
            .Lines
            .Should()
            .Equal(string.Format(
                       LocalizableStrings.InstallationSucceeded,
                       ProjectRestorerMock.FakeCommandName,
                       PackageId,
                       PackageVersion).Green());
        }
        public void GivenCreateShimItShouldHaveNoBrokenFolderOnDisk()
        {
            _fileSystemWrapper.File.CreateEmptyFile(ExpectedCommandPath()); // Create conflict shim
            var toolPackageObtainerSimulatorThatThrows
                = new ToolPackageObtainerMock(
                      _fileSystemWrapper, true, null,
                      toolsPath: PathToPlacePackages);
            var installToolCommand = new InstallToolCommand(
                _appliedCommand,
                _parseResult,
                toolPackageObtainerSimulatorThatThrows,
                _shellShimMakerMock,
                _environmentPathInstructionMock,
                _reporter);

            Action a = () => installToolCommand.Execute();

            a.ShouldThrow <GracefulException>();

            _fileSystemWrapper.Directory.Exists(Path.Combine(PathToPlacePackages, PackageId)).Should().BeFalse();
        }
Exemple #18
0
        public void WhenRunWithoutAMatchingRangeItShouldFail()
        {
            ParseResult   result         = Parser.Instance.Parse($"dotnet install tool -g {PackageId} --version [5.0,10.0]");
            AppliedOption appliedCommand = result["dotnet"]["install"]["tool"];

            var installToolCommand = new InstallToolCommand(
                appliedCommand,
                result,
                _createToolPackageStoreAndInstaller,
                _createShellShimRepository,
                new EnvironmentPathInstructionMock(_reporter, PathToPlaceShim, true),
                _reporter);

            Action a = () => installToolCommand.Execute();

            a.ShouldThrow <GracefulException>().And.Message
            .Should().Contain(
                LocalizableStrings.ToolInstallationRestoreFailed +
                Environment.NewLine + string.Format(LocalizableStrings.ToolInstallationFailed, PackageId));

            _fileSystem.Directory.Exists(Path.Combine(PathToPlacePackages, PackageId)).Should().BeFalse();
        }
Exemple #19
0
        public void WhenRunWithInvalidVersionItShouldThrow()
        {
            const string  invalidVersion = "!NotValidVersion!";
            ParseResult   result         = Parser.Instance.Parse($"dotnet install tool -g {PackageId} --version {invalidVersion}");
            AppliedOption appliedCommand = result["dotnet"]["install"]["tool"];

            var installToolCommand = new InstallToolCommand(
                appliedCommand,
                result,
                _createToolPackageStoreAndInstaller,
                _createShellShimRepository,
                new EnvironmentPathInstructionMock(_reporter, PathToPlaceShim, true),
                _reporter);

            Action action = () => installToolCommand.Execute();

            action
            .ShouldThrow <GracefulException>()
            .WithMessage(string.Format(
                             LocalizableStrings.InvalidNuGetVersionRange,
                             invalidVersion));
        }
Exemple #20
0
        public void WhenRunWithoutAMatchingRangeItShouldFail()
        {
            ParseResult   result         = Parser.Instance.Parse($"dotnet install tool -g {PackageId} --version [5.0,10.0]");
            AppliedOption appliedCommand = result["dotnet"]["install"]["tool"];

            var installToolCommand = new InstallToolCommand(
                appliedCommand,
                result,
                _createToolPackageStoreAndInstaller,
                _createShellShimRepository,
                new EnvironmentPathInstructionMock(_reporter, PathToPlaceShim, true),
                _reporter);

            installToolCommand.Execute().Should().Be(1);

            _reporter
            .Lines
            .Should()
            .Equal(
                $"Error: failed to restore package {PackageId}.",     // From mock implementation, not localized
                LocalizableStrings.ToolInstallationRestoreFailed.Red(),
                string.Format(LocalizableStrings.ToolInstallationFailed, PackageId).Red());
        }