Browse Source

Prevent package install/uninstall events being captured by closed Add Package Reference dialog.

pull/15/head
Matt Ward 15 years ago
parent
commit
00e5a5206b
  1. 5
      src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceCommand.cs
  2. 10
      src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceView.xaml
  3. 45
      src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceViewModel.cs
  4. 14
      src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs
  5. 91
      src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs
  6. 14
      src/AddIns/Misc/PackageManagement/Project/Src/RecentPackagesViewModel.cs
  7. 4
      src/AddIns/Misc/PackageManagement/Project/Src/ViewModelLocator.cs
  8. 44
      src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceViewModelTests.cs
  9. 54
      src/AddIns/Misc/PackageManagement/Test/Src/InstalledPackagesViewModelTests.cs
  10. 17
      src/AddIns/Misc/PackageManagement/Test/Src/PackagesViewModelTests.cs
  11. 56
      src/AddIns/Misc/PackageManagement/Test/Src/RecentPackagesViewModelTests.cs

5
src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceCommand.cs

@ -12,9 +12,12 @@ namespace ICSharpCode.PackageManagement
{ {
public override void Run() public override void Run()
{ {
AddPackageReferenceView view = new AddPackageReferenceView(); var view = new AddPackageReferenceView();
view.Owner = WorkbenchSingleton.MainWindow; view.Owner = WorkbenchSingleton.MainWindow;
view.ShowDialog(); view.ShowDialog();
var viewModel = view.MainPanel.DataContext as AddPackageReferenceViewModel;
viewModel.Dispose();
} }
} }
} }

10
src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceView.xaml

@ -21,7 +21,7 @@
UriSource="pack://application:,,,/PackageManagement;component/Resources/exclamation.png"/> UriSource="pack://application:,,,/PackageManagement;component/Resources/exclamation.png"/>
</Window.Resources> </Window.Resources>
<DockPanel> <DockPanel x:Name="MainPanel">
<!-- Use DockPanel.DataContext instead of Window.DataContext otherwise Visual Studio does not show <!-- Use DockPanel.DataContext instead of Window.DataContext otherwise Visual Studio does not show
design time data --> design time data -->
<DockPanel.DataContext> <DockPanel.DataContext>
@ -54,22 +54,22 @@
<TabControl> <TabControl>
<TabItem Header="Available"> <TabItem Header="Available">
<pm:PackagesView <pm:PackagesView
x:Name="availablePackagesView" x:Name="AvailablePackagesView"
DataContext="{Binding Path=AvailablePackagesViewModel}"/> DataContext="{Binding Path=AvailablePackagesViewModel}"/>
</TabItem> </TabItem>
<TabItem Header="Installed"> <TabItem Header="Installed">
<pm:PackagesView <pm:PackagesView
x:Name="installedPackagesView" x:Name="InstalledPackagesView"
DataContext="{Binding Path=InstalledPackagesViewModel}"/> DataContext="{Binding Path=InstalledPackagesViewModel}"/>
</TabItem> </TabItem>
<TabItem Header="Updates"> <TabItem Header="Updates">
<pm:PackagesView <pm:PackagesView
x:Name="packageUpdatesView" x:Name="PackageUpdatesView"
DataContext="{Binding Path=UpdatedPackagesViewModel}"/> DataContext="{Binding Path=UpdatedPackagesViewModel}"/>
</TabItem> </TabItem>
<TabItem Header="Recent"> <TabItem Header="Recent">
<pm:PackagesView <pm:PackagesView
x:Name="recentPackagesView" x:Name="RecentPackagesView"
DataContext="{Binding Path=RecentPackagesViewModel}"/> DataContext="{Binding Path=RecentPackagesViewModel}"/>
</TabItem> </TabItem>
</TabControl> </TabControl>

45
src/AddIns/Misc/PackageManagement/Project/Src/AddPackageReferenceViewModel.cs

@ -8,13 +8,9 @@ using NuGet;
namespace ICSharpCode.PackageManagement namespace ICSharpCode.PackageManagement
{ {
public class AddPackageReferenceViewModel : ViewModelBase<AddPackageReferenceViewModel>, IMessageReporter public class AddPackageReferenceViewModel : ViewModelBase<AddPackageReferenceViewModel>, IMessageReporter, IDisposable
{ {
IPackageManagementService packageManagementService; IPackageManagementService packageManagementService;
InstalledPackagesViewModel installedPackagesViewModel;
AvailablePackagesViewModel availablePackagesViewModel;
UpdatedPackagesViewModel updatedPackagesViewModel;
RecentPackagesViewModel recentPackagesViewModel;
string message; string message;
bool hasError; bool hasError;
@ -25,31 +21,28 @@ namespace ICSharpCode.PackageManagement
this.packageManagementService = packageManagementService; this.packageManagementService = packageManagementService;
this.packageManagementService.OutputMessagesView.Clear(); this.packageManagementService.OutputMessagesView.Clear();
availablePackagesViewModel = new AvailablePackagesViewModel(packageManagementService, this, taskFactory); AvailablePackagesViewModel = new AvailablePackagesViewModel(packageManagementService, this, taskFactory);
installedPackagesViewModel = new InstalledPackagesViewModel(packageManagementService, this, taskFactory); InstalledPackagesViewModel = new InstalledPackagesViewModel(packageManagementService, this, taskFactory);
updatedPackagesViewModel = new UpdatedPackagesViewModel(packageManagementService, this, taskFactory); UpdatedPackagesViewModel = new UpdatedPackagesViewModel(packageManagementService, this, taskFactory);
recentPackagesViewModel = new RecentPackagesViewModel(packageManagementService, this, taskFactory); RecentPackagesViewModel = new RecentPackagesViewModel(packageManagementService, this, taskFactory);
availablePackagesViewModel.ReadPackages(); AvailablePackagesViewModel.ReadPackages();
installedPackagesViewModel.ReadPackages(); InstalledPackagesViewModel.ReadPackages();
updatedPackagesViewModel.ReadPackages(); UpdatedPackagesViewModel.ReadPackages();
recentPackagesViewModel.ReadPackages(); RecentPackagesViewModel.ReadPackages();
} }
public InstalledPackagesViewModel InstalledPackagesViewModel { public AvailablePackagesViewModel AvailablePackagesViewModel { get; private set; }
get { return installedPackagesViewModel; } public InstalledPackagesViewModel InstalledPackagesViewModel { get; private set; }
} public RecentPackagesViewModel RecentPackagesViewModel { get; private set; }
public UpdatedPackagesViewModel UpdatedPackagesViewModel { get; private set; }
public AvailablePackagesViewModel AvailablePackagesViewModel {
get { return availablePackagesViewModel; }
}
public UpdatedPackagesViewModel UpdatedPackagesViewModel { public void Dispose()
get { return updatedPackagesViewModel; } {
} AvailablePackagesViewModel.Dispose();
InstalledPackagesViewModel.Dispose();
public RecentPackagesViewModel RecentPackagesViewModel { RecentPackagesViewModel.Dispose();
get { return recentPackagesViewModel; } UpdatedPackagesViewModel.Dispose();
} }
public void ShowErrorMessage(string message) public void ShowErrorMessage(string message)

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

@ -20,8 +20,8 @@ namespace ICSharpCode.PackageManagement
ITaskFactory taskFactory) ITaskFactory taskFactory)
: base(packageManagementService, messageReporter, taskFactory) : base(packageManagementService, messageReporter, taskFactory)
{ {
packageManagementService.ParentPackageInstalled += PackageInstalled; packageManagementService.ParentPackageInstalled += ParentPackageInstalled;
packageManagementService.ParentPackageUninstalled += PackageUninstalled; packageManagementService.ParentPackageUninstalled += ParentPackageUninstalled;
GetActiveProjectManager(); GetActiveProjectManager();
} }
@ -35,16 +35,22 @@ namespace ICSharpCode.PackageManagement
} }
} }
void PackageInstalled(object sender, EventArgs e) void ParentPackageInstalled(object sender, EventArgs e)
{ {
ReadPackages(); ReadPackages();
} }
void PackageUninstalled(object sender, EventArgs e) void ParentPackageUninstalled(object sender, EventArgs e)
{ {
ReadPackages(); ReadPackages();
} }
protected override void OnDispose()
{
PackageManagementService.ParentPackageInstalled -= ParentPackageInstalled;
PackageManagementService.ParentPackageUninstalled -= ParentPackageUninstalled;
}
protected override void UpdateRepositoryBeforeReadPackagesTaskStarts() protected override void UpdateRepositoryBeforeReadPackagesTaskStarts()
{ {
if (projectManager != null) { if (projectManager != null) {

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

@ -11,27 +11,15 @@ using NuGet;
namespace ICSharpCode.PackageManagement namespace ICSharpCode.PackageManagement
{ {
public abstract class PackagesViewModel : ViewModelBase<PackagesViewModel> public abstract class PackagesViewModel : ViewModelBase<PackagesViewModel>, IDisposable
{ {
DelegateCommand showNextPageCommand;
DelegateCommand showPreviousPageCommand;
DelegateCommand showPageCommand;
DelegateCommand searchCommand;
ObservableCollection<PackageViewModel> packageViewModels =
new ObservableCollection<PackageViewModel>();
Pages pages = new Pages(); Pages pages = new Pages();
IPackageManagementService packageManagementService; IPackageManagementService packageManagementService;
IPackageViewModelFactory packageViewModelFactory; IPackageViewModelFactory packageViewModelFactory;
ITaskFactory taskFactory; ITaskFactory taskFactory;
IEnumerable<IPackage> allPackages; IEnumerable<IPackage> allPackages;
string searchTerms;
bool isReadingPackages;
ITask<PackagesForSelectedPageResult> task; ITask<PackagesForSelectedPageResult> task;
int totalItems;
bool hasError;
string errorMessage = String.Empty;
public PackagesViewModel( public PackagesViewModel(
IPackageManagementService packageManagementService, IPackageManagementService packageManagementService,
@ -65,54 +53,48 @@ namespace ICSharpCode.PackageManagement
this.packageManagementService = packageManagementService; this.packageManagementService = packageManagementService;
this.packageViewModelFactory = packageViewModelFactory; this.packageViewModelFactory = packageViewModelFactory;
this.taskFactory = taskFactory; this.taskFactory = taskFactory;
PackageViewModels = new ObservableCollection<PackageViewModel>();
ErrorMessage = String.Empty;
CreateCommands(); CreateCommands();
} }
void CreateCommands() void CreateCommands()
{ {
showNextPageCommand = new DelegateCommand(param => ShowNextPage()); ShowNextPageCommand = new DelegateCommand(param => ShowNextPage());
showPreviousPageCommand = new DelegateCommand(param => ShowPreviousPage()); ShowPreviousPageCommand = new DelegateCommand(param => ShowPreviousPage());
showPageCommand = new DelegateCommand(param => ExecuteShowPageCommand(param)); ShowPageCommand = new DelegateCommand(param => ExecuteShowPageCommand(param));
searchCommand = new DelegateCommand(param => Search()); SearchCommand = new DelegateCommand(param => Search());
}
public ICommand ShowNextPageCommand {
get { return showNextPageCommand; }
} }
public ICommand ShowPreviousPageCommand { public ICommand ShowNextPageCommand { get; private set; }
get { return showPreviousPageCommand; } public ICommand ShowPreviousPageCommand { get; private set; }
} public ICommand ShowPageCommand { get; private set; }
public ICommand SearchCommand { get; private set; }
public ICommand ShowPageCommand { public void Dispose()
get { return showPageCommand; } {
OnDispose();
IsDisposed = true;
} }
public ICommand SearchCommand { protected virtual void OnDispose()
get { return searchCommand; } {
} }
public bool HasError { public bool IsDisposed { get; private set; }
get { return hasError; }
}
public string ErrorMessage { public bool HasError { get; private set; }
get { return errorMessage; } public string ErrorMessage { get; private set; }
}
public ObservableCollection<PackageViewModel> PackageViewModels { public ObservableCollection<PackageViewModel> PackageViewModels { get; set; }
get { return packageViewModels; }
set { packageViewModels = value; }
}
public IPackageManagementService PackageManagementService { public IPackageManagementService PackageManagementService {
get { return packageManagementService; } get { return packageManagementService; }
} }
public bool IsReadingPackages { public bool IsReadingPackages { get; private set; }
get { return isReadingPackages; }
}
public void ReadPackages() public void ReadPackages()
{ {
@ -124,8 +106,8 @@ namespace ICSharpCode.PackageManagement
void StartReadPackagesTask() void StartReadPackagesTask()
{ {
isReadingPackages = true; IsReadingPackages = true;
hasError = false; HasError = false;
ClearPackages(); ClearPackages();
CancelReadPackagesTask(); CancelReadPackagesTask();
CreateReadPackagesTask(); CreateReadPackagesTask();
@ -153,12 +135,12 @@ namespace ICSharpCode.PackageManagement
PackagesForSelectedPageResult GetPackagesForSelectedPageResult() PackagesForSelectedPageResult GetPackagesForSelectedPageResult()
{ {
IEnumerable<IPackage> packages = GetPackagesForSelectedPage(); IEnumerable<IPackage> packages = GetPackagesForSelectedPage();
return new PackagesForSelectedPageResult(packages, totalItems); return new PackagesForSelectedPageResult(packages, TotalItems);
} }
void OnPackagesReadForSelectedPage(ITask<PackagesForSelectedPageResult> task) void OnPackagesReadForSelectedPage(ITask<PackagesForSelectedPageResult> task)
{ {
isReadingPackages = false; IsReadingPackages = false;
if (task.IsFaulted) { if (task.IsFaulted) {
SaveError(task.Exception); SaveError(task.Exception);
} else if (task.IsCancelled) { } else if (task.IsCancelled) {
@ -176,8 +158,8 @@ namespace ICSharpCode.PackageManagement
protected void SaveError(Exception ex) protected void SaveError(Exception ex)
{ {
hasError = true; HasError = true;
errorMessage = ex.Message; ErrorMessage = ex.Message;
} }
void UpdatePackagesForSelectedPage(PackagesForSelectedPageResult result) void UpdatePackagesForSelectedPage(PackagesForSelectedPageResult result)
@ -205,7 +187,7 @@ namespace ICSharpCode.PackageManagement
IQueryable<IPackage> packages = GetAllPackages(); IQueryable<IPackage> packages = GetAllPackages();
packages = OrderPackages(packages); packages = OrderPackages(packages);
packages = FilterPackagesBySearchCriteria(packages); packages = FilterPackagesBySearchCriteria(packages);
totalItems = packages.Count(); TotalItems = packages.Count();
allPackages = GetFilteredPackagesBeforePagingResults(packages); allPackages = GetFilteredPackagesBeforePagingResults(packages);
} }
return allPackages; return allPackages;
@ -225,10 +207,10 @@ namespace ICSharpCode.PackageManagement
string GetSearchCriteria() string GetSearchCriteria()
{ {
if (String.IsNullOrWhiteSpace(searchTerms)) { if (String.IsNullOrWhiteSpace(SearchTerms)) {
return null; return null;
} }
return searchTerms; return SearchTerms;
} }
protected virtual IQueryable<IPackage> FilterPackagesBySearchCriteria(IQueryable<IPackage> packages, string searchCriteria) protected virtual IQueryable<IPackage> FilterPackagesBySearchCriteria(IQueryable<IPackage> packages, string searchCriteria)
@ -333,9 +315,7 @@ namespace ICSharpCode.PackageManagement
set { pages.MaximumSelectablePages = value; } set { pages.MaximumSelectablePages = value; }
} }
public int TotalItems { public int TotalItems { get; private set; }
get { return totalItems; }
}
public void ShowNextPage() public void ShowNextPage()
{ {
@ -360,10 +340,7 @@ namespace ICSharpCode.PackageManagement
public bool IsSearchable { get; set; } public bool IsSearchable { get; set; }
public string SearchTerms { public string SearchTerms { get; set; }
get { return searchTerms; }
set { searchTerms = value; }
}
public void Search() public void Search()
{ {

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

@ -18,20 +18,26 @@ namespace ICSharpCode.PackageManagement
: base(packageManagementService, messageReporter, taskFactory) : base(packageManagementService, messageReporter, taskFactory)
{ {
recentPackageRepository = packageManagementService.RecentPackageRepository; recentPackageRepository = packageManagementService.RecentPackageRepository;
packageManagementService.ParentPackageInstalled += PackageInstalled; packageManagementService.ParentPackageInstalled += ParentPackageInstalled;
packageManagementService.ParentPackageUninstalled += PackageUninstalled; packageManagementService.ParentPackageUninstalled += ParentPackageUninstalled;
} }
void PackageInstalled(object sender, EventArgs e) void ParentPackageInstalled(object sender, EventArgs e)
{ {
ReadPackages(); ReadPackages();
} }
void PackageUninstalled(object sender, EventArgs e) void ParentPackageUninstalled(object sender, EventArgs e)
{ {
ReadPackages(); ReadPackages();
} }
protected override void OnDispose()
{
PackageManagementService.ParentPackageInstalled -= ParentPackageInstalled;
PackageManagementService.ParentPackageUninstalled -= ParentPackageUninstalled;
}
protected override IQueryable<IPackage> GetAllPackages() protected override IQueryable<IPackage> GetAllPackages()
{ {
return recentPackageRepository.GetPackages(); return recentPackageRepository.GetPackages();

4
src/AddIns/Misc/PackageManagement/Project/Src/ViewModelLocator.cs

@ -16,9 +16,7 @@ namespace ICSharpCode.PackageManagement
public AddPackageReferenceViewModel AddPackageReferenceViewModel { public AddPackageReferenceViewModel AddPackageReferenceViewModel {
get { get {
if (addPackageReferenceViewModel == null) { CreateAddPackageReferenceViewModel();
CreateAddPackageReferenceViewModel();
}
return addPackageReferenceViewModel; return addPackageReferenceViewModel;
} }
} }

44
src/AddIns/Misc/PackageManagement/Test/Src/AddPackageReferenceViewModelTests.cs

@ -215,5 +215,49 @@ namespace PackageManagement.Tests
Assert.IsFalse(viewModel.HasError); Assert.IsFalse(viewModel.HasError);
} }
[Test]
public void Dispose_ContainedViewModelsAreDisposed_AvailablePackagesViewModelIsDisposed()
{
CreateViewModel();
viewModel.Dispose();
bool disposed = viewModel.AvailablePackagesViewModel.IsDisposed;
Assert.IsTrue(disposed);
}
[Test]
public void Dispose_ContainedViewModelsAreDisposed_InstaledPackagesViewModelIsDisposed()
{
CreateViewModel();
viewModel.Dispose();
bool disposed = viewModel.InstalledPackagesViewModel.IsDisposed;
Assert.IsTrue(disposed);
}
[Test]
public void Dispose_ContainedViewModelsAreDisposed_UpdatedPackagesViewModelIsDisposed()
{
CreateViewModel();
viewModel.Dispose();
bool disposed = viewModel.UpdatedPackagesViewModel.IsDisposed;
Assert.IsTrue(disposed);
}
[Test]
public void Dispose_ContainedViewModelsAreDisposed_RecentPackagesViewModelIsDisposed()
{
CreateViewModel();
viewModel.Dispose();
bool disposed = viewModel.RecentPackagesViewModel.IsDisposed;
Assert.IsTrue(disposed);
}
} }
} }

54
src/AddIns/Misc/PackageManagement/Test/Src/InstalledPackagesViewModelTests.cs

@ -51,16 +51,21 @@ namespace PackageManagement.Tests
taskFactory.ClearAllFakeTasks(); taskFactory.ClearAllFakeTasks();
} }
FakePackage AddPackageToProjectManagerLocalPackageRepository()
{
var package = new FakePackage("Test");
FakePackageRepository repository = packageManagementService.FakeActiveProjectManager.FakeLocalRepository;
repository.FakePackages.Add(package);
return package;
}
[Test] [Test]
public void PackageViewModels_PackageReferenceIsAdded_PackageViewModelsIsUpdated() public void PackageViewModels_PackageReferenceIsAdded_PackageViewModelsIsUpdated()
{ {
CreateViewModel(); CreateViewModel();
viewModel.ReadPackages(); viewModel.ReadPackages();
CompleteReadPackagesTask(); CompleteReadPackagesTask();
FakePackage package = new FakePackage(); FakePackage package = AddPackageToProjectManagerLocalPackageRepository();
package.Id = "Test";
FakePackageRepository repository = packageManagementService.FakeActiveProjectManager.FakeLocalRepository;
repository.FakePackages.Add(package);
ClearReadPackagesTasks(); ClearReadPackagesTasks();
packageManagementService.FireParentPackageInstalled(); packageManagementService.FireParentPackageInstalled();
@ -74,14 +79,11 @@ namespace PackageManagement.Tests
public void PackageViewModels_PackageReferenceIsRemoved_PackageViewModelsIsUpdated() public void PackageViewModels_PackageReferenceIsRemoved_PackageViewModelsIsUpdated()
{ {
CreateViewModel(); CreateViewModel();
FakePackage package = new FakePackage(); FakePackage package = AddPackageToProjectManagerLocalPackageRepository();
package.Id = "Test";
FakePackageRepository repository = packageManagementService.FakeActiveProjectManager.FakeLocalRepository;
repository.FakePackages.Add(package);
viewModel.ReadPackages(); viewModel.ReadPackages();
CompleteReadPackagesTask(); CompleteReadPackagesTask();
repository.FakePackages.Clear(); packageManagementService.FakeActiveProjectManager.FakeLocalRepository.FakePackages.Clear();
ClearReadPackagesTasks(); ClearReadPackagesTasks();
packageManagementService.FireParentPackageUninstalled(); packageManagementService.FireParentPackageUninstalled();
@ -115,5 +117,39 @@ namespace PackageManagement.Tests
Assert.AreEqual(1, viewModel.PackageViewModels.Count); Assert.AreEqual(1, viewModel.PackageViewModels.Count);
} }
[Test]
public void PackageViewModels_PackageReferenceIsAddedAfterViewModelIsDisposed_PackageViewModelsIsNotUpdated()
{
CreateViewModel();
viewModel.ReadPackages();
CompleteReadPackagesTask();
FakePackage package = AddPackageToProjectManagerLocalPackageRepository();
ClearReadPackagesTasks();
viewModel.Dispose();
packageManagementService.FireParentPackageInstalled();
CompleteReadPackagesTask();
Assert.AreEqual(0, viewModel.PackageViewModels.Count);
}
[Test]
public void PackageViewModels_PackageReferenceIsRemovedAfterViewModelIsDisposed_PackageViewModelsIsNotUpdated()
{
CreateViewModel();
FakePackage package = AddPackageToProjectManagerLocalPackageRepository();
viewModel.ReadPackages();
CompleteReadPackagesTask();
packageManagementService.FakeActiveProjectManager.FakeLocalRepository.FakePackages.Clear();
ClearReadPackagesTasks();
viewModel.Dispose();
packageManagementService.FireParentPackageUninstalled();
CompleteReadPackagesTask();
Assert.AreEqual(1, viewModel.PackageViewModels.Count);
}
} }
} }

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

@ -1235,5 +1235,22 @@ namespace PackageManagement.Tests
Assert.IsNull(viewModel.SearchCriteriaPassedToFilterPackagesBySearchCriteria); Assert.IsNull(viewModel.SearchCriteriaPassedToFilterPackagesBySearchCriteria);
} }
[Test]
public void IsDisposed_DisposeMethodCalled_ReturnsTrue()
{
CreateViewModel();
viewModel.Dispose();
Assert.IsTrue(viewModel.IsDisposed);
}
[Test]
public void IsDisposed_DisposeMethodNotCalled_ReturnsFalse()
{
CreateViewModel();
Assert.IsFalse(viewModel.IsDisposed);
}
} }
} }

56
src/AddIns/Misc/PackageManagement/Test/Src/RecentPackagesViewModelTests.cs

@ -31,7 +31,7 @@ namespace PackageManagement.Tests
{ {
taskFactory = new FakeTaskFactory(); taskFactory = new FakeTaskFactory();
var messageReporter = new FakeMessageReporter(); var messageReporter = new FakeMessageReporter();
viewModel = new RecentPackagesViewModel(packageManagementService, messageReporter, taskFactory); viewModel = new RecentPackagesViewModel(packageManagementService, messageReporter, taskFactory);
} }
void CompleteReadPackagesTask() void CompleteReadPackagesTask()
@ -43,6 +43,14 @@ namespace PackageManagement.Tests
{ {
taskFactory.ClearAllFakeTasks(); taskFactory.ClearAllFakeTasks();
} }
FakePackage AddPackageToRecentPackageRepository()
{
var package = new FakePackage("Test");
FakePackageRepository repository = packageManagementService.FakeRecentPackageRepository;
repository.FakePackages.Add(package);
return package;
}
[Test] [Test]
public void PackageViewModels_PackageIsInstalledAfterRecentPackagesDisplayed_PackagesOnDisplayAreUpdated() public void PackageViewModels_PackageIsInstalledAfterRecentPackagesDisplayed_PackagesOnDisplayAreUpdated()
@ -50,9 +58,7 @@ namespace PackageManagement.Tests
CreateViewModel(); CreateViewModel();
viewModel.ReadPackages(); viewModel.ReadPackages();
CompleteReadPackagesTask(); CompleteReadPackagesTask();
var package = new FakePackage("Test"); var package = AddPackageToRecentPackageRepository();
FakePackageRepository repository = packageManagementService.FakeRecentPackageRepository;
repository.FakePackages.Add(package);
ClearReadPackagesTasks(); ClearReadPackagesTasks();
packageManagementService.FireParentPackageInstalled(); packageManagementService.FireParentPackageInstalled();
@ -61,7 +67,7 @@ namespace PackageManagement.Tests
var expectedPackages = new FakePackage[] { var expectedPackages = new FakePackage[] {
package package
}; };
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels); PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
} }
@ -71,9 +77,7 @@ namespace PackageManagement.Tests
CreateViewModel(); CreateViewModel();
viewModel.ReadPackages(); viewModel.ReadPackages();
CompleteReadPackagesTask(); CompleteReadPackagesTask();
var package = new FakePackage("Test"); var package = AddPackageToRecentPackageRepository();
FakePackageRepository repository = packageManagementService.FakeRecentPackageRepository;
repository.FakePackages.Add(package);
ClearReadPackagesTasks(); ClearReadPackagesTasks();
packageManagementService.FireParentPackageUninstalled(); packageManagementService.FireParentPackageUninstalled();
@ -82,8 +86,42 @@ namespace PackageManagement.Tests
var expectedPackages = new FakePackage[] { var expectedPackages = new FakePackage[] {
package package
}; };
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels); PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
} }
[Test]
public void PackageViewModels_PackageIsUninstalledAfterViewModelIsDisposed_PackagesOnDisplayAreNotUpdated()
{
CreateViewModel();
viewModel.ReadPackages();
CompleteReadPackagesTask();
AddPackageToRecentPackageRepository();
ClearReadPackagesTasks();
viewModel.Dispose();
packageManagementService.FireParentPackageUninstalled();
CompleteReadPackagesTask();
Assert.AreEqual(0, viewModel.PackageViewModels.Count);
}
[Test]
public void PackageViewModels_PackageIsInstalledAfterViewModelIsDisposed_PackagesOnDisplayAreNotUpdated()
{
CreateViewModel();
viewModel.ReadPackages();
CompleteReadPackagesTask();
AddPackageToRecentPackageRepository();
ClearReadPackagesTasks();
viewModel.Dispose();
packageManagementService.FireParentPackageInstalled();
CompleteReadPackagesTask();
Assert.AreEqual(0, viewModel.PackageViewModels.Count);
}
} }
} }

Loading…
Cancel
Save