Browse Source

Fix InvalidOperationException when paging through results and the total items on the page is less than the page size due to package version filtering.

pull/15/head
mrward 15 years ago
parent
commit
fd3fffd606
  1. 6
      src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs
  2. 48
      src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs

6
src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs

@ -93,10 +93,8 @@ namespace ICSharpCode.PackageManagement @@ -93,10 +93,8 @@ namespace ICSharpCode.PackageManagement
public void ReadPackages()
{
allPackages = null;
pages.CollectionChanged -= PagesChanged;
SelectedPageNumber = 1;
UpdatePackageViewModels();
pages.CollectionChanged += PagesChanged;
}
void PagesChanged(object sender, NotifyCollectionChangedEventArgs e)
@ -107,9 +105,13 @@ namespace ICSharpCode.PackageManagement @@ -107,9 +105,13 @@ namespace ICSharpCode.PackageManagement
void UpdatePackageViewModels()
{
pages.CollectionChanged -= PagesChanged;
IEnumerable<IPackage> packages = GetPackagesForSelectedPage();
pages.TotalItemsOnSelectedPage = packages.Count();
UpdatePackageViewModels(packages);
pages.CollectionChanged += PagesChanged;
}
IEnumerable<IPackage> GetPackagesForSelectedPage()

48
src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs

@ -93,6 +93,52 @@ namespace PackageManagement.Tests @@ -93,6 +93,52 @@ namespace PackageManagement.Tests
viewModel.Search();
Assert.AreEqual(0, viewModel.PackageViewModels.Count);
}
}
[Test]
public void ShowNextPage_TwoObjectsWatchingForPagesCollectionChangedEventAndUserMovesToPageTwoAndFilteredPackagesReturnsLessThanExpectedPackagesDueToMatchingVersions_InvalidOperationExceptionNotThrownWhen()
{
CreateViewModel();
viewModel.PageSize = 2;
var package1 = new FakePackage() {
Id = "First",
Description = "",
Version = new Version(0, 1, 0, 0)
};
var package2 = new FakePackage() {
Id = "Secon",
Description = "",
Version = new Version(0, 2, 0, 0)
};
var package3 = new FakePackage() {
Id = "Test",
Description = "",
Version = new Version(0, 3, 0, 0)
};
var package4 = new FakePackage() {
Id = "Test",
Description = "",
Version = new Version(0, 4, 0, 0)
};
var packages = new FakePackage[] {
package1, package2, package3, package4
};
packageManagementService.FakeActivePackageRepository.FakePackages.AddRange(packages);
viewModel.ReadPackages();
bool collectionChangedEventFired = false;
viewModel.Pages.CollectionChanged += (sender, e) => collectionChangedEventFired = true;
viewModel.ShowNextPage();
var expectedPackages = new FakePackage[] {
package4
};
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
Assert.IsTrue(collectionChangedEventFired);
}
}
}

Loading…
Cancel
Save