Browse Source

Support Update-Package -reinstall for project and package id.

Update-Package does not currently support reinstalling across multiple
projects or reinstalling all packages for a single project.
pull/701/head
Matt Ward 10 years ago
parent
commit
902b1363d8
  1. 36
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs
  2. 92
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs
  3. 2
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  4. 12
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs
  5. 61
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeReinstallPackageAction.cs
  6. 5
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageFromRepositoryExtensions.cs
  7. 1
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs
  8. 5
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs
  9. 23
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs
  10. 69
      src/AddIns/Misc/PackageManagement/Project/Src/ReinstallPackageAction.cs
  11. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  12. 32
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs
  13. 148
      src/AddIns/Misc/PackageManagement/Test/Src/ReinstallPackageActionTests.cs

36
src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs

@ -69,6 +69,10 @@ namespace ICSharpCode.PackageManagement.Cmdlets @@ -69,6 +69,10 @@ namespace ICSharpCode.PackageManagement.Cmdlets
[Parameter]
public FileConflictAction FileConflictAction { get; set; }
[Parameter(Mandatory = true, ParameterSetName = "Reinstall")]
[Parameter(ParameterSetName = "All")]
public SwitchParameter Reinstall { get; set; }
protected override void ProcessRecord()
{
ThrowErrorIfProjectNotOpen();
@ -88,7 +92,11 @@ namespace ICSharpCode.PackageManagement.Cmdlets @@ -88,7 +92,11 @@ namespace ICSharpCode.PackageManagement.Cmdlets
{
if (HasPackageId()) {
if (HasProjectName()) {
UpdatePackageInSingleProject();
if (Reinstall) {
ReinstallPackageInSingleProject();
} else {
UpdatePackageInSingleProject();
}
} else {
UpdatePackageInAllProjects();
}
@ -208,5 +216,31 @@ namespace ICSharpCode.PackageManagement.Cmdlets @@ -208,5 +216,31 @@ namespace ICSharpCode.PackageManagement.Cmdlets
{
return new PackageReference(Id, Version, null, null, false, false);
}
void ReinstallPackageInSingleProject()
{
IPackageManagementProject project = GetProject();
IPackage package = project.FindPackage(Id, null);
ReinstallPackageAction action = CreateReinstallPackageAction(project, package);
using (IDisposable operation = StartReinstallOperation(action)) {
action.Execute();
}
}
IDisposable StartReinstallOperation(ReinstallPackageAction action)
{
return action.Project.SourceRepository.StartReinstallOperation(action.PackageId);
}
ReinstallPackageAction CreateReinstallPackageAction(IPackageManagementProject project, IPackage package)
{
ReinstallPackageAction action = project.CreateReinstallPackageAction();
action.PackageId = package.Id;
action.PackageVersion = package.Version;
action.UpdateDependencies = UpdateDependencies;
action.AllowPrereleaseVersions = AllowPreleaseVersions || !package.IsReleaseVersion();
action.PackageScriptRunner = this;
return action;
}
}
}

92
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs

@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
// DEALINGS IN THE SOFTWARE.
using System;
using System.Linq;
using System.Management.Automation;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
@ -179,6 +180,10 @@ namespace PackageManagement.Cmdlets.Tests @@ -179,6 +180,10 @@ namespace PackageManagement.Cmdlets.Tests
return action;
}
FakeReinstallPackageAction ReinstallPackageInSingleProjectAction {
get { return fakeProject.FakeReinstallPackageActionsCreated.First(); }
}
[Test]
public void ProcessRecord_NoActiveProject_ThrowsNoProjectOpenTerminatingError()
{
@ -846,5 +851,92 @@ namespace PackageManagement.Cmdlets.Tests @@ -846,5 +851,92 @@ namespace PackageManagement.Cmdlets.Tests
fakeConsoleHost.AssertLoggerIsDisposed();
Assert.AreEqual(cmdlet, fakeConsoleHost.CmdletLoggerUsedToCreateLogger);
}
[Test]
public void ProcessRecord_ReinstallWhenPackageIdAndProjectNameSpecified_ReinstallPackageActionIsExecuted()
{
CreateCmdletWithActivePackageSourceAndProject();
SetIdParameter("Test");
SetProjectNameParameter("MyProject");
cmdlet.Reinstall = true;
FakePackage testPackage = fakeProject.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.2.3");
RunCmdlet();
Assert.IsTrue(ReinstallPackageInSingleProjectAction.IsExecuted);
Assert.AreEqual(cmdlet, ReinstallPackageInSingleProjectAction.PackageScriptRunner);
Assert.AreEqual("Test", ReinstallPackageInSingleProjectAction.PackageId);
Assert.AreEqual(testPackage.Version, ReinstallPackageInSingleProjectAction.PackageVersion);
Assert.IsFalse(ReinstallPackageInSingleProjectAction.AllowPrereleaseVersions);
Assert.IsTrue(ReinstallPackageInSingleProjectAction.UpdateDependencies);
}
[Test]
public void ProcessRecord_ReinstallWhenPackageIdAndProjectNameSpecifiedAndSourceRepositoryIsOperationAware_UpdateOperationStartedAndDisposedForPackage()
{
CreateCmdletWithActivePackageSourceAndProject();
SetIdParameter("Test");
SetProjectNameParameter("MyProject");
fakeProject.FakeLocalRepository.AddFakePackage("Test");
FakeUpdatePackageAction action = CreateUpdateActionWhenUpdatingPackageInAllProjects("Test");
var operationAwareRepository = new FakeOperationAwarePackageRepository();
fakeProject.FakeSourceRepository = operationAwareRepository;
cmdlet.Reinstall = true;
RunCmdlet();
operationAwareRepository.AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "Test");
}
[Test]
public void ProcessRecord_ReinstallWhenPackageIdAndProjectNameSpecifiedAndIncludePrerelease_PrereleasesAllowedForReinstall()
{
CreateCmdletWithActivePackageSourceAndProject();
SetIdParameter("Test");
SetProjectNameParameter("MyProject");
cmdlet.Reinstall = true;
cmdlet.IncludePrerelease = true;
FakePackage testPackage = fakeProject.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.2.3");
RunCmdlet();
Assert.IsTrue(ReinstallPackageInSingleProjectAction.IsExecuted);
Assert.IsTrue(ReinstallPackageInSingleProjectAction.AllowPrereleaseVersions);
}
[Test]
public void ProcessRecord_ReinstallWhenPackageIdAndProjectNameSpecifiedAndLocalPackageIsPrerelease_PrereleasesAllowedForReinstall()
{
CreateCmdletWithActivePackageSourceAndProject();
SetIdParameter("Test");
SetProjectNameParameter("MyProject");
cmdlet.Reinstall = true;
cmdlet.IncludePrerelease = false;
FakePackage testPackage = fakeProject.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.2.3-alpha1");
RunCmdlet();
Assert.IsTrue(ReinstallPackageInSingleProjectAction.IsExecuted);
Assert.IsTrue(ReinstallPackageInSingleProjectAction.AllowPrereleaseVersions);
}
[Test]
public void ProcessRecord_ReinstallWhenPackageIdAndProjectNameSpecifiedAndIgnoreDependenciesIsTrue_DoNotUpdateDepenenciesOnReinstall()
{
CreateCmdletWithActivePackageSourceAndProject();
SetIdParameter("Test");
SetProjectNameParameter("MyProject");
cmdlet.Reinstall = true;
cmdlet.IgnoreDependencies = true;
FakePackage testPackage = fakeProject.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.2.3");
RunCmdlet();
Assert.IsTrue(ReinstallPackageInSingleProjectAction.IsExecuted);
Assert.IsFalse(ReinstallPackageInSingleProjectAction.UpdateDependencies);
}
// TODO:
// Need to allow unlisted packages to be reinstalled.
}
}

2
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -87,6 +87,7 @@ @@ -87,6 +87,7 @@
<Compile Include="Src\Design\DesignTimeSelectProjectsViewModel.cs" />
<Compile Include="Src\Design\FakePackageOperation.cs" />
<Compile Include="Src\Design\FakeProjectBuilder.cs" />
<Compile Include="Src\Design\FakeReinstallPackageAction.cs" />
<Compile Include="Src\Design\FakeSelectedProject.cs" />
<Compile Include="Src\DocumentLoader.cs" />
<Compile Include="Src\DocumentView.cs" />
@ -241,6 +242,7 @@ @@ -241,6 +242,7 @@
<Compile Include="Src\ProjectBuilder.cs" />
<Compile Include="Src\ProjectRootElementExtensions.cs" />
<Compile Include="Src\ReducedPackageOperations.cs" />
<Compile Include="Src\ReinstallPackageAction.cs" />
<Compile Include="Src\RemovedPackageReferenceMonitor.cs" />
<Compile Include="Src\ResolveFileConflictEventArgs.cs" />
<Compile Include="Src\RestorePackagesCommand.cs" />

12
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs

@ -35,7 +35,6 @@ namespace ICSharpCode.PackageManagement.Design @@ -35,7 +35,6 @@ namespace ICSharpCode.PackageManagement.Design
public FakePackageManagementProject(string name)
{
FakeInstallPackageAction = new FakeInstallPackageAction(this);
FakeUninstallPackageAction = new FakeUninstallPackageAction(this);
this.Name = name;
@ -59,7 +58,6 @@ namespace ICSharpCode.PackageManagement.Design @@ -59,7 +58,6 @@ namespace ICSharpCode.PackageManagement.Design
};
}
private FakeInstallPackageAction FakeInstallPackageAction;
public FakeUninstallPackageAction FakeUninstallPackageAction;
public FakeUpdatePackageAction FirstFakeUpdatePackageActionCreated {
@ -73,6 +71,9 @@ namespace ICSharpCode.PackageManagement.Design @@ -73,6 +71,9 @@ namespace ICSharpCode.PackageManagement.Design
public List<FakeUpdatePackageAction> FakeUpdatePackageActionsCreated =
new List<FakeUpdatePackageAction>();
public List<FakeReinstallPackageAction> FakeReinstallPackageActionsCreated =
new List<FakeReinstallPackageAction>();
public string Name { get; set; }
public bool IsPackageInstalled(string packageId)
@ -186,6 +187,13 @@ namespace ICSharpCode.PackageManagement.Design @@ -186,6 +187,13 @@ namespace ICSharpCode.PackageManagement.Design
return action;
}
public ReinstallPackageAction CreateReinstallPackageAction()
{
var action = new FakeReinstallPackageAction(this);
FakeReinstallPackageActionsCreated.Add(action);
return action;
}
public event EventHandler<PackageOperationEventArgs> PackageInstalled;
public void FirePackageInstalledEvent(PackageOperationEventArgs e)

61
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeReinstallPackageAction.cs

@ -0,0 +1,61 @@ @@ -0,0 +1,61 @@
// Copyright (c) 2015 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using ICSharpCode.PackageManagement.Scripting;
namespace ICSharpCode.PackageManagement.Design
{
public class FakeReinstallPackageAction : ReinstallPackageAction
{
public bool IsExecuted;
public FakePackageManagementProject FakeProject;
public FakeReinstallPackageAction()
: this(new FakePackageManagementProject())
{
}
public FakeReinstallPackageAction(IPackageManagementProject project)
: base(project, null)
{
FakeProject = project as FakePackageManagementProject;
}
protected override void ExecuteCore()
{
IsExecuted = true;
}
protected override void BeforeExecute()
{
}
protected override RunPackageScriptsAction CreateRunPackageScriptsAction(
IPackageScriptRunner scriptRunner,
IPackageManagementProject project)
{
return new RunPackageScriptsAction(
project,
scriptRunner,
new PackageScriptFactory(),
new NullGlobalMSBuildProjectCollection());
}
}
}

5
src/AddIns/Misc/PackageManagement/Project/Src/IPackageFromRepositoryExtensions.cs

@ -31,5 +31,10 @@ namespace ICSharpCode.PackageManagement @@ -31,5 +31,10 @@ namespace ICSharpCode.PackageManagement
{
return package.Repository.StartUpdateOperation(package.Id);
}
public static IDisposable StartReintallOperation(this IPackageFromRepository package)
{
return package.Repository.StartReinstallOperation(package.Id);
}
}
}

1
src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs

@ -63,6 +63,7 @@ namespace ICSharpCode.PackageManagement @@ -63,6 +63,7 @@ namespace ICSharpCode.PackageManagement
UninstallPackageAction CreateUninstallPackageAction();
UpdatePackageAction CreateUpdatePackageAction();
UpdatePackagesAction CreateUpdatePackagesAction();
ReinstallPackageAction CreateReinstallPackageAction();
void RunPackageOperations(IEnumerable<PackageOperation> expectedOperations);

5
src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs

@ -32,5 +32,10 @@ namespace ICSharpCode.PackageManagement @@ -32,5 +32,10 @@ namespace ICSharpCode.PackageManagement
{
return repository.StartOperation(RepositoryOperationNames.Update, mainPackageId, mainPackageVersion);
}
public static IDisposable StartReinstallOperation(this IPackageRepository repository, string mainPackageId = null, string mainPackageVersion = null)
{
return repository.StartOperation(RepositoryOperationNames.Reinstall, mainPackageId, mainPackageVersion);
}
}
}

23
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs

@ -205,14 +205,22 @@ namespace ICSharpCode.PackageManagement @@ -205,14 +205,22 @@ namespace ICSharpCode.PackageManagement
}
if (version != null) {
return packageManager.LocalRepository.FindPackage(packageId, version);
package = packageManager.LocalRepository.FindPackage(packageId, version);
if (package != null) {
return package;
}
throw CreatePackageNotFoundException(packageId);
}
List<IPackage> packages = packageManager.LocalRepository.FindPackagesById(packageId).ToList();
if (packages.Count > 1) {
throw CreateAmbiguousPackageException(packageId);
} else if (packages.Count == 1) {
return packages.First();
}
return packages.FirstOrDefault();
throw CreatePackageNotFoundException(packageId);
}
InvalidOperationException CreateAmbiguousPackageException(string packageId)
@ -220,5 +228,16 @@ namespace ICSharpCode.PackageManagement @@ -220,5 +228,16 @@ namespace ICSharpCode.PackageManagement
string message = String.Format("Multiple versions of '{0}' found. Please specify the version.", packageId);
return new InvalidOperationException(message);
}
InvalidOperationException CreatePackageNotFoundException(string packageId)
{
string message = String.Format("Unable to find package '{0}'.", packageId);
return new InvalidOperationException(message);
}
public ReinstallPackageAction CreateReinstallPackageAction()
{
return new ReinstallPackageAction(this, packageManagementEvents);
}
}
}

69
src/AddIns/Misc/PackageManagement/Project/Src/ReinstallPackageAction.cs

@ -0,0 +1,69 @@ @@ -0,0 +1,69 @@
//
// ReinstallPackageAction.cs
//
// Author:
// Matt Ward <matt.ward@xamarin.com>
//
// Copyright (c) 2014 Xamarin Inc. (http://xamarin.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
using System;
using ICSharpCode.PackageManagement;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class ReinstallPackageAction : ProcessPackageAction
{
public ReinstallPackageAction(
IPackageManagementProject project,
IPackageManagementEvents packageManagementEvents)
: base(project, packageManagementEvents)
{
}
public bool UpdateDependencies { get; set; }
protected override void ExecuteCore()
{
UninstallPackage();
InstallPackage();
}
void UninstallPackage()
{
UninstallPackageAction action = Project.CreateUninstallPackageAction();
action.Package = Package;
action.ForceRemove = true;
action.RemoveDependencies = UpdateDependencies;
action.Execute();
}
void InstallPackage()
{
InstallPackageAction action = Project.CreateInstallPackageAction();
action.Package = Package;
action.IgnoreDependencies = !UpdateDependencies;
action.AllowPrereleaseVersions = !Package.IsReleaseVersion();
action.Execute();
}
}
}

1
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -196,6 +196,7 @@ @@ -196,6 +196,7 @@
<Compile Include="Src\PackageManagementServiceProviderTests.cs" />
<Compile Include="Src\PackageViewModelOperationLoggerTests.cs" />
<Compile Include="Src\ReducedPackageOperationsTests.cs" />
<Compile Include="Src\ReinstallPackageActionTests.cs" />
<Compile Include="Src\RunAllProjectPackageScriptsActionTests.cs" />
<Compile Include="Src\Scripting\ConsoleHostFileConflictResolverTests.cs" />
<Compile Include="Src\Scripting\MSBuildProjectImportsMergerTests.cs" />

32
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs

@ -823,9 +823,10 @@ namespace PackageManagement.Tests @@ -823,9 +823,10 @@ namespace PackageManagement.Tests
CreateProject();
fakeProjectManager.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.0");
IPackage packageFound = project.FindPackage("Test", new SemanticVersion("2.1"));
InvalidOperationException ex =
Assert.Throws<InvalidOperationException>(() => project.FindPackage("Test", new SemanticVersion("2.1")));
Assert.IsNull(packageFound);
Assert.AreEqual("Unable to find package 'Test'.", ex.Message);
}
[Test]
@ -845,9 +846,10 @@ namespace PackageManagement.Tests @@ -845,9 +846,10 @@ namespace PackageManagement.Tests
CreateProject();
fakePackageManager.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.0");
IPackage packageFound = project.FindPackage("Test", new SemanticVersion("2.1"));
InvalidOperationException ex =
Assert.Throws<InvalidOperationException>(() => project.FindPackage("Test", new SemanticVersion("2.1")));
Assert.IsNull(packageFound);
Assert.AreEqual("Unable to find package 'Test'.", ex.Message);
}
[Test]
@ -873,5 +875,27 @@ namespace PackageManagement.Tests @@ -873,5 +875,27 @@ namespace PackageManagement.Tests
Assert.AreEqual("Multiple versions of 'Test' found. Please specify the version.", ex.Message);
}
[Test]
public void FindPackage_PackageNotFoundWhenPackageIdSpecified_ExceptionThrown()
{
CreateProject();
InvalidOperationException ex =
Assert.Throws<InvalidOperationException>(() => project.FindPackage("Test", null));
Assert.AreEqual("Unable to find package 'Test'.", ex.Message);
}
[Test]
public void FindPackage_PackageNotFoundWhenPackageIdAndVersionSpecified_ExceptionThrown()
{
CreateProject();
InvalidOperationException ex =
Assert.Throws<InvalidOperationException>(() => project.FindPackage("Test", new SemanticVersion("1.2")));
Assert.AreEqual("Unable to find package 'Test'.", ex.Message);
}
}
}

148
src/AddIns/Misc/PackageManagement/Test/Src/ReinstallPackageActionTests.cs

@ -0,0 +1,148 @@ @@ -0,0 +1,148 @@
//
// ReinstallPackageActionTests.cs
//
// Author:
// Matt Ward <matt.ward@xamarin.com>
//
// Copyright (c) 2014 Xamarin Inc. (http://xamarin.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using NuGet;
using NUnit.Framework;
namespace ICSharpCode.PackageManagement.Tests
{
[TestFixture]
public class ReinstallPackageActionTests
{
ReinstallPackageAction action;
PackageManagementEvents packageManagementEvents;
FakePackageManagementProject project;
void CreateAction(string packageId = "MyPackage", string packageVersion = "1.2.3.4")
{
project = new FakePackageManagementProject();
project.AddFakeInstallOperation();
packageManagementEvents = new PackageManagementEvents();
action = new ReinstallPackageAction(project, packageManagementEvents);
action.PackageId = packageId;
action.PackageVersion = new SemanticVersion(packageVersion);
}
FakePackage AddPackageToSourceRepository(string packageId, string packageVersion)
{
return project.FakeSourceRepository.AddFakePackageWithVersion(packageId, packageVersion);
}
[Test]
public void Execute_PackageExistsInSourceRepository_PackageIsUninstalled()
{
CreateAction("MyPackage", "1.2.3.4");
FakePackage package = AddPackageToSourceRepository("MyPackage", "1.2.3.4");
action.Execute();
Assert.IsTrue(project.FakeUninstallPackageAction.IsExecuted);
Assert.AreEqual(package, project.FakeUninstallPackageAction.Package);
}
[Test]
public void Execute_PackageExistsInSourceRepository_PackageIsInstalled()
{
CreateAction("MyPackage", "1.2.3.4");
FakePackage package = AddPackageToSourceRepository("MyPackage", "1.2.3.4");
action.Execute();
Assert.IsTrue(project.LastInstallPackageCreated.IsExecuteCalled);
Assert.AreEqual(package, project.LastInstallPackageCreated.Package);
}
[Test]
public void Execute_PackageExistsInSourceRepository_PackageIsForcefullyRemovedSoItDoesNotFailIfOtherPackagesDependOnIt()
{
CreateAction("MyPackage", "1.2.3.4");
AddPackageToSourceRepository("MyPackage", "1.2.3.4");
action.Execute();
Assert.IsTrue(project.FakeUninstallPackageAction.ForceRemove);
}
[Test]
public void Execute_UpdateDependenciesIsFalse_PackageInstalledWithoutUpdatingDependencies()
{
CreateAction("MyPackage", "1.2.3.4");
AddPackageToSourceRepository("MyPackage", "1.2.3.4");
action.UpdateDependencies = false;
action.Execute();
Assert.IsTrue(project.LastInstallPackageCreated.IsExecuteCalled);
Assert.IsTrue(project.LastInstallPackageCreated.IgnoreDependencies);
Assert.IsFalse(project.FakeUninstallPackageAction.RemoveDependencies);
}
[Test]
public void Execute_UpdateDependenciesIsTrue_PackageInstalledWithoutIgnoringDependencies()
{
CreateAction("MyPackage", "1.2.3.4");
AddPackageToSourceRepository("MyPackage", "1.2.3.4");
action.UpdateDependencies = true;
action.Execute();
Assert.IsTrue(project.LastInstallPackageCreated.IsExecuteCalled);
Assert.IsFalse(project.LastInstallPackageCreated.IgnoreDependencies);
Assert.IsTrue(project.FakeUninstallPackageAction.RemoveDependencies);
Assert.IsFalse(project.LastInstallPackageCreated.AllowPrereleaseVersions);
}
[Test]
public void Execute_PackageIsPrerelease_PackageInstalledAllowingPrereleases()
{
CreateAction("MyPackage", "1.2.3-alpha1");
AddPackageToSourceRepository("MyPackage", "1.2.3-alpha1");
action.UpdateDependencies = true;
action.Execute();
Assert.IsTrue(project.LastInstallPackageCreated.IsExecuteCalled);
Assert.IsTrue(project.LastInstallPackageCreated.AllowPrereleaseVersions);
}
// [Test]
// public void Execute_PackageExistsInSourceRepository_PackageIsInstalledWithoutOpeningReadmeTxt ()
// {
// CreateAction("MyPackage", "1.2.3.4");
// FakePackage package = AddPackageToSourceRepository("MyPackage", "1.2.3.4");
//
// action.Execute();
//
// Assert.IsTrue(project.LastInstallPackageCreated.IsExecuteCalled);
// Assert.IsFalse(project.LastInstallPackageCreated.OpenReadMeText);
// }
}
}
Loading…
Cancel
Save