From 179b2dc4584676870332beff32010a1d31b45a23 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Mon, 14 May 2012 22:26:04 +0100 Subject: [PATCH] Change Get-Package cmdlet so if a project name is not set then return packages from the solution rather than the default project set in the package console. --- .../Cmdlets/Project/Src/GetPackageCmdlet.cs | 48 +++++-- .../Cmdlets/Test/Src/GetPackageCmdletTests.cs | 121 +++++++++++------- .../Design/FakePackageManagementProject.cs | 5 + .../Design/FakePackageManagementSolution.cs | 16 ++- 4 files changed, 129 insertions(+), 61 deletions(-) diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs index 04eccb6d28..d890bc36d3 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs @@ -151,24 +151,36 @@ namespace ICSharpCode.PackageManagement.Cmdlets IQueryable GetUpdatedPackages() { IPackageRepository aggregateRepository = registeredPackageRepositories.CreateAggregateRepository(); - IPackageManagementProject project = GetSelectedProject(aggregateRepository); - var updatedPackages = new UpdatedPackages(project, aggregateRepository); + UpdatedPackages updatedPackages = CreateUpdatedPackages(aggregateRepository); updatedPackages.SearchTerms = Filter; return updatedPackages.GetUpdatedPackages().AsQueryable(); } - IPackageManagementProject GetSelectedProject(IPackageRepository repository) + UpdatedPackages CreateUpdatedPackages(IPackageRepository aggregateRepository) { - string projectName = GetSelectedProjectName(); - return ConsoleHost.GetProject(repository, projectName); + IPackageManagementProject project = GetSelectedProject(aggregateRepository); + if (project != null) { + return new UpdatedPackages(project, aggregateRepository); + } + return new UpdatedPackages(GetSolutionPackages(), aggregateRepository); } - string GetSelectedProjectName() + IQueryable GetSolutionPackages() { - if (ProjectName != null) { - return ProjectName; + return ConsoleHost.Solution.GetPackages(); + } + + IPackageManagementProject GetSelectedProject(IPackageRepository repository) + { + if (HasSelectedProjectName()) { + return ConsoleHost.GetProject(repository, ProjectName); } - return DefaultProject.Name; + return null; + } + + bool HasSelectedProjectName() + { + return ProjectName != null; } IQueryable GetRecentPackages() @@ -179,15 +191,25 @@ namespace ICSharpCode.PackageManagement.Cmdlets IQueryable GetInstalledPackages() { - IPackageManagementProject project = GetSelectedProject(); - IQueryable packages = project.GetPackages(); + IQueryable packages = GetPackagesFromSelectedProjectOrSolution(); return FilterPackages(packages); } + IQueryable GetPackagesFromSelectedProjectOrSolution() + { + IPackageManagementProject project = GetSelectedProject(); + if (project != null) { + return project.GetPackages(); + } + return GetSolutionPackages(); + } + IPackageManagementProject GetSelectedProject() { - string projectName = GetSelectedProjectName(); - return ConsoleHost.GetProject(Source, projectName); + if (HasSelectedProjectName()) { + return ConsoleHost.GetProject(Source, ProjectName); + } + return null; } void WritePackagesToOutputPipeline(IQueryable packages) diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs index ec2d14868f..48ebdc6863 100644 --- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs +++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs @@ -27,7 +27,8 @@ namespace PackageManagement.Cmdlets.Tests fakeSolution = new FakePackageManagementSolution(); fakeRegisteredPackageRepositories = cmdlet.FakeRegisteredPackageRepositories; fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost; - fakeConsoleHost.FakeProject = fakeSolution.FakeActiveProject; + fakeConsoleHost.FakeSolution = fakeSolution; + fakeConsoleHost.FakeProject = new FakePackageManagementProject(); fakeCommandRuntime = cmdlet.FakeCommandRuntime; fakeTerminatingError = cmdlet.FakeCmdletTerminatingError; @@ -49,15 +50,10 @@ namespace PackageManagement.Cmdlets.Tests cmdlet.Updates = new SwitchParameter(true); } - FakePackage AddPackageToProjectManagerLocalRepository(string version) - { - return AddPackageToProjectManagerLocalRepository("Test", version); - } - - FakePackage AddPackageToProjectManagerLocalRepository(string id, string version) + FakePackage AddPackageToSpecifiedProjectManagerLocalRepository(string id, string version) { FakePackage package = FakePackage.CreatePackageWithVersion(id, version); - fakeSolution.AddPackageToActiveProjectLocalRepository(package); + fakeConsoleHost.FakeProject.FakePackages.Add(package); return package; } @@ -95,6 +91,11 @@ namespace PackageManagement.Cmdlets.Tests { cmdlet.First = first; } + + void AddPackageWithVersionToSolution(string version) + { + fakeSolution.AddPackageToSharedLocalRepository("Test", version); + } [Test] public void ProcessRecord_ListAvailablePackagesWhenDefaultPackageSourceHasOnePackage_OutputIsPackagesFromPackageSourceRepository() @@ -183,25 +184,25 @@ namespace PackageManagement.Cmdlets.Tests } [Test] - public void ProcessRecord_NoParametersPassed_ReturnsPackagesInstalledForProjectSelectedInConsole() + public void ProcessRecord_NoParametersPassed_ReturnsPackagesInstalledForSolution() { CreateCmdlet(); - fakeSolution.AddPackageToActiveProjectLocalRepository("One"); - fakeSolution.AddPackageToActiveProjectLocalRepository("Two"); + fakeSolution.AddPackageToSharedLocalRepository("One"); + fakeSolution.AddPackageToSharedLocalRepository("Two"); RunCmdlet(); List actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject; - List expectedPackages = fakeConsoleHost.FakeProject.FakePackages; + List expectedPackages = fakeSolution.FakeInstalledPackages; Assert.AreEqual(expectedPackages, actualPackages); } [Test] - public void ProcessRecord_NoParametersPassed_NullPackageSourceUsedWhenCreatingProject() + public void ProcessRecord_ProjectNameSpecified_NullPackageSourceUsedWhenCreatingProject() { CreateCmdlet(); - + cmdlet.ProjectName = "Test"; RunCmdlet(); string actualSource = fakeConsoleHost.PackageSourcePassedToGetProject; @@ -210,11 +211,10 @@ namespace PackageManagement.Cmdlets.Tests } [Test] - public void ProcessRecord_NoParametersPassed_DefaultProjectInConsoleHostUsedToCreateProject() + public void ProcessRecord_ProjectNameSpecified_ProjectNameUsedToCreateProject() { CreateCmdlet(); - TestableProject project = AddDefaultProjectToConsoleHost(); - project.Name = "MyProject"; + cmdlet.ProjectName = "MyProject"; RunCmdlet(); @@ -224,10 +224,10 @@ namespace PackageManagement.Cmdlets.Tests } [Test] - public void ProcessRecord_UpdatedPackagesRequested_ReturnsUpdatedPackagesForActiveProject() + public void ProcessRecord_UpdatedPackagesRequestedAndNoProjectName_ReturnsUpdatedPackagesForSolution() { CreateCmdlet(); - AddPackageToProjectManagerLocalRepository("1.0.0.0"); + AddPackageWithVersionToSolution("1.0.0.0"); FakePackage updatedPackage = AddPackageToAggregateRepository("1.1.0.0"); EnableUpdatesParameter(); @@ -242,24 +242,11 @@ namespace PackageManagement.Cmdlets.Tests } [Test] - public void ProcessRecord_UpdatedPackagesRequested_ActiveProjectNameUsedWhenCreatingProject() - { - CreateCmdlet(); - TestableProject project = AddDefaultProjectToConsoleHost(); - project.Name = "Test"; - EnableUpdatesParameter(); - RunCmdlet(); - - string actualProjectName = fakeConsoleHost.ProjectNamePassedToGetProject; - - Assert.AreEqual("Test", actualProjectName); - } - - [Test] - public void ProcessRecord_UpdatedPackagesRequested_AggregateRepositoryUsedWhenCreatingProject() + public void ProcessRecord_UpdatedPackagesRequestedAndProjectNameSpecified_AggregateRepositoryUsedWhenCreatingProject() { CreateCmdlet(); EnableUpdatesParameter(); + cmdlet.ProjectName = "MyProject"; RunCmdlet(); IPackageRepository actualRepository = fakeConsoleHost.PackageRepositoryPassedToGetProject; @@ -290,13 +277,13 @@ namespace PackageManagement.Cmdlets.Tests } [Test] - public void ProcessRecord_FilterParameterPassed_InstalledPackagesAreFiltered() + public void ProcessRecord_FilterParameterPassed_InstalledPackagesInSolutionAreFiltered() { CreateCmdlet(); AddPackageSourceToConsoleHost(); - fakeSolution.AddPackageToActiveProjectLocalRepository("A"); - FakePackage package = fakeSolution.AddPackageToActiveProjectLocalRepository("B"); + fakeSolution.AddPackageToSharedLocalRepository("A"); + FakePackage package = fakeSolution.AddPackageToSharedLocalRepository("B"); SetFilterParameter("B"); RunCmdlet(); @@ -310,16 +297,38 @@ namespace PackageManagement.Cmdlets.Tests } [Test] - public void ProcessRecord_UpdatedPackagesRequestedWithFilter_ReturnsFilteredUpdatedPackages() + public void ProcessRecord_UpdatedPackagesRequestedWithFilter_ReturnsFilteredUpdatedPackagesFromSolution() + { + CreateCmdlet(); + fakeSolution.AddPackageToSharedLocalRepository("A", "1.0.0.0"); + AddPackageToAggregateRepository("A", "1.1.0.0"); + fakeSolution.AddPackageToSharedLocalRepository("B", "2.0.0.0"); + FakePackage updatedPackage = AddPackageToAggregateRepository("B", "2.1.0.0"); + + EnableUpdatesParameter(); + SetFilterParameter("B"); + RunCmdlet(); + + List actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject; + var expectedPackages = new FakePackage[] { + updatedPackage + }; + + CollectionAssert.AreEqual(expectedPackages, actualPackages); + } + + [Test] + public void ProcessRecord_UpdatedPackagesRequestedWithFilterAndProjectName_ReturnsFilteredUpdatedPackagesFromProject() { CreateCmdlet(); - AddPackageToProjectManagerLocalRepository("A", "1.0.0.0"); + AddPackageToSpecifiedProjectManagerLocalRepository("A", "1.0.0.0"); AddPackageToAggregateRepository("A", "1.1.0.0"); - AddPackageToProjectManagerLocalRepository("B", "2.0.0.0"); + AddPackageToSpecifiedProjectManagerLocalRepository("B", "2.0.0.0"); FakePackage updatedPackage = AddPackageToAggregateRepository("B", "2.1.0.0"); EnableUpdatesParameter(); SetFilterParameter("B"); + cmdlet.ProjectName = "MyProject"; RunCmdlet(); List actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject; @@ -328,6 +337,7 @@ namespace PackageManagement.Cmdlets.Tests }; CollectionAssert.AreEqual(expectedPackages, actualPackages); + Assert.AreEqual("MyProject", fakeConsoleHost.ProjectNamePassedToGetProject); } [Test] @@ -348,12 +358,12 @@ namespace PackageManagement.Cmdlets.Tests } [Test] - public void ProcessRecord_JustSourceParameterPassed_ProjectCreatedForPackageSourceSpecifiedByParameter() + public void ProcessRecord_SourceParameterAndProjectNamePassed_ProjectCreatedForPackageSourceSpecifiedByParameter() { CreateCmdlet(); SetSourceParameter("http://test"); - + cmdlet.ProjectName = "MyProject"; RunCmdlet(); string actualPackageSource = fakeConsoleHost.PackageSourcePassedToGetProject; @@ -363,10 +373,10 @@ namespace PackageManagement.Cmdlets.Tests } [Test] - public void ProcessRecord_JustSourceParameterPassed_ProjectCreatedForPackageSource() + public void ProcessRecord_SourceParameterAndProjectNamePassed_ProjectCreatedForPackageSource() { CreateCmdlet(); - fakeConsoleHost.DefaultProject.Name = "MyProject"; + cmdlet.ProjectName = "MyProject"; SetSourceParameter("http://test"); RunCmdlet(); @@ -419,9 +429,9 @@ namespace PackageManagement.Cmdlets.Tests { CreateCmdlet(); AddPackageSourceToConsoleHost(); - FakePackage packageA = fakeSolution.AddPackageToActiveProjectLocalRepository("A"); - FakePackage packageB = fakeSolution.AddPackageToActiveProjectLocalRepository("B"); - FakePackage packageC = fakeSolution.AddPackageToActiveProjectLocalRepository("C"); + FakePackage packageA = fakeSolution.AddPackageToSharedLocalRepository("A"); + FakePackage packageB = fakeSolution.AddPackageToSharedLocalRepository("B"); + FakePackage packageC = fakeSolution.AddPackageToSharedLocalRepository("C"); SetFilterParameter("B C"); RunCmdlet(); @@ -527,6 +537,23 @@ namespace PackageManagement.Cmdlets.Tests Assert.AreEqual("Test", projectName); } + [Test] + public void ProcessRecord_GetInstalledPackagesWhenProjectNameSpecified_ReturnsPackagesInstalledForProject() + { + CreateCmdlet(); + var project = new FakePackageManagementProject(); + fakeConsoleHost.FakeProject = project; + project.AddFakePackage("One"); + project.AddFakePackage("Two"); + cmdlet.ProjectName = "Test"; + RunCmdlet(); + + List actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject; + List expectedPackages = project.FakePackages; + + Assert.AreEqual(expectedPackages, actualPackages); + } + [Test] public void ProcessRecord_GetUpdatedPackagesWhenProjectNameSpecified_ProjectNameParameterUsedToGetProject() { diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs index 236b01357f..f7bc593a10 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs @@ -203,5 +203,10 @@ namespace ICSharpCode.PackageManagement.Design { return FakePackagesInReverseDependencyOrder; } + + public void AddFakePackage(string id) + { + FakePackages.Add(new FakePackage(id)); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs index 656ea31869..7a595428f6 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs @@ -108,7 +108,7 @@ namespace ICSharpCode.PackageManagement.Design public string FileName { get; set; } - public List FakeInstalledPackages = new List(); + public List FakeInstalledPackages = new List(); public bool IsPackageInstalled(IPackage package) { @@ -158,5 +158,19 @@ namespace ICSharpCode.PackageManagement.Design FakeProjects.Add(project); return project; } + + public FakePackage AddPackageToSharedLocalRepository(string packageId, string version) + { + var package = new FakePackage(packageId, version); + FakeInstalledPackages.Add(package); + return package; + } + + public FakePackage AddPackageToSharedLocalRepository(string packageId) + { + var package = new FakePackage(packageId); + FakeInstalledPackages.Add(package); + return package; + } } }