From e7ca5921da6022859fac25cd9adc67473f7e293f Mon Sep 17 00:00:00 2001 From: Andreas Weizel Date: Wed, 20 Feb 2013 02:15:22 +0100 Subject: [PATCH] Added more unit tests for displaying AddIns in InstalledAddInsViewModel in different valid use cases. --- .../AddInManager2.Tests/AddInSetupTests.cs | 2 + .../Fakes/FakeSDAddInManagement.cs | 1 + .../InstalledAddInsViewModelTests.cs | 254 ++++++++++++++++++ 3 files changed, 257 insertions(+) diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInSetupTests.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInSetupTests.cs index 2824fb1fe0..f1f3e722e9 100644 --- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInSetupTests.cs +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AddInSetupTests.cs @@ -664,6 +664,7 @@ namespace ICSharpCode.AddInManager2.Tests Assert.That(_sdAddInManagement.RemovedExternalAddIns, Contains.Item(_addIn1), "AddIn must have been removed from external AddIns list."); Assert.That(_sdAddInManagement.AddInsMarkedForRemoval, Contains.Item(_addIn1.Manifest.PrimaryIdentity), "AddIn must have been marked for removal on next startup."); + Assert.That(_addIn1.Action, Is.EqualTo(AddInAction.Uninstall), "AddIn action must be set to 'Uninstall'"); Assert.That(addInUninstalledEventReceived, "AddInUninstalled event sent with correct AddIn"); @@ -721,6 +722,7 @@ namespace ICSharpCode.AddInManager2.Tests _addInSetup.UninstallAddIn(_addIn1); Assert.That(addInUninstalledEventReceived, "AddInUninstalled event sent with correct AddIn"); + Assert.That(_addIn1.Action, Is.EqualTo(AddInAction.Uninstall), "AddIn action must be set to 'Uninstall'"); // Simulate removing unreferenced NuGet packages _addInSetup.RemoveUnreferencedNuGetPackages(); diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeSDAddInManagement.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeSDAddInManagement.cs index d297e68f22..868692e42c 100644 --- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeSDAddInManagement.cs +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeSDAddInManagement.cs @@ -127,6 +127,7 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes foreach (var removedAddIn in addIns) { _registeredAddIns.Remove(removedAddIn); + removedAddIn.Action = AddInAction.Uninstall; } } } diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/InstalledAddInsViewModelTests.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/InstalledAddInsViewModelTests.cs index d15b160357..a526ead1d1 100644 --- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/InstalledAddInsViewModelTests.cs +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/InstalledAddInsViewModelTests.cs @@ -17,6 +17,8 @@ namespace ICSharpCode.AddInManager2.Tests { public class InstalledAddInsViewModelTests { + private const string SharpDevelopAddInTag = " sharpdevelopaddin "; + FakeAddInManagerServices _services; AddIn _addIn1; @@ -109,5 +111,257 @@ namespace ICSharpCode.AddInManager2.Tests Assert.That(viewModel.AddInPackages[0].IsExternallyReferenced, Is.True, "1st AddIn must be 'externally referenced'"); Assert.That(viewModel.AddInPackages[1].IsExternallyReferenced, Is.False, "2nd AddIn must not be 'externally referenced'"); } + + [Test] + public void ShowOfflineAddInsMarkedForUninstallation() + { + CreateAddIns(); + _addIn1.Enabled = true; + _addIn1.Action = AddInAction.Uninstall; + + // Empty list of NuGet repositories + _services.FakeRepositories.RegisteredPackageSources = new List(); + _services.FakeRepositories.RegisteredPackageRepositories = new List(); + FakeCorePackageRepository localRepository = new FakeCorePackageRepository(); + _services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository; + localRepository.ReturnedPackages = (new IPackage[] { }).AsQueryable(); + + // Simulate list of AddIns + _services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn1); + _services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn2); + + var viewModel = new InstalledAddInsViewModel(_services); + viewModel.ReadPackagesAndWaitForUpdate(); + + Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(2), "AddIn list must contain 2 items."); + + AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0]; + Assert.That(firstAddIn.Id, Is.EqualTo(_addIn1.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn"); + Assert.That(firstAddIn.Name, Is.EqualTo(_addIn1.Name), "Name of 1st AddIn"); + Assert.That(firstAddIn.Version, Is.EqualTo(_addIn1.Version), "Version of 1st AddIn"); + Assert.That(firstAddIn.IsInstalled, Is.True, "1st AddIn must be 'installed''"); + Assert.That(firstAddIn.IsOffline, Is.True, "1st AddIn must be 'offline'"); + Assert.That(firstAddIn.IsEnabled, Is.True, "1st AddIn must be 'enabled'"); + Assert.That(firstAddIn.IsUpdate, Is.False, "1st AddIn must not be 'update'"); + Assert.That(firstAddIn.IsAdded, Is.False, "1st AddIn must not be 'added'"); + Assert.That(firstAddIn.IsRemoved, Is.True, "1st AddIn must be 'removed'"); + Assert.That(firstAddIn.HasNuGetConnection, Is.False, "1st AddIn must not have 'NuGet connection'"); + + // Check 'externally referenced' status of both AddIns + // (simulating that IsAddInManifestIinExternalPath() returns true for 1st AddIn and false for 2nd) + _services.FakeSDAddInManagement.IsAddInManifestInExternalPathCallback = (addIn) => addIn == _addIn1; + Assert.That(viewModel.AddInPackages[0].IsExternallyReferenced, Is.True, "1st AddIn must be 'externally referenced'"); + Assert.That(viewModel.AddInPackages[1].IsExternallyReferenced, Is.False, "2nd AddIn must not be 'externally referenced'"); + } + + [Test] + public void ShowInstalledNuGetAddIns() + { + CreateAddIns(); + _addIn1.Enabled = true; + + // Create a fake package + FakePackage fakePackage = new FakePackage() + { + Id = _addIn1.Manifest.PrimaryIdentity, + Version = new SemanticVersion(_addIn1.Version), + Tags = SharpDevelopAddInTag + }; + _addIn1.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage.Id); + _addIn1.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage.Version.ToString()); + + // Empty list of NuGet repositories + _services.FakeRepositories.RegisteredPackageSources = new List(); + _services.FakeRepositories.RegisteredPackageRepositories = new List(); + FakeCorePackageRepository localRepository = new FakeCorePackageRepository(); + _services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository; + localRepository.ReturnedPackages = (new IPackage[] { fakePackage }).AsQueryable(); + + // Simulate list of AddIns + _services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn1); + _services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn2); + + var viewModel = new InstalledAddInsViewModel(_services); + viewModel.ReadPackagesAndWaitForUpdate(); + + Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(2), "AddIn list must contain 2 items."); + + AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0]; + Assert.That(firstAddIn.Id, Is.EqualTo(_addIn1.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn"); + Assert.That(firstAddIn.Name, Is.EqualTo(_addIn1.Name), "Name of 1st AddIn"); + Assert.That(firstAddIn.Version, Is.EqualTo(_addIn1.Version), "Version of 1st AddIn"); + Assert.That(firstAddIn.IsInstalled, Is.True, "1st AddIn must be 'installed''"); + Assert.That(firstAddIn.IsOffline, Is.True, "1st AddIn must be 'offline'"); + Assert.That(firstAddIn.IsEnabled, Is.True, "1st AddIn must be 'enabled'"); + Assert.That(firstAddIn.IsUpdate, Is.False, "1st AddIn must not be 'update'"); + Assert.That(firstAddIn.IsAdded, Is.False, "1st AddIn must not be 'added'"); + Assert.That(firstAddIn.IsRemoved, Is.False, "1st AddIn must not be 'removed'"); + Assert.That(firstAddIn.HasNuGetConnection, Is.True, "1st AddIn must have 'NuGet connection'"); + } + + [Test] + public void ShowNuGetAddInMarkedForInstallation() + { + CreateAddIns(); + _addIn1.Enabled = true; + + // Create a fake package + FakePackage fakePackage = new FakePackage() + { + Id = _addIn1.Manifest.PrimaryIdentity, + Version = new SemanticVersion(_addIn1.Version), + Tags = SharpDevelopAddInTag + }; + _addIn1.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage.Id); + _addIn1.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage.Version.ToString()); + + // Empty list of NuGet repositories + _services.FakeRepositories.RegisteredPackageSources = new List(); + _services.FakeRepositories.RegisteredPackageRepositories = new List(); + FakeCorePackageRepository localRepository = new FakeCorePackageRepository(); + _services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository; + localRepository.ReturnedPackages = (new IPackage[] { fakePackage }).AsQueryable(); + + // Simulate list of AddIns + _services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn1); + _services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn2); + + // Simulate marked AddIn (usually set up by AddInSetup service) + _services.FakeSetup.AddInsMarkedForInstallList.Add( + new ManagedAddIn(_addIn1) + { + IsTemporary = true, + InstallationSource = AddInInstallationSource.NuGetRepository + } + ); + + var viewModel = new InstalledAddInsViewModel(_services); + viewModel.ReadPackagesAndWaitForUpdate(); + + Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(2), "AddIn list must contain 2 items."); + + AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0]; + Assert.That(firstAddIn.Id, Is.EqualTo(_addIn1.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn"); + Assert.That(firstAddIn.Name, Is.EqualTo(_addIn1.Name), "Name of 1st AddIn"); + Assert.That(firstAddIn.Version, Is.EqualTo(_addIn1.Version), "Version of 1st AddIn must be the one of the update"); + Assert.That(firstAddIn.IsInstalled, Is.True, "1st AddIn must be 'installed''"); + Assert.That(firstAddIn.IsOffline, Is.True, "1st AddIn must be 'offline'"); + Assert.That(firstAddIn.IsEnabled, Is.True, "1st AddIn must be 'enabled'"); + Assert.That(firstAddIn.IsUpdate, Is.False, "1st AddIn must not be 'update'"); + Assert.That(firstAddIn.IsAdded, Is.True, "1st AddIn must be 'added'");; + Assert.That(firstAddIn.IsRemoved, Is.False, "1st AddIn must not be 'removed'"); + Assert.That(firstAddIn.HasNuGetConnection, Is.True, "1st AddIn must have 'NuGet connection'"); + } + + [Test] + public void ShowNuGetAddInMarkedForUpdate() + { + CreateAddIns(); + _addIn1.Enabled = true; + _addIn1_new.Enabled = true; + + // Create a fake package + FakePackage fakePackage = new FakePackage() + { + Id = _addIn1.Manifest.PrimaryIdentity, + Version = new SemanticVersion(_addIn1.Version), + Tags = SharpDevelopAddInTag + }; + FakePackage fakePackage_new = new FakePackage() + { + Id = _addIn1.Manifest.PrimaryIdentity, + Version = new SemanticVersion(_addIn1_new.Version), + Tags = SharpDevelopAddInTag + }; + _addIn1.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage.Id); + _addIn1.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage.Version.ToString()); + _addIn1_new.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage_new.Id); + _addIn1_new.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage_new.Version.ToString()); + + // Empty list of NuGet repositories + _services.FakeRepositories.RegisteredPackageSources = new List(); + _services.FakeRepositories.RegisteredPackageRepositories = new List(); + FakeCorePackageRepository localRepository = new FakeCorePackageRepository(); + _services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository; + localRepository.ReturnedPackages = (new IPackage[] { fakePackage }).AsQueryable(); + + // Simulate list of AddIns + _services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn1); + _services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn2); + + // Simulate marked AddIn (usually set up by AddInSetup service) + _services.FakeSetup.AddInsMarkedForInstallList.Add( + new ManagedAddIn(_addIn1_new) + { + IsUpdate = true, + OldVersion = _addIn1.Version, + InstallationSource = AddInInstallationSource.NuGetRepository, + IsTemporary = true + } + ); + + var viewModel = new InstalledAddInsViewModel(_services); + viewModel.ReadPackagesAndWaitForUpdate(); + + Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(2), "AddIn list must contain 2 items."); + + AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0]; + Assert.That(firstAddIn.Id, Is.EqualTo(_addIn1.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn"); + Assert.That(firstAddIn.Name, Is.EqualTo(_addIn1.Name), "Name of 1st AddIn"); + Assert.That(firstAddIn.Version, Is.EqualTo(_addIn1_new.Version), "Version of 1st AddIn must be the one of the update"); + Assert.That(firstAddIn.IsInstalled, Is.True, "1st AddIn must be 'installed''"); + Assert.That(firstAddIn.IsOffline, Is.True, "1st AddIn must be 'offline'"); + Assert.That(firstAddIn.IsEnabled, Is.True, "1st AddIn must be 'enabled'"); + Assert.That(firstAddIn.IsUpdate, Is.True, "1st AddIn must be 'update'"); + Assert.That(firstAddIn.IsAdded, Is.True, "1st AddIn must be 'added'"); + Assert.That(firstAddIn.IsRemoved, Is.False, "1st AddIn must not be 'removed'"); + Assert.That(firstAddIn.HasNuGetConnection, Is.True, "1st AddIn must have 'NuGet connection'"); + } + + [Test] + public void ShowNuGetAddInMarkedForUninstallation() + { + CreateAddIns(); + _addIn1.Enabled = true; + _addIn1.Action = AddInAction.Uninstall; + + // Create a fake package + FakePackage fakePackage = new FakePackage() + { + Id = _addIn1.Manifest.PrimaryIdentity, + Version = new SemanticVersion(_addIn1.Version), + Tags = SharpDevelopAddInTag + }; + _addIn1.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage.Id); + _addIn1.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage.Version.ToString()); + + // Empty list of NuGet repositories + _services.FakeRepositories.RegisteredPackageSources = new List(); + _services.FakeRepositories.RegisteredPackageRepositories = new List(); + FakeCorePackageRepository localRepository = new FakeCorePackageRepository(); + _services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository; + localRepository.ReturnedPackages = (new IPackage[] { fakePackage }).AsQueryable(); + + // Simulate list of AddIns + _services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn1); + _services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn2); + + var viewModel = new InstalledAddInsViewModel(_services); + viewModel.ReadPackagesAndWaitForUpdate(); + + Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(2), "AddIn list must contain 2 items."); + + AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0]; + Assert.That(firstAddIn.Id, Is.EqualTo(_addIn1.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn"); + Assert.That(firstAddIn.Name, Is.EqualTo(_addIn1.Name), "Name of 1st AddIn"); + Assert.That(firstAddIn.Version, Is.EqualTo(_addIn1.Version), "Version of 1st AddIn must be the one of the update"); + Assert.That(firstAddIn.IsInstalled, Is.True, "1st AddIn must be 'installed''"); + Assert.That(firstAddIn.IsOffline, Is.True, "1st AddIn must be 'offline'"); + Assert.That(firstAddIn.IsEnabled, Is.True, "1st AddIn must be 'enabled'"); + Assert.That(firstAddIn.IsUpdate, Is.False, "1st AddIn must not be 'update'"); + Assert.That(firstAddIn.IsAdded, Is.False, "1st AddIn must not be 'added'");; + Assert.That(firstAddIn.IsRemoved, Is.True, "1st AddIn must be 'removed'"); + Assert.That(firstAddIn.HasNuGetConnection, Is.True, "1st AddIn must have 'NuGet connection'"); + } } }