Browse Source

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.

pull/28/head
Matt Ward 14 years ago
parent
commit
179b2dc458
  1. 48
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs
  2. 121
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs
  3. 5
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs
  4. 16
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs

48
src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs

@ -151,24 +151,36 @@ namespace ICSharpCode.PackageManagement.Cmdlets
IQueryable<IPackage> GetUpdatedPackages() IQueryable<IPackage> GetUpdatedPackages()
{ {
IPackageRepository aggregateRepository = registeredPackageRepositories.CreateAggregateRepository(); IPackageRepository aggregateRepository = registeredPackageRepositories.CreateAggregateRepository();
IPackageManagementProject project = GetSelectedProject(aggregateRepository); UpdatedPackages updatedPackages = CreateUpdatedPackages(aggregateRepository);
var updatedPackages = new UpdatedPackages(project, aggregateRepository);
updatedPackages.SearchTerms = Filter; updatedPackages.SearchTerms = Filter;
return updatedPackages.GetUpdatedPackages().AsQueryable(); return updatedPackages.GetUpdatedPackages().AsQueryable();
} }
IPackageManagementProject GetSelectedProject(IPackageRepository repository) UpdatedPackages CreateUpdatedPackages(IPackageRepository aggregateRepository)
{ {
string projectName = GetSelectedProjectName(); IPackageManagementProject project = GetSelectedProject(aggregateRepository);
return ConsoleHost.GetProject(repository, projectName); if (project != null) {
return new UpdatedPackages(project, aggregateRepository);
}
return new UpdatedPackages(GetSolutionPackages(), aggregateRepository);
} }
string GetSelectedProjectName() IQueryable<IPackage> GetSolutionPackages()
{ {
if (ProjectName != null) { return ConsoleHost.Solution.GetPackages();
return ProjectName; }
IPackageManagementProject GetSelectedProject(IPackageRepository repository)
{
if (HasSelectedProjectName()) {
return ConsoleHost.GetProject(repository, ProjectName);
} }
return DefaultProject.Name; return null;
}
bool HasSelectedProjectName()
{
return ProjectName != null;
} }
IQueryable<IPackage> GetRecentPackages() IQueryable<IPackage> GetRecentPackages()
@ -179,15 +191,25 @@ namespace ICSharpCode.PackageManagement.Cmdlets
IQueryable<IPackage> GetInstalledPackages() IQueryable<IPackage> GetInstalledPackages()
{ {
IPackageManagementProject project = GetSelectedProject(); IQueryable<IPackage> packages = GetPackagesFromSelectedProjectOrSolution();
IQueryable<IPackage> packages = project.GetPackages();
return FilterPackages(packages); return FilterPackages(packages);
} }
IQueryable<IPackage> GetPackagesFromSelectedProjectOrSolution()
{
IPackageManagementProject project = GetSelectedProject();
if (project != null) {
return project.GetPackages();
}
return GetSolutionPackages();
}
IPackageManagementProject GetSelectedProject() IPackageManagementProject GetSelectedProject()
{ {
string projectName = GetSelectedProjectName(); if (HasSelectedProjectName()) {
return ConsoleHost.GetProject(Source, projectName); return ConsoleHost.GetProject(Source, ProjectName);
}
return null;
} }
void WritePackagesToOutputPipeline(IQueryable<IPackage> packages) void WritePackagesToOutputPipeline(IQueryable<IPackage> packages)

121
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs

@ -27,7 +27,8 @@ namespace PackageManagement.Cmdlets.Tests
fakeSolution = new FakePackageManagementSolution(); fakeSolution = new FakePackageManagementSolution();
fakeRegisteredPackageRepositories = cmdlet.FakeRegisteredPackageRepositories; fakeRegisteredPackageRepositories = cmdlet.FakeRegisteredPackageRepositories;
fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost; fakeConsoleHost = cmdlet.FakePackageManagementConsoleHost;
fakeConsoleHost.FakeProject = fakeSolution.FakeActiveProject; fakeConsoleHost.FakeSolution = fakeSolution;
fakeConsoleHost.FakeProject = new FakePackageManagementProject();
fakeCommandRuntime = cmdlet.FakeCommandRuntime; fakeCommandRuntime = cmdlet.FakeCommandRuntime;
fakeTerminatingError = cmdlet.FakeCmdletTerminatingError; fakeTerminatingError = cmdlet.FakeCmdletTerminatingError;
@ -49,15 +50,10 @@ namespace PackageManagement.Cmdlets.Tests
cmdlet.Updates = new SwitchParameter(true); cmdlet.Updates = new SwitchParameter(true);
} }
FakePackage AddPackageToProjectManagerLocalRepository(string version) FakePackage AddPackageToSpecifiedProjectManagerLocalRepository(string id, string version)
{
return AddPackageToProjectManagerLocalRepository("Test", version);
}
FakePackage AddPackageToProjectManagerLocalRepository(string id, string version)
{ {
FakePackage package = FakePackage.CreatePackageWithVersion(id, version); FakePackage package = FakePackage.CreatePackageWithVersion(id, version);
fakeSolution.AddPackageToActiveProjectLocalRepository(package); fakeConsoleHost.FakeProject.FakePackages.Add(package);
return package; return package;
} }
@ -95,6 +91,11 @@ namespace PackageManagement.Cmdlets.Tests
{ {
cmdlet.First = first; cmdlet.First = first;
} }
void AddPackageWithVersionToSolution(string version)
{
fakeSolution.AddPackageToSharedLocalRepository("Test", version);
}
[Test] [Test]
public void ProcessRecord_ListAvailablePackagesWhenDefaultPackageSourceHasOnePackage_OutputIsPackagesFromPackageSourceRepository() public void ProcessRecord_ListAvailablePackagesWhenDefaultPackageSourceHasOnePackage_OutputIsPackagesFromPackageSourceRepository()
@ -183,25 +184,25 @@ namespace PackageManagement.Cmdlets.Tests
} }
[Test] [Test]
public void ProcessRecord_NoParametersPassed_ReturnsPackagesInstalledForProjectSelectedInConsole() public void ProcessRecord_NoParametersPassed_ReturnsPackagesInstalledForSolution()
{ {
CreateCmdlet(); CreateCmdlet();
fakeSolution.AddPackageToActiveProjectLocalRepository("One"); fakeSolution.AddPackageToSharedLocalRepository("One");
fakeSolution.AddPackageToActiveProjectLocalRepository("Two"); fakeSolution.AddPackageToSharedLocalRepository("Two");
RunCmdlet(); RunCmdlet();
List<object> actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject; List<object> actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
List<FakePackage> expectedPackages = fakeConsoleHost.FakeProject.FakePackages; List<FakePackage> expectedPackages = fakeSolution.FakeInstalledPackages;
Assert.AreEqual(expectedPackages, actualPackages); Assert.AreEqual(expectedPackages, actualPackages);
} }
[Test] [Test]
public void ProcessRecord_NoParametersPassed_NullPackageSourceUsedWhenCreatingProject() public void ProcessRecord_ProjectNameSpecified_NullPackageSourceUsedWhenCreatingProject()
{ {
CreateCmdlet(); CreateCmdlet();
cmdlet.ProjectName = "Test";
RunCmdlet(); RunCmdlet();
string actualSource = fakeConsoleHost.PackageSourcePassedToGetProject; string actualSource = fakeConsoleHost.PackageSourcePassedToGetProject;
@ -210,11 +211,10 @@ namespace PackageManagement.Cmdlets.Tests
} }
[Test] [Test]
public void ProcessRecord_NoParametersPassed_DefaultProjectInConsoleHostUsedToCreateProject() public void ProcessRecord_ProjectNameSpecified_ProjectNameUsedToCreateProject()
{ {
CreateCmdlet(); CreateCmdlet();
TestableProject project = AddDefaultProjectToConsoleHost(); cmdlet.ProjectName = "MyProject";
project.Name = "MyProject";
RunCmdlet(); RunCmdlet();
@ -224,10 +224,10 @@ namespace PackageManagement.Cmdlets.Tests
} }
[Test] [Test]
public void ProcessRecord_UpdatedPackagesRequested_ReturnsUpdatedPackagesForActiveProject() public void ProcessRecord_UpdatedPackagesRequestedAndNoProjectName_ReturnsUpdatedPackagesForSolution()
{ {
CreateCmdlet(); CreateCmdlet();
AddPackageToProjectManagerLocalRepository("1.0.0.0"); AddPackageWithVersionToSolution("1.0.0.0");
FakePackage updatedPackage = AddPackageToAggregateRepository("1.1.0.0"); FakePackage updatedPackage = AddPackageToAggregateRepository("1.1.0.0");
EnableUpdatesParameter(); EnableUpdatesParameter();
@ -242,24 +242,11 @@ namespace PackageManagement.Cmdlets.Tests
} }
[Test] [Test]
public void ProcessRecord_UpdatedPackagesRequested_ActiveProjectNameUsedWhenCreatingProject() public void ProcessRecord_UpdatedPackagesRequestedAndProjectNameSpecified_AggregateRepositoryUsedWhenCreatingProject()
{
CreateCmdlet();
TestableProject project = AddDefaultProjectToConsoleHost();
project.Name = "Test";
EnableUpdatesParameter();
RunCmdlet();
string actualProjectName = fakeConsoleHost.ProjectNamePassedToGetProject;
Assert.AreEqual("Test", actualProjectName);
}
[Test]
public void ProcessRecord_UpdatedPackagesRequested_AggregateRepositoryUsedWhenCreatingProject()
{ {
CreateCmdlet(); CreateCmdlet();
EnableUpdatesParameter(); EnableUpdatesParameter();
cmdlet.ProjectName = "MyProject";
RunCmdlet(); RunCmdlet();
IPackageRepository actualRepository = fakeConsoleHost.PackageRepositoryPassedToGetProject; IPackageRepository actualRepository = fakeConsoleHost.PackageRepositoryPassedToGetProject;
@ -290,13 +277,13 @@ namespace PackageManagement.Cmdlets.Tests
} }
[Test] [Test]
public void ProcessRecord_FilterParameterPassed_InstalledPackagesAreFiltered() public void ProcessRecord_FilterParameterPassed_InstalledPackagesInSolutionAreFiltered()
{ {
CreateCmdlet(); CreateCmdlet();
AddPackageSourceToConsoleHost(); AddPackageSourceToConsoleHost();
fakeSolution.AddPackageToActiveProjectLocalRepository("A"); fakeSolution.AddPackageToSharedLocalRepository("A");
FakePackage package = fakeSolution.AddPackageToActiveProjectLocalRepository("B"); FakePackage package = fakeSolution.AddPackageToSharedLocalRepository("B");
SetFilterParameter("B"); SetFilterParameter("B");
RunCmdlet(); RunCmdlet();
@ -310,16 +297,38 @@ namespace PackageManagement.Cmdlets.Tests
} }
[Test] [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<object> actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
var expectedPackages = new FakePackage[] {
updatedPackage
};
CollectionAssert.AreEqual(expectedPackages, actualPackages);
}
[Test]
public void ProcessRecord_UpdatedPackagesRequestedWithFilterAndProjectName_ReturnsFilteredUpdatedPackagesFromProject()
{ {
CreateCmdlet(); CreateCmdlet();
AddPackageToProjectManagerLocalRepository("A", "1.0.0.0"); AddPackageToSpecifiedProjectManagerLocalRepository("A", "1.0.0.0");
AddPackageToAggregateRepository("A", "1.1.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"); FakePackage updatedPackage = AddPackageToAggregateRepository("B", "2.1.0.0");
EnableUpdatesParameter(); EnableUpdatesParameter();
SetFilterParameter("B"); SetFilterParameter("B");
cmdlet.ProjectName = "MyProject";
RunCmdlet(); RunCmdlet();
List<object> actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject; List<object> actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
@ -328,6 +337,7 @@ namespace PackageManagement.Cmdlets.Tests
}; };
CollectionAssert.AreEqual(expectedPackages, actualPackages); CollectionAssert.AreEqual(expectedPackages, actualPackages);
Assert.AreEqual("MyProject", fakeConsoleHost.ProjectNamePassedToGetProject);
} }
[Test] [Test]
@ -348,12 +358,12 @@ namespace PackageManagement.Cmdlets.Tests
} }
[Test] [Test]
public void ProcessRecord_JustSourceParameterPassed_ProjectCreatedForPackageSourceSpecifiedByParameter() public void ProcessRecord_SourceParameterAndProjectNamePassed_ProjectCreatedForPackageSourceSpecifiedByParameter()
{ {
CreateCmdlet(); CreateCmdlet();
SetSourceParameter("http://test"); SetSourceParameter("http://test");
cmdlet.ProjectName = "MyProject";
RunCmdlet(); RunCmdlet();
string actualPackageSource = fakeConsoleHost.PackageSourcePassedToGetProject; string actualPackageSource = fakeConsoleHost.PackageSourcePassedToGetProject;
@ -363,10 +373,10 @@ namespace PackageManagement.Cmdlets.Tests
} }
[Test] [Test]
public void ProcessRecord_JustSourceParameterPassed_ProjectCreatedForPackageSource() public void ProcessRecord_SourceParameterAndProjectNamePassed_ProjectCreatedForPackageSource()
{ {
CreateCmdlet(); CreateCmdlet();
fakeConsoleHost.DefaultProject.Name = "MyProject"; cmdlet.ProjectName = "MyProject";
SetSourceParameter("http://test"); SetSourceParameter("http://test");
RunCmdlet(); RunCmdlet();
@ -419,9 +429,9 @@ namespace PackageManagement.Cmdlets.Tests
{ {
CreateCmdlet(); CreateCmdlet();
AddPackageSourceToConsoleHost(); AddPackageSourceToConsoleHost();
FakePackage packageA = fakeSolution.AddPackageToActiveProjectLocalRepository("A"); FakePackage packageA = fakeSolution.AddPackageToSharedLocalRepository("A");
FakePackage packageB = fakeSolution.AddPackageToActiveProjectLocalRepository("B"); FakePackage packageB = fakeSolution.AddPackageToSharedLocalRepository("B");
FakePackage packageC = fakeSolution.AddPackageToActiveProjectLocalRepository("C"); FakePackage packageC = fakeSolution.AddPackageToSharedLocalRepository("C");
SetFilterParameter("B C"); SetFilterParameter("B C");
RunCmdlet(); RunCmdlet();
@ -527,6 +537,23 @@ namespace PackageManagement.Cmdlets.Tests
Assert.AreEqual("Test", projectName); 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<object> actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
List<FakePackage> expectedPackages = project.FakePackages;
Assert.AreEqual(expectedPackages, actualPackages);
}
[Test] [Test]
public void ProcessRecord_GetUpdatedPackagesWhenProjectNameSpecified_ProjectNameParameterUsedToGetProject() public void ProcessRecord_GetUpdatedPackagesWhenProjectNameSpecified_ProjectNameParameterUsedToGetProject()
{ {

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

@ -203,5 +203,10 @@ namespace ICSharpCode.PackageManagement.Design
{ {
return FakePackagesInReverseDependencyOrder; return FakePackagesInReverseDependencyOrder;
} }
public void AddFakePackage(string id)
{
FakePackages.Add(new FakePackage(id));
}
} }
} }

16
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs

@ -108,7 +108,7 @@ namespace ICSharpCode.PackageManagement.Design
public string FileName { get; set; } public string FileName { get; set; }
public List<IPackage> FakeInstalledPackages = new List<IPackage>(); public List<FakePackage> FakeInstalledPackages = new List<FakePackage>();
public bool IsPackageInstalled(IPackage package) public bool IsPackageInstalled(IPackage package)
{ {
@ -158,5 +158,19 @@ namespace ICSharpCode.PackageManagement.Design
FakeProjects.Add(project); FakeProjects.Add(project);
return 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;
}
} }
} }

Loading…
Cancel
Save