Browse Source

Prevent repeated http requests sent to NuGet repository when selecting a different page.

pull/15/head
mrward 15 years ago
parent
commit
f69e6bdb83
  1. 14
      src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs
  2. 8
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeTask.cs
  3. 3
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeTaskFactory.cs
  4. 76
      src/AddIns/Misc/PackageManagement/Test/Src/PackagesViewModelTests.cs

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

@ -112,7 +112,7 @@ namespace ICSharpCode.PackageManagement @@ -112,7 +112,7 @@ namespace ICSharpCode.PackageManagement
public void ReadPackages()
{
allPackages = null;
SelectedPageNumber = 1;
pages.SelectedPageNumber = 1;
UpdateRepositoryBeforeReadPackagesTaskStarts();
StartReadPackagesTask();
}
@ -177,13 +177,9 @@ namespace ICSharpCode.PackageManagement @@ -177,13 +177,9 @@ namespace ICSharpCode.PackageManagement
void UpdatePackagesForSelectedPage(PackagesForSelectedPageResult result)
{
pages.CollectionChanged -= PagesChanged;
pages.TotalItems = result.TotalPackages;
pages.TotalItemsOnSelectedPage = result.TotalPackagesOnPage;
UpdatePackageViewModels(result.Packages);
pages.CollectionChanged += PagesChanged;
}
void PagesChanged(object sender, NotifyCollectionChangedEventArgs e)
@ -278,7 +274,13 @@ namespace ICSharpCode.PackageManagement @@ -278,7 +274,13 @@ namespace ICSharpCode.PackageManagement
public int SelectedPageNumber {
get { return pages.SelectedPageNumber; }
set { pages.SelectedPageNumber = value; }
set {
if (pages.SelectedPageNumber != value) {
pages.SelectedPageNumber = value;
StartReadPackagesTask();
base.OnPropertyChanged(null);
}
}
}
public int PageSize {

8
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeTask.cs

@ -11,19 +11,25 @@ namespace PackageManagement.Tests.Helpers @@ -11,19 +11,25 @@ namespace PackageManagement.Tests.Helpers
public bool IsStartCalled;
public bool IsCancelCalled;
public bool RunTaskSynchronously;
Func<TResult> function;
Action<ITask<TResult>> continueWith;
public FakeTask(Func<TResult> function, Action<ITask<TResult>> continueWith)
public FakeTask(Func<TResult> function, Action<ITask<TResult>> continueWith, bool runTaskSynchronously)
{
this.function = function;
this.continueWith = continueWith;
RunTaskSynchronously = runTaskSynchronously;
Exception = new AggregateException(new Exception("FakeTaskAggregateInnerException"));
}
public void Start()
{
IsStartCalled = true;
if (RunTaskSynchronously) {
ExecuteTaskCompletely();
}
}
public TResult Result { get; set; }

3
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeTaskFactory.cs

@ -11,6 +11,7 @@ namespace PackageManagement.Tests.Helpers @@ -11,6 +11,7 @@ namespace PackageManagement.Tests.Helpers
public class FakeTaskFactory : ITaskFactory
{
public bool IsCreateTaskCalled;
public bool RunTasksSynchronously;
public FakeTask<PackagesForSelectedPageResult> FirstFakeTaskCreated {
get { return FakeTasksCreated[0] as FakeTask<PackagesForSelectedPageResult>; }
@ -23,7 +24,7 @@ namespace PackageManagement.Tests.Helpers @@ -23,7 +24,7 @@ namespace PackageManagement.Tests.Helpers
Action<ITask<TResult>> continueWith)
{
IsCreateTaskCalled = true;
var task = new FakeTask<TResult>(function, continueWith);
var task = new FakeTask<TResult>(function, continueWith, RunTasksSynchronously);
FakeTasksCreated.Add(task);
return task;
}

76
src/AddIns/Misc/PackageManagement/Test/Src/PackagesViewModelTests.cs

@ -508,7 +508,7 @@ namespace PackageManagement.Tests @@ -508,7 +508,7 @@ namespace PackageManagement.Tests
}
[Test]
public void ReadPackages_CalledThreeTimesAndThenSelectedPageChanged_ViewModelPropertiesChangedEventFiresFourTimesWhenSelectedPageChanged()
public void ReadPackages_CalledThreeTimesAndThenSelectedPageChanged_ViewModelPropertiesChangedEventFiresOnceWhenSelectedPageChanged()
{
CreateViewModel();
viewModel.PageSize = 3;
@ -527,16 +527,7 @@ namespace PackageManagement.Tests @@ -527,16 +527,7 @@ namespace PackageManagement.Tests
viewModel.PropertyChanged += (sender, e) => count++;
viewModel.SelectedPageNumber = 2;
// PropertyChanged fired for clearing the pages.
int propertyChangedEventFiredForClearingPagesCount = 1;
// PropertyChanged fired once for each page.
int propertyChangedEventFiredForAddingPagesCount = 2;
int totalExpectedPropertyChangedFiredCount =
propertyChangedEventFiredForClearingPagesCount + propertyChangedEventFiredForAddingPagesCount;
Assert.AreEqual(totalExpectedPropertyChangedFiredCount, count);
Assert.AreEqual(1, count);
}
[Test]
@ -1141,5 +1132,68 @@ namespace PackageManagement.Tests @@ -1141,5 +1132,68 @@ namespace PackageManagement.Tests
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
}
[Test]
public void SelectedPageNumber_SixPackagesAndPageSizeIsFiveAndSelectedPageNumberIsChangedToTwo_OneReadPackagesTaskCreated()
{
CreateViewModel();
viewModel.PageSize = 5;
viewModel.AddSixFakePackages();
viewModel.ReadPackages();
CompleteReadPackagesTask();
ClearReadPackagesTasks();
viewModel.SelectedPageNumber = 2;
Assert.AreEqual(1, taskFactory.FakeTasksCreated.Count);
}
[Test]
public void SelectedPageNumber_SixPackagesAndSelectedPageNumberIsSetToPageOneButUnchanged_NoReadPackagesTaskCreated()
{
CreateViewModel();
viewModel.PageSize = 5;
viewModel.AddSixFakePackages();
viewModel.ReadPackages();
CompleteReadPackagesTask();
ClearReadPackagesTasks();
viewModel.SelectedPageNumber = 1;
Assert.AreEqual(0, taskFactory.FakeTasksCreated.Count);
}
[Test]
public void SelectedPageNumber_SixPackagesAndPageSizeIsFiveAndSelectedPageNumberIsChangedToTwo_PropertyChangedEventFiredAfterSelectedPageNumberChanged()
{
CreateViewModel();
viewModel.PageSize = 5;
viewModel.AddSixFakePackages();
viewModel.ReadPackages();
CompleteReadPackagesTask();
ClearReadPackagesTasks();
int selectedPageNumber = 0;
viewModel.PropertyChanged += (source, e) => selectedPageNumber = viewModel.SelectedPageNumber;
viewModel.SelectedPageNumber = 2;
Assert.AreEqual(2, selectedPageNumber);
}
[Test]
public void SelectedPageNumber_SixPackagesAndPageSizeIsFiveAndSelectedPageNumberIsChangedToTwo_SelectedPageNumberChangedBeforeReadPackagesTaskStarted()
{
CreateViewModel();
viewModel.PageSize = 5;
viewModel.AddSixFakePackages();
viewModel.ReadPackages();
CompleteReadPackagesTask();
ClearReadPackagesTasks();
taskFactory.RunTasksSynchronously = true;
viewModel.SelectedPageNumber = 2;
Assert.AreEqual(1, viewModel.PackageViewModels.Count);
}
}
}

Loading…
Cancel
Save