From 01b219878d7949381b783e3d510c5435e40d4c71 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sun, 17 Jul 2011 14:10:25 +0100 Subject: [PATCH] Use the update package action when installing a package update for multiple projects selected in Manage Packages dialog. --- .../Project/Src/PackageViewModel.cs | 15 ++++-- .../TestableUpdatedPackageViewModel.cs | 1 + .../Test/Src/UpdatedPackageViewModelTests.cs | 47 +++++++++++++++++-- 3 files changed, 56 insertions(+), 7 deletions(-) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs index 4a406a4d16..15a949b83a 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs @@ -134,6 +134,7 @@ namespace ICSharpCode.PackageManagement } public Version Version { + get { return package.Version; } } @@ -344,9 +345,7 @@ namespace ICSharpCode.PackageManagement var actions = new List(); foreach (IPackageManagementSelectedProject selectedProject in projects) { if (selectedProject.IsSelected) { - selectedProject.Project.Logger = logger; - InstallPackageAction action = selectedProject.Project.CreateInstallPackageAction(); - action.Package = package; + ProcessPackageAction action = CreateInstallPackageAction(selectedProject); actions.Add(action); } } @@ -372,6 +371,16 @@ namespace ICSharpCode.PackageManagement return true; } + ProcessPackageOperationsAction CreateInstallPackageAction(IPackageManagementSelectedProject selectedProject) + { + IPackageManagementProject project = selectedProject.Project; + project.Logger = logger; + + ProcessPackageOperationsAction action = CreateInstallPackageAction(project); + action.Package = package; + return action; + } + void RunActionsIfAnyExist(List actions) { if (actions.Any()) { diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs index 299ee3eea2..1648310a62 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs @@ -51,6 +51,7 @@ namespace PackageManagement.Tests.Helpers this.FakePackage = package; this.FakeActionRunner = actionRunner; this.FakeLogger = logger; + this.FakePackageManagementEvents = packageManagementEvents; } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackageViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackageViewModelTests.cs index e191ee3ae6..b46682100e 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackageViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackageViewModelTests.cs @@ -2,9 +2,11 @@ // 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 ICSharpCode.PackageManagement.Scripting; +using NuGet; using NUnit.Framework; using PackageManagement.Tests.Helpers; @@ -18,6 +20,7 @@ namespace PackageManagement.Tests FakePackageManagementProject fakeProject; FakeUpdatePackageAction updatePackageAction; FakePackageActionRunner fakeActionRunner; + FakePackageManagementEvents fakePackageManagementEvents; void CreateViewModel() { @@ -26,6 +29,26 @@ namespace PackageManagement.Tests fakeProject = fakeSolution.FakeProjectToReturnFromGetProject; updatePackageAction = fakeProject.FakeUpdatePackageAction; fakeActionRunner = viewModel.FakeActionRunner; + fakePackageManagementEvents = viewModel.FakePackageManagementEvents; + } + + 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] @@ -43,8 +66,8 @@ namespace PackageManagement.Tests CreateViewModel(); viewModel.AddPackage(); - var expectedPackage = viewModel.FakePackage; - var actualPackage = updatePackageAction.Package; + FakePackage expectedPackage = viewModel.FakePackage; + IPackage actualPackage = updatePackageAction.Package; Assert.AreEqual(expectedPackage, actualPackage); } @@ -55,8 +78,8 @@ namespace PackageManagement.Tests CreateViewModel(); viewModel.AddPackage(); - var expectedOperations = viewModel.FakePackageOperationResolver.PackageOperations; - var actualOperations = updatePackageAction.Operations; + IEnumerable expectedOperations = viewModel.FakePackageOperationResolver.PackageOperations; + IEnumerable actualOperations = updatePackageAction.Operations; Assert.AreEqual(expectedOperations, actualOperations); } @@ -71,5 +94,21 @@ namespace PackageManagement.Tests Assert.AreEqual(updatePackageAction, actionExecuted); } + + [Test] + public void ManagePackage_OneProjectSelectedByUser_PackageIsUpdated() + { + CreateViewModelWithTwoProjectsSelected("Project A", "Project B"); + fakePackageManagementEvents.ProjectsToSelect.Add("Project B"); + fakePackageManagementEvents.OnSelectProjectsReturnValue = true; + viewModel.ManagePackage(); + + FakePackage expectedPackage = viewModel.FakePackage; + List actions = fakeActionRunner.GetActionsRunInOneCallAsList(); + var updatePackageAction = actions[0] as UpdatePackageAction; + IPackage actualPackage = updatePackageAction.Package; + + Assert.AreEqual(expectedPackage, actualPackage); + } } }