public void AndPackagedShimIsProvidedWhenRunWithPackageIdItCreateShimUsingPackagedShim() { var extension = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".exe" : string.Empty; var prepackagedShimPath = Path.Combine(_temporaryDirectory, ToolCommandName + extension); var tokenToIdentifyPackagedShim = "packagedShim"; _fileSystem.File.WriteAllText(prepackagedShimPath, tokenToIdentifyPackagedShim); var result = Parser.Instance.Parse($"dotnet tool install --tool-path /tmp/folder {PackageId}"); var packagedShimsMap = new Dictionary <PackageId, IReadOnlyList <FilePath> > { [new PackageId(PackageId)] = new[] { new FilePath(prepackagedShimPath) } }; var installCommand = new ToolInstallGlobalOrToolPathCommand( result, (location, forwardArguments) => (_toolPackageStore, _toolPackageStoreQuery, new ToolPackageInstallerMock( fileSystem: _fileSystem, store: _toolPackageStore, packagedShimsMap: packagedShimsMap, projectRestorer: new ProjectRestorerMock( fileSystem: _fileSystem, reporter: _reporter))), _createShellShimRepository, new EnvironmentPathInstructionMock(_reporter, _pathToPlaceShim), _reporter); installCommand.Execute().Should().Be(0); _fileSystem.File.ReadAllText(ExpectedCommandPath()).Should().Be(tokenToIdentifyPackagedShim); }
public void WhenRunWithPackageIdItShouldShowPathInstruction() { var toolInstallGlobalOrToolPathCommand = new ToolInstallGlobalOrToolPathCommand( _parseResult, _createToolPackageStoreAndInstaller, _createShellShimRepository, _environmentPathInstructionMock, _reporter); toolInstallGlobalOrToolPathCommand.Execute().Should().Be(0); _reporter.Lines.First().Should().Be(EnvironmentPathInstructionMock.MockInstructionText); }
public void WhenRunWithPackageIdAndBinPathItShouldNoteHaveEnvironmentPathInstruction() { var result = Parser.Instance.Parse($"dotnet tool install --tool-path /tmp/folder {PackageId}"); var toolInstallGlobalOrToolPathCommand = new ToolInstallGlobalOrToolPathCommand( result, _createToolPackageStoreAndInstaller, _createShellShimRepository, new EnvironmentPathInstructionMock(_reporter, _pathToPlaceShim), _reporter); toolInstallGlobalOrToolPathCommand.Execute().Should().Be(0); _reporter.Lines.Should().NotContain(l => l.Contains(EnvironmentPathInstructionMock.MockInstructionText)); }
public void WhenRunWithArchOptionItErrorsOnInvalidRids() { _reporter.Clear(); var parseResult = Parser.Instance.Parse($"dotnet tool install -g {PackageId} -a invalid"); var toolInstallGlobalOrToolPathCommand = new ToolInstallGlobalOrToolPathCommand( parseResult, _createToolPackageStoreAndInstaller, _createShellShimRepository, _environmentPathInstructionMock, _reporter); var exceptionThrown = Assert.Throws <AggregateException>(() => toolInstallGlobalOrToolPathCommand.Execute()); exceptionThrown.Message.Should().Contain("-invalid is invalid"); }
public void WhenRunFromToolInstallRedirectCommandWithPackageIdItShouldCreateValidShim() { var toolInstallGlobalOrToolPathCommand = new ToolInstallGlobalOrToolPathCommand( _parseResult, _createToolPackageStoreAndInstaller, _createShellShimRepository, _environmentPathInstructionMock, _reporter); var toolInstallCommand = new ToolInstallCommand( _parseResult, toolInstallGlobalOrToolPathCommand); toolInstallCommand.Execute().Should().Be(0); _fileSystem.File.Exists(ExpectedCommandPath()).Should().BeTrue(); }
public void WhenRunWithArchOptionItDownloadsAppHostTemplate() { var nugetPackageDownloader = new MockNuGetPackageDownloader(); var parseResult = Parser.Instance.Parse($"dotnet tool install -g {PackageId} -a arm64"); var toolInstallGlobalOrToolPathCommand = new ToolInstallGlobalOrToolPathCommand( parseResult, _createToolPackageStoreAndInstaller, _createShellShimRepository, _environmentPathInstructionMock, _reporter, nugetPackageDownloader); toolInstallGlobalOrToolPathCommand.Execute().Should().Be(0); nugetPackageDownloader.DownloadCallParams.Count.Should().Be(1); nugetPackageDownloader.ExtractCallParams.Count.Should().Be(1); nugetPackageDownloader.DownloadCallParams.First().Item1.Should().Be(new PackageId("microsoft.netcore.app.host.win-arm64")); }
public void WhenRunWithPackageIdItShouldCreateValidShim() { var toolInstallGlobalOrToolPathCommand = new ToolInstallGlobalOrToolPathCommand( _parseResult, _createToolPackageStoreAndInstaller, _createShellShimRepository, _environmentPathInstructionMock, _reporter); toolInstallGlobalOrToolPathCommand.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 = JsonSerializer.Deserialize <AppHostShellShimMakerMock.FakeShim>( _fileSystem.File.ReadAllText(ExpectedCommandPath())); _fileSystem.File.Exists(deserializedFakeShim.ExecutablePath).Should().BeTrue(); }
public ToolInstallCommand( ParseResult parseResult, ToolInstallGlobalOrToolPathCommand toolInstallGlobalOrToolPathCommand = null, ToolInstallLocalCommand toolInstallLocalCommand = null) : base(parseResult) { _toolInstallLocalCommand = toolInstallLocalCommand ?? new ToolInstallLocalCommand(_parseResult); _toolInstallGlobalOrToolPathCommand = toolInstallGlobalOrToolPathCommand ?? new ToolInstallGlobalOrToolPathCommand(_parseResult); _global = parseResult.GetValueForOption(ToolAppliedOption.GlobalOption); _local = parseResult.GetValueForOption(ToolAppliedOption.LocalOption); _toolPath = parseResult.GetValueForOption(ToolAppliedOption.ToolPathOption); _framework = parseResult.GetValueForOption(ToolInstallCommandParser.FrameworkOption); }
public void WhenRunWithoutAMatchingRangeItShouldFail() { ParseResult result = Parser.Instance.Parse($"dotnet tool install -g {PackageId} --version [5.0,10.0]"); var toolInstallGlobalOrToolPathCommand = new ToolInstallGlobalOrToolPathCommand( result, _createToolPackageStoreAndInstaller, _createShellShimRepository, new EnvironmentPathInstructionMock(_reporter, _pathToPlaceShim, true), _reporter); Action a = () => toolInstallGlobalOrToolPathCommand.Execute(); a.ShouldThrow <GracefulException>().And.Message .Should().Contain( LocalizableStrings.ToolInstallationRestoreFailed + Environment.NewLine + string.Format(LocalizableStrings.ToolInstallationFailedWithRestoreGuidance, PackageId)); _fileSystem.Directory.Exists(Path.Combine(_pathToPlacePackages, PackageId)).Should().BeFalse(); }
public void WhenRunWithInvalidVersionItShouldThrow() { const string invalidVersion = "!NotValidVersion!"; ParseResult result = Parser.Instance.Parse($"dotnet tool install -g {PackageId} --version {invalidVersion}"); var toolInstallGlobalOrToolPathCommand = new ToolInstallGlobalOrToolPathCommand( result, _createToolPackageStoreAndInstaller, _createShellShimRepository, new EnvironmentPathInstructionMock(_reporter, _pathToPlaceShim, true), _reporter); Action action = () => toolInstallGlobalOrToolPathCommand.Execute(); action .ShouldThrow <GracefulException>() .WithMessage(string.Format( LocalizableStrings.InvalidNuGetVersionRange, invalidVersion)); }
public void WhenRunWithPackageIdItShouldShowSuccessMessage() { var toolInstallGlobalOrToolPathCommand = new ToolInstallGlobalOrToolPathCommand( _parseResult, _createToolPackageStoreAndInstaller, _createShellShimRepository, new EnvironmentPathInstructionMock(_reporter, _pathToPlaceShim, true), _reporter); toolInstallGlobalOrToolPathCommand.Execute().Should().Be(0); _reporter .Lines .Should() .Equal(string.Format( LocalizableStrings.InstallationSucceeded, ToolCommandName, PackageId, PackageVersion).Green()); }
public void GivenCreateShimItShouldHaveNoBrokenFolderOnDisk() { _fileSystem.File.CreateEmptyFile(ExpectedCommandPath()); // Create conflict shim var toolInstallGlobalOrToolPathCommand = new ToolInstallGlobalOrToolPathCommand( _parseResult, _createToolPackageStoreAndInstaller, _createShellShimRepository, _environmentPathInstructionMock, _reporter); Action a = () => toolInstallGlobalOrToolPathCommand.Execute(); a.ShouldThrow <GracefulException>().And.Message .Should().Contain(string.Format( CommonLocalizableStrings.ShellShimConflict, ToolCommandName)); _fileSystem.Directory.Exists(Path.Combine(_pathToPlacePackages, PackageId)).Should().BeFalse(); }
public void WhenRunWithValidVersionWildcardItShouldSucceed() { ParseResult result = Parser.Instance.Parse($"dotnet tool install -g {PackageId} --version 1.0.*"); var toolInstallGlobalOrToolPathCommand = new ToolInstallGlobalOrToolPathCommand( result, _createToolPackageStoreAndInstaller, _createShellShimRepository, new EnvironmentPathInstructionMock(_reporter, _pathToPlaceShim, true), _reporter); toolInstallGlobalOrToolPathCommand.Execute().Should().Be(0); _reporter .Lines .Should() .Equal(string.Format( LocalizableStrings.InstallationSucceeded, ToolCommandName, PackageId, PackageVersion).Green()); }
public ToolInstallCommand( AppliedOption appliedCommand, ParseResult parseResult, ToolInstallGlobalOrToolPathCommand toolInstallGlobalOrToolPathCommand = null, ToolInstallLocalCommand toolInstallLocalCommand = null) : base(parseResult) { _appliedCommand = appliedCommand ?? throw new ArgumentNullException(nameof(appliedCommand)); _parseResult = parseResult ?? throw new ArgumentNullException(nameof(parseResult)); _toolInstallLocalCommand = toolInstallLocalCommand ?? new ToolInstallLocalCommand(_appliedCommand, _parseResult); _toolInstallGlobalOrToolPathCommand = toolInstallGlobalOrToolPathCommand ?? new ToolInstallGlobalOrToolPathCommand(_appliedCommand, _parseResult); _global = appliedCommand.ValueOrDefault <bool>(ToolAppliedOption.GlobalOption); _local = appliedCommand.ValueOrDefault <bool>(ToolAppliedOption.LocalOption); _toolPath = appliedCommand.SingleArgumentOrDefault(ToolAppliedOption.ToolPathOption); _framework = appliedCommand.ValueOrDefault <string>("framework"); }