diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs index a2fe2faef4..11272f1338 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs @@ -38,7 +38,12 @@ namespace ICSharpCode.PackageManagement if (repository == null) { throw new ApplicationException(errorMessage); } - return repository.GetPackages(); + return repository.GetPackages().Where(package => package.IsLatestVersion); + } + + public IQueryable CallGetPackagesFromPackageSource() + { + return GetPackagesFromPackageSource(); } /// diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs index d88a128a0a..9a88a5e4af 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs @@ -37,6 +37,7 @@ namespace ICSharpCode.PackageManagement.Design this.Description = String.Empty; this.Version = new SemanticVersion(version); this.Listed = true; + this.IsLatestVersion = true; } public static FakePackage CreatePackageWithVersion(string version) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs index 8d47621875..e57e114f84 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs @@ -35,7 +35,7 @@ namespace ICSharpCode.PackageManagement PackageViewModels = new ObservableCollection(); ErrorMessage = String.Empty; - CreateCommands(); + CreateCommands(); } void CreateCommands() @@ -143,7 +143,7 @@ namespace ICSharpCode.PackageManagement } void UpdatePackagesForSelectedPage(PackagesForSelectedPageResult result) - { + { pages.TotalItems = result.TotalPackages; pages.TotalItemsOnSelectedPage = result.TotalPackagesOnPage; UpdatePackageViewModels(result.Packages); @@ -164,15 +164,23 @@ namespace ICSharpCode.PackageManagement IEnumerable GetFilteredPackagesBeforePagingResults() { if (allPackages == null) { - IQueryable packages = GetAllPackages(); - packages = OrderPackages(packages); - packages = FilterPackagesBySearchCriteria(packages); + IQueryable packages = GetPackagesFromPackageSource(); TotalItems = packages.Count(); allPackages = GetFilteredPackagesBeforePagingResults(packages); } return allPackages; } + /// + /// Returns the queryable object that will be used to query the NuGet online feed. + /// + public IQueryable GetPackagesFromPackageSource() + { + IQueryable packages = GetAllPackages(); + packages = OrderPackages(packages); + return FilterPackagesBySearchCriteria(packages); + } + protected virtual IQueryable OrderPackages(IQueryable packages) { return packages @@ -279,7 +287,7 @@ namespace ICSharpCode.PackageManagement public bool IsPaged { get { return pages.IsPaged; } } - + public ObservableCollection Pages { get { return pages; } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs index dd5b65f18d..537068d345 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Linq; using ICSharpCode.PackageManagement; using ICSharpCode.PackageManagement.Design; using NuGet; @@ -364,7 +365,7 @@ namespace PackageManagement.Tests { CreateViewModel(); - var releasePackage = new FakePackage("Test", "1.0.0.0"); + var releasePackage = new FakePackage("Test", "1.1.0.0"); var prereleasePackage = new FakePackage("Test", "1.1.0-alpha"); var packages = new FakePackage[] { @@ -406,5 +407,27 @@ namespace PackageManagement.Tests PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels); } + + + [Test] + public void GetPackagesFromPackageSource_RepositoryHasThreePackagesWithSameIdButDifferentVersions_LatestPackageVersionOnlyRequestedFromPackageSource() + { + CreateViewModel(); + var package1 = new FakePackage("Test", "0.1.0.0") { IsLatestVersion = false }; + var package2 = new FakePackage("Test", "0.2.0.0") { IsLatestVersion = false }; + var package3 = new FakePackage("Test", "0.3.0.0") { IsLatestVersion = true }; + var packages = new FakePackage[] { + package1, package2, package3 + }; + registeredPackageRepositories.FakeActiveRepository.FakePackages.AddRange(packages); + viewModel.ReadPackages(); + + IList allPackages = viewModel.GetPackagesFromPackageSource().ToList(); + + var expectedPackages = new FakePackage[] { + package3 + }; + PackageCollectionAssert.AreEqual(expectedPackages, allPackages); + } } }