13 changed files with 376 additions and 32 deletions
@ -0,0 +1,46 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -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