diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs index 57d633599d..c47dca7304 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs @@ -199,7 +199,7 @@ namespace ICSharpCode.PackageManagement if (allPackages == null) { IQueryable packages = GetAllPackages(); packages = OrderPackages(packages); - packages = packages.Find(searchTerms); + packages = FilterPackagesBySearchCriteria(packages); totalItems = packages.Count(); allPackages = GetFilteredPackagesBeforePagingResults(packages); } @@ -212,6 +212,25 @@ namespace ICSharpCode.PackageManagement .OrderBy(package => package.Id); } + IQueryable FilterPackagesBySearchCriteria(IQueryable packages) + { + string searchCriteria = GetSearchCriteria(); + return FilterPackagesBySearchCriteria(packages, searchCriteria); + } + + string GetSearchCriteria() + { + if (String.IsNullOrWhiteSpace(searchTerms)) { + return null; + } + return searchTerms; + } + + protected virtual IQueryable FilterPackagesBySearchCriteria(IQueryable packages, string searchCriteria) + { + return packages.Find(searchCriteria); + } + IEnumerable GetPackagesForSelectedPage(IEnumerable allPackages) { int packagesToSkip = pages.ItemsBeforeFirstPage; diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackagesViewModel.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackagesViewModel.cs index 5044b1102c..b22c022235 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackagesViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackagesViewModel.cs @@ -18,6 +18,7 @@ namespace PackageManagement.Tests.Helpers public List FakePackages = new List(); public int GetAllPackagesCallCount; public int PageCountBeforePackagesFiltered; + public string SearchCriteriaPassedToFilterPackagesBySearchCriteria; public TestablePackagesViewModel() : this(new FakePackageManagementService()) @@ -88,5 +89,11 @@ namespace PackageManagement.Tests.Helpers { AddFakePackages(howMany: 3); } + + protected override IQueryable FilterPackagesBySearchCriteria(IQueryable packages, string searchTerms) + { + SearchCriteriaPassedToFilterPackagesBySearchCriteria = searchTerms; + return base.FilterPackagesBySearchCriteria(packages, searchTerms); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackagesViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackagesViewModelTests.cs index a50975fc2e..6ac63134b7 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackagesViewModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackagesViewModelTests.cs @@ -1195,5 +1195,45 @@ namespace PackageManagement.Tests Assert.AreEqual(1, viewModel.PackageViewModels.Count); } + + [Test] + public void Search_RepositoryHasPackageWithIdOfEmptyString_SearchCriteriaUsedIsNull() + { + CreateViewModel(); + viewModel.PageSize = 2; + viewModel.FakePackages.Add(new FakePackage() { + Id = "", + Description = "abc" + }); + taskFactory.RunTasksSynchronously = true; + viewModel.ReadPackages(); + + ClearReadPackagesTasks(); + + viewModel.SearchTerms = ""; + viewModel.Search(); + + Assert.IsNull(viewModel.SearchCriteriaPassedToFilterPackagesBySearchCriteria); + } + + [Test] + public void Search_RepositoryHasPackageWithIdOfWhitespaceString_SearchCriteriaUsedIsNull() + { + CreateViewModel(); + viewModel.PageSize = 2; + viewModel.FakePackages.Add(new FakePackage() { + Id = "", + Description = "abc" + }); + taskFactory.RunTasksSynchronously = true; + viewModel.ReadPackages(); + + ClearReadPackagesTasks(); + + viewModel.SearchTerms = " "; + viewModel.Search(); + + Assert.IsNull(viewModel.SearchCriteriaPassedToFilterPackagesBySearchCriteria); + } } }