Browse Source

Fix NuGet packages showing as installed in solution.

NuGet packages that were still in the packages folder but
not installed in any projects are now not shown in the
Installed tab when managing NuGet packages for the solution.
pull/263/head
Matt Ward 12 years ago
parent
commit
1fabf08c7a
  1. 15
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs
  2. 23
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementProjectFactory.cs
  3. 46
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSolutionTests.cs

15
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs

@ -69,7 +69,7 @@ namespace ICSharpCode.PackageManagement @@ -69,7 +69,7 @@ namespace ICSharpCode.PackageManagement
IPackageRepository ActivePackageRepository {
get { return registeredPackageRepositories.ActiveRepository; }
}
public IPackageManagementProject GetActiveProject(IPackageRepository sourceRepository)
{
MSBuildBasedProject activeProject = GetActiveMSBuildBasedProject();
@ -152,7 +152,18 @@ namespace ICSharpCode.PackageManagement @@ -152,7 +152,18 @@ namespace ICSharpCode.PackageManagement
public IQueryable<IPackage> GetPackages()
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
return repository.GetPackages();
List<IPackageManagementProject> projects = GetProjects(ActivePackageRepository).ToList();
return repository
.GetPackages()
.Where(package => IsPackageInstalledInSolutionOrAnyProject(projects, package));
}
bool IsPackageInstalledInSolutionOrAnyProject(IList<IPackageManagementProject> projects, IPackage package)
{
if (projects.Any(project => project.IsPackageInstalled(package))) {
return true;
}
return false;
}
public string GetInstallPath(IPackage package)

23
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementProjectFactory.cs

@ -12,6 +12,17 @@ namespace PackageManagement.Tests.Helpers @@ -12,6 +12,17 @@ namespace PackageManagement.Tests.Helpers
{
public class FakePackageManagementProjectFactory : IPackageManagementProjectFactory
{
public FakePackageManagementProjectFactory()
{
CreatePackageManagementProject = (sourceRepository, project) => {
RepositoriesPassedToCreateProject.Add(sourceRepository);
ProjectsPassedToCreateProject.Add(project);
var fakeProject = new FakePackageManagementProject();
FakeProjectsCreated.Add(fakeProject);
return fakeProject;
};
}
public List<FakePackageManagementProject> FakeProjectsCreated =
new List<FakePackageManagementProject>();
@ -30,17 +41,17 @@ namespace PackageManagement.Tests.Helpers @@ -30,17 +41,17 @@ namespace PackageManagement.Tests.Helpers
get { return ProjectsPassedToCreateProject[0]; }
}
public Func<IPackageRepository, MSBuildBasedProject, FakePackageManagementProject>
CreatePackageManagementProject = (sourceRepository, project) => {
return null;
};
public List<MSBuildBasedProject> ProjectsPassedToCreateProject =
new List<MSBuildBasedProject>();
public IPackageManagementProject CreateProject(IPackageRepository sourceRepository, MSBuildBasedProject project)
{
RepositoriesPassedToCreateProject.Add(sourceRepository);
ProjectsPassedToCreateProject.Add(project);
var fakeProject = new FakePackageManagementProject();
FakeProjectsCreated.Add(fakeProject);
return fakeProject;
return CreatePackageManagementProject(sourceRepository, project);
}
}
}

46
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSolutionTests.cs

@ -452,13 +452,18 @@ namespace PackageManagement.Tests @@ -452,13 +452,18 @@ namespace PackageManagement.Tests
fakeProjectService.CurrentProject = null;
FakePackage package = FakePackage.CreatePackageWithVersion("Test", "1.3.4.5");
fakeSolutionPackageRepository.FakeSharedRepository.FakePackages.Add(package);
TestableProject testProject = AddProjectToOpenProjects("Test");
var project = new FakePackageManagementProject();
fakeProjectFactory.CreatePackageManagementProject = (repository, msbuildProject) => {
return project;
};
project.FakePackages.Add(package);
IQueryable<IPackage> packages = solution.GetPackages();
var expectedPackages = new FakePackage[] {
package
};
PackageCollectionAssert.AreEqual(expectedPackages, packages);
}
@ -553,5 +558,44 @@ namespace PackageManagement.Tests @@ -553,5 +558,44 @@ namespace PackageManagement.Tests
Assert.AreEqual(expectedInstallPath, installPath);
Assert.AreEqual(package, fakeSolutionPackageRepository.PackagePassedToGetInstallPath);
}
[Test]
public void GetPackages_OnePackageInstalledIntoOneProjectButTwoPackagesInSolutionRepository_ReturnsOnlyPackageInstalled()
{
CreateSolution();
fakeProjectService.CurrentProject = null;
TestableProject testProject = AddProjectToOpenProjects("Test");
var project = new FakePackageManagementProject();
fakeProjectFactory.CreatePackageManagementProject = (repository, msbuildProject) => {
return project;
};
FakePackage notInstalledPackage = FakePackage.CreatePackageWithVersion("NotInstalled", "1.0.0.0");
fakeSolutionPackageRepository.FakeSharedRepository.FakePackages.Add(notInstalledPackage);
FakePackage installedPackage = FakePackage.CreatePackageWithVersion("Installed", "1.0.0.0");
fakeSolutionPackageRepository.FakeSharedRepository.FakePackages.Add(installedPackage);
project.FakePackages.Add(installedPackage);
IQueryable<IPackage> packages = solution.GetPackages();
var expectedPackages = new FakePackage[] {
installedPackage
};
}
[Test]
public void GetPackages_TwoProjectsButNoPackagesInstalled_PackageProjectsCreatedUsingActiveRepository()
{
CreateSolution();
fakeProjectService.CurrentProject = null;
TestableProject testProject1 = AddProjectToOpenProjects("Test1");
TestableProject testProject2 = AddProjectToOpenProjects("Test2");
IQueryable<IPackage> packages = solution.GetPackages();
Assert.AreEqual(testProject1, fakeProjectFactory.ProjectsPassedToCreateProject[0]);
Assert.AreEqual(testProject2, fakeProjectFactory.ProjectsPassedToCreateProject[1]);
Assert.AreEqual(fakeRegisteredPackageRepositories.ActiveRepository, fakeProjectFactory.RepositoriesPassedToCreateProject[0]);
Assert.AreEqual(fakeRegisteredPackageRepositories.ActiveRepository, fakeProjectFactory.RepositoriesPassedToCreateProject[1]);
}
}
}

Loading…
Cancel
Save