13 changed files with 376 additions and 32 deletions
@ -0,0 +1,46 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
using NuGet; |
||||||
|
|
||||||
|
namespace ICSharpCode.PackageManagement |
||||||
|
{ |
||||||
|
public class InstalledPackageViewModel : PackageViewModel |
||||||
|
{ |
||||||
|
public InstalledPackageViewModel( |
||||||
|
IPackageFromRepository package, |
||||||
|
PackageManagementSelectedProjects selectedProjects, |
||||||
|
IPackageManagementEvents packageManagementEvents, |
||||||
|
IPackageActionRunner actionRunner, |
||||||
|
ILogger logger) |
||||||
|
: base(package, selectedProjects, packageManagementEvents, actionRunner, logger) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public override IList<ProcessPackageAction> GetProcessPackageActionsForSelectedProjects( |
||||||
|
IList<IPackageManagementSelectedProject> selectedProjects) |
||||||
|
{ |
||||||
|
var actions = new List<ProcessPackageAction>(); |
||||||
|
foreach (IPackageManagementSelectedProject selectedProject in selectedProjects) { |
||||||
|
ProcessPackageAction action = CreatePackageAction(selectedProject); |
||||||
|
actions.Add(action); |
||||||
|
} |
||||||
|
return actions; |
||||||
|
} |
||||||
|
|
||||||
|
ProcessPackageAction CreatePackageAction(IPackageManagementSelectedProject selectedProject) |
||||||
|
{ |
||||||
|
if (selectedProject.IsSelected) { |
||||||
|
return base.CreateInstallPackageAction(selectedProject); |
||||||
|
} |
||||||
|
return base.CreateUninstallPackageAction(selectedProject); |
||||||
|
} |
||||||
|
|
||||||
|
protected override bool AnyProjectsSelected(IList<IPackageManagementSelectedProject> projects) |
||||||
|
{ |
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,25 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
|
|
||||||
|
using System; |
||||||
|
|
||||||
|
namespace ICSharpCode.PackageManagement |
||||||
|
{ |
||||||
|
public class InstalledPackageViewModelFactory : PackageViewModelFactory |
||||||
|
{ |
||||||
|
public InstalledPackageViewModelFactory(IPackageViewModelFactory packageViewModelFactory) |
||||||
|
: base(packageViewModelFactory) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public override PackageViewModel CreatePackageViewModel(IPackageFromRepository package) |
||||||
|
{ |
||||||
|
return new InstalledPackageViewModel( |
||||||
|
package, |
||||||
|
SelectedProjects, |
||||||
|
PackageManagementEvents, |
||||||
|
PackageActionRunner, |
||||||
|
Logger); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,66 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
using ICSharpCode.PackageManagement; |
||||||
|
using ICSharpCode.PackageManagement.Design; |
||||||
|
using NuGet; |
||||||
|
|
||||||
|
namespace PackageManagement.Tests.Helpers |
||||||
|
{ |
||||||
|
public class TestableInstalledPackageViewModel : InstalledPackageViewModel |
||||||
|
{ |
||||||
|
public FakePackageOperationResolver FakePackageOperationResolver = new FakePackageOperationResolver(); |
||||||
|
public FakePackageManagementSolution FakeSolution; |
||||||
|
public FakePackageManagementEvents FakePackageManagementEvents; |
||||||
|
public FakePackage FakePackage; |
||||||
|
public FakeLogger FakeLogger; |
||||||
|
public ILogger LoggerUsedWhenCreatingPackageResolver; |
||||||
|
public FakePackageActionRunner FakeActionRunner; |
||||||
|
|
||||||
|
public TestableInstalledPackageViewModel() |
||||||
|
: this(new FakePackageManagementSolution()) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public TestableInstalledPackageViewModel(FakePackageManagementSolution solution) |
||||||
|
: this( |
||||||
|
new FakePackage(), |
||||||
|
new PackageManagementSelectedProjects(solution), |
||||||
|
new FakePackageManagementEvents(), |
||||||
|
new FakePackageActionRunner(), |
||||||
|
new FakeLogger()) |
||||||
|
{ |
||||||
|
this.FakeSolution = solution; |
||||||
|
solution.FakeActiveMSBuildProject = ProjectHelper.CreateTestProject("MyProject"); |
||||||
|
} |
||||||
|
|
||||||
|
public TestableInstalledPackageViewModel( |
||||||
|
FakePackage package, |
||||||
|
PackageManagementSelectedProjects selectedProjects, |
||||||
|
FakePackageManagementEvents packageManagementEvents, |
||||||
|
FakePackageActionRunner actionRunner, |
||||||
|
FakeLogger logger) |
||||||
|
: base( |
||||||
|
package, |
||||||
|
selectedProjects, |
||||||
|
packageManagementEvents, |
||||||
|
actionRunner, |
||||||
|
logger) |
||||||
|
{ |
||||||
|
this.FakePackage = package; |
||||||
|
this.FakeActionRunner = actionRunner; |
||||||
|
this.FakeLogger = logger; |
||||||
|
this.FakePackageManagementEvents = packageManagementEvents; |
||||||
|
} |
||||||
|
|
||||||
|
public PackageViewModelOperationLogger OperationLoggerCreated; |
||||||
|
|
||||||
|
protected override PackageViewModelOperationLogger CreateLogger(ILogger logger) |
||||||
|
{ |
||||||
|
OperationLoggerCreated = base.CreateLogger(logger); |
||||||
|
return OperationLoggerCreated; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,197 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
using ICSharpCode.PackageManagement; |
||||||
|
using ICSharpCode.PackageManagement.Design; |
||||||
|
using NuGet; |
||||||
|
using NUnit.Framework; |
||||||
|
using PackageManagement.Tests.Helpers; |
||||||
|
|
||||||
|
namespace PackageManagement.Tests |
||||||
|
{ |
||||||
|
[TestFixture] |
||||||
|
public class InstalledPackageViewModelTests |
||||||
|
{ |
||||||
|
TestableInstalledPackageViewModel viewModel; |
||||||
|
FakePackageManagementSolution fakeSolution; |
||||||
|
List<IPackageManagementSelectedProject> fakeSelectedProjects; |
||||||
|
IList<ProcessPackageAction> packageActions; |
||||||
|
FakePackageActionRunner fakeActionRunner; |
||||||
|
|
||||||
|
void CreateViewModel() |
||||||
|
{ |
||||||
|
viewModel = new TestableInstalledPackageViewModel(); |
||||||
|
fakeSolution = viewModel.FakeSolution; |
||||||
|
fakeActionRunner = viewModel.FakeActionRunner; |
||||||
|
} |
||||||
|
|
||||||
|
void CreateEmptyFakeSelectedProjectsList() |
||||||
|
{ |
||||||
|
fakeSelectedProjects = new List<IPackageManagementSelectedProject>(); |
||||||
|
} |
||||||
|
|
||||||
|
void CreateOneFakeSelectedProject(string name) |
||||||
|
{ |
||||||
|
CreateEmptyFakeSelectedProjectsList(); |
||||||
|
AddFakeSelectedProject(name); |
||||||
|
} |
||||||
|
|
||||||
|
void AddFakeSelectedProject(string name) |
||||||
|
{ |
||||||
|
fakeSelectedProjects.Add(new FakeSelectedProject(name)); |
||||||
|
} |
||||||
|
|
||||||
|
FakeSelectedProject FirstSelectedProject { |
||||||
|
get { return fakeSelectedProjects[0] as FakeSelectedProject; } |
||||||
|
} |
||||||
|
|
||||||
|
void GetPackageActionsForSelectedProjects() |
||||||
|
{ |
||||||
|
packageActions = viewModel.GetProcessPackageActionsForSelectedProjects(fakeSelectedProjects); |
||||||
|
} |
||||||
|
|
||||||
|
void AddProjectToSolution() |
||||||
|
{ |
||||||
|
TestableProject project = ProjectHelper.CreateTestProject(); |
||||||
|
fakeSolution.FakeMSBuildProjects.Add(project); |
||||||
|
} |
||||||
|
|
||||||
|
void CreateViewModelWithTwoProjectsSelected(string projectName1, string projectName2) |
||||||
|
{ |
||||||
|
CreateViewModel(); |
||||||
|
AddProjectToSolution(); |
||||||
|
AddProjectToSolution(); |
||||||
|
fakeSolution.FakeMSBuildProjects[0].Name = projectName1; |
||||||
|
fakeSolution.FakeMSBuildProjects[1].Name = projectName2; |
||||||
|
fakeSolution.NoProjectsSelected(); |
||||||
|
|
||||||
|
fakeSolution.AddFakeProjectToReturnFromGetProject(projectName1); |
||||||
|
fakeSolution.AddFakeProjectToReturnFromGetProject(projectName2); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetProcessPackageActionsForSelectedProjects_OneProjectIsSelected_ReturnsOneAction() |
||||||
|
{ |
||||||
|
CreateViewModel(); |
||||||
|
CreateOneFakeSelectedProject("Test"); |
||||||
|
FirstSelectedProject.IsSelected = true; |
||||||
|
GetPackageActionsForSelectedProjects(); |
||||||
|
|
||||||
|
Assert.AreEqual(1, packageActions.Count); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetProcessPackageActionsForSelectedProjects_NoProjects_ReturnsNoActions() |
||||||
|
{ |
||||||
|
CreateViewModel(); |
||||||
|
CreateEmptyFakeSelectedProjectsList(); |
||||||
|
GetPackageActionsForSelectedProjects(); |
||||||
|
|
||||||
|
Assert.AreEqual(0, packageActions.Count); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetProcessPackageActionsForSelectedProjects_OneProjectIsSelected_InstallActionCreatedFromProject() |
||||||
|
{ |
||||||
|
CreateViewModel(); |
||||||
|
CreateOneFakeSelectedProject("Test"); |
||||||
|
FirstSelectedProject.IsSelected = true; |
||||||
|
GetPackageActionsForSelectedProjects(); |
||||||
|
|
||||||
|
var action = packageActions[0] as InstallPackageAction; |
||||||
|
InstallPackageAction expectedAction = FirstSelectedProject.FakeProject.FakeInstallPackageAction; |
||||||
|
|
||||||
|
Assert.AreEqual(expectedAction, action); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetProcessPackageActionsForSelectedProjects_OneProjectWithIsSelectedSetToFalse_UninstallActionCreatedFromProject() |
||||||
|
{ |
||||||
|
CreateViewModel(); |
||||||
|
CreateOneFakeSelectedProject("Test"); |
||||||
|
FirstSelectedProject.IsSelected = false; |
||||||
|
GetPackageActionsForSelectedProjects(); |
||||||
|
|
||||||
|
var action = packageActions[0] as UninstallPackageAction; |
||||||
|
UninstallPackageAction expectedAction = FirstSelectedProject.FakeProject.FakeUninstallPackageAction; |
||||||
|
|
||||||
|
Assert.AreEqual(expectedAction, action); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetProcessPackageActionsForSelectedProjects_OneProjectIsSelected_InstallActionHasViewModelPackage() |
||||||
|
{ |
||||||
|
CreateViewModel(); |
||||||
|
CreateOneFakeSelectedProject("Test"); |
||||||
|
FirstSelectedProject.IsSelected = true; |
||||||
|
GetPackageActionsForSelectedProjects(); |
||||||
|
|
||||||
|
var action = packageActions[0] as InstallPackageAction; |
||||||
|
IPackage actualPackage = action.Package; |
||||||
|
FakePackage expectedPackage = viewModel.FakePackage; |
||||||
|
|
||||||
|
Assert.AreEqual(expectedPackage, actualPackage); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetProcessPackageActionsForSelectedProjects_OneProjectWithIsSelectedSetToFalse_UninstallActionHasViewModelPackage() |
||||||
|
{ |
||||||
|
CreateViewModel(); |
||||||
|
CreateOneFakeSelectedProject("Test"); |
||||||
|
FirstSelectedProject.IsSelected = false; |
||||||
|
GetPackageActionsForSelectedProjects(); |
||||||
|
|
||||||
|
var action = packageActions[0] as UninstallPackageAction; |
||||||
|
IPackage actualPackage = action.Package; |
||||||
|
FakePackage expectedPackage = viewModel.FakePackage; |
||||||
|
|
||||||
|
Assert.AreEqual(expectedPackage, actualPackage); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetProcessPackageActionsForSelectedProjects_OneProjectIsSelected_ProjectUsesViewModelLogger() |
||||||
|
{ |
||||||
|
CreateViewModel(); |
||||||
|
CreateOneFakeSelectedProject("Test"); |
||||||
|
FirstSelectedProject.IsSelected = true; |
||||||
|
GetPackageActionsForSelectedProjects(); |
||||||
|
|
||||||
|
ILogger logger = FirstSelectedProject.Project.Logger; |
||||||
|
ILogger expectedLogger = viewModel.OperationLoggerCreated; |
||||||
|
|
||||||
|
Assert.AreEqual(expectedLogger, logger); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetProcessPackageActionsForSelectedProjects_OneProjectWithIsSelectedSetToFalse_ProjectUsesViewModelLogger() |
||||||
|
{ |
||||||
|
CreateViewModel(); |
||||||
|
CreateOneFakeSelectedProject("Test"); |
||||||
|
FirstSelectedProject.IsSelected = false; |
||||||
|
GetPackageActionsForSelectedProjects(); |
||||||
|
|
||||||
|
ILogger logger = FirstSelectedProject.Project.Logger; |
||||||
|
ILogger expectedLogger = viewModel.OperationLoggerCreated; |
||||||
|
|
||||||
|
Assert.AreEqual(expectedLogger, logger); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ManagePackage_SolutionWithTwoProjectsAndUserUnselectsBothProjects_TwoProjectsAreUninstalled() |
||||||
|
{ |
||||||
|
CreateViewModelWithTwoProjectsSelected("Project A", "Project B"); |
||||||
|
viewModel.FakePackageManagementEvents.OnSelectProjectsReturnValue = true; |
||||||
|
viewModel.ManagePackage(); |
||||||
|
|
||||||
|
List<ProcessPackageAction> actions = fakeActionRunner.GetActionsRunInOneCallAsList(); |
||||||
|
var firstAction = actions[0] as UninstallPackageAction; |
||||||
|
var secondAction = actions[1] as UninstallPackageAction; |
||||||
|
|
||||||
|
Assert.AreEqual(2, actions.Count); |
||||||
|
Assert.AreEqual(viewModel.FakePackage, firstAction.Package); |
||||||
|
Assert.AreEqual(viewModel.FakePackage, secondAction.Package); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue