From 713fcb745fa860799aa93daae9687ac096c8923f Mon Sep 17 00:00:00 2001 From: mrward Date: Sat, 2 Apr 2011 13:00:30 +0100 Subject: [PATCH] Use NuGet update methods when updating a package. --- .../Project/PackageManagement.csproj | 2 + .../Design/FakePackageManagementService.cs | 11 +++ .../Project/Src/IPackageManagementService.cs | 1 + .../Src/ISharpDevelopPackageManager.cs | 1 + .../Project/Src/PackageManagementService.cs | 12 +++ .../Project/Src/PackageUpdatesViewModel.cs | 18 +++- .../Project/Src/PackageViewModel.cs | 10 ++- .../Project/Src/PackageViewModelFactory.cs | 24 +++--- .../Project/Src/SharpDevelopPackageManager.cs | 19 +++++ .../Project/Src/UpdatedPackageViewModel.cs | 32 +++++++ .../Src/UpdatedPackageViewModelFactory.cs | 28 +++++++ .../Test/PackageManagement.Tests.csproj | 3 + .../Test/Src/Helpers/FakePackageManager.cs | 9 ++ .../Src/Helpers/TestableProjectManager.cs | 13 +++ .../TestableUpdatedPackageViewModel.cs | 68 +++++++++++++++ .../Test/Src/Helpers/UpdatePackageHelper.cs | 41 +++++++++ .../Test/Src/PackageManagementServiceTests.cs | 83 ++++++++++++++++++- .../Src/SharpDevelopPackageManagerTests.cs | 56 ++++++++++++- .../Test/Src/UpdatedPackageViewModelTests.cs | 58 +++++++++++++ 19 files changed, 470 insertions(+), 19 deletions(-) create mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs create mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModelFactory.cs create mode 100644 src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs create mode 100644 src/AddIns/Misc/PackageManagement/Test/Src/Helpers/UpdatePackageHelper.cs create mode 100644 src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackageViewModelTests.cs diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index cee05593ff..a29704bfb4 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -159,6 +159,8 @@ + + diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs index 9b9a93348f..2a8dc37feb 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs @@ -130,5 +130,16 @@ namespace ICSharpCode.PackageManagement.Design public IPackageRepository RecentPackageRepository { get { return FakeRecentPackageRepository; } } + + public IPackageRepository RepositoryPassedToUpdatePackage; + public IPackage PackagePassedToUpdatePackage; + public IEnumerable PackageOperationsPassedToUpdatePackage; + + public void UpdatePackage(IPackageRepository repository, IPackage package, IEnumerable operations) + { + RepositoryPassedToUpdatePackage = repository; + PackagePassedToUpdatePackage = package; + PackageOperationsPassedToUpdatePackage = operations; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs index 6cae4e685e..8a7072dcf5 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementService.cs @@ -19,6 +19,7 @@ namespace ICSharpCode.PackageManagement void InstallPackage(IPackageRepository repository, IPackage package, IEnumerable operations); void UninstallPackage(IPackageRepository repository, IPackage package); + void UpdatePackage(IPackageRepository repository, IPackage package, IEnumerable operations); PackageManagementOptions Options { get; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs index 1e676c48f0..ba1d6ba66d 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageManager.cs @@ -13,5 +13,6 @@ namespace ICSharpCode.PackageManagement void InstallPackage(IPackage package); void InstallPackage(IPackage package, IEnumerable operations); void UninstallPackage(IPackage package); + void UpdatePackage(IPackage package, IEnumerable operations); } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs index a6d895c1b8..11e9f83d66 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementService.cs @@ -187,5 +187,17 @@ namespace ICSharpCode.PackageManagement { return packageRepositoryCache.CreateRepository(source); } + + public void UpdatePackage( + IPackageRepository repository, + IPackage package, + IEnumerable operations) + { + ISharpDevelopPackageManager packageManager = CreatePackageManager(repository); + packageManager.UpdatePackage(package, operations); + projectService.RefreshProjectBrowser(); + RecentPackageRepository.AddPackage(package); + OnPackageInstalled(); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageUpdatesViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageUpdatesViewModel.cs index c0a4c1dd08..2bdbe645d1 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageUpdatesViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageUpdatesViewModel.cs @@ -21,7 +21,23 @@ namespace ICSharpCode.PackageManagement IPackageManagementService packageManagementService, IMessageReporter messageReporter, ITaskFactory taskFactory) - : base(packageManagementService, messageReporter, taskFactory) + : this( + packageManagementService, + messageReporter, + new LicenseAcceptanceService(), + taskFactory) + { + } + + public PackageUpdatesViewModel( + IPackageManagementService packageManagementService, + IMessageReporter messageReporter, + ILicenseAcceptanceService licenseAcceptanceService, + ITaskFactory taskFactory) + : base( + packageManagementService, + new UpdatedPackageViewModelFactory(packageManagementService, licenseAcceptanceService, messageReporter), + taskFactory) { this.packageManagementService = packageManagementService; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs index 5eb78c2d28..a2c5411696 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs @@ -297,10 +297,18 @@ namespace ICSharpCode.PackageManagement void InstallPackage() { - packageManagementService.InstallPackage(sourcePackageRepository, package, packageOperations); + InstallPackage(sourcePackageRepository, package, packageOperations); OnPropertyChanged(model => model.IsAdded); } + protected virtual void InstallPackage( + IPackageRepository sourcePackageRepository, + IPackage package, + IEnumerable packageOperations) + { + packageManagementService.InstallPackage(sourcePackageRepository, package, packageOperations); + } + void ReportError(Exception ex) { messageReporter.ShowErrorMessage(ex.Message); diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs index 09eede7aec..83709a2141 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs @@ -8,27 +8,27 @@ namespace ICSharpCode.PackageManagement { public class PackageViewModelFactory : IPackageViewModelFactory { - IPackageManagementService packageManagementService; - ILicenseAcceptanceService licenseAcceptanceService; - IMessageReporter messageReporter; - public PackageViewModelFactory( IPackageManagementService packageManagementService, ILicenseAcceptanceService licenseAcceptanceService, - IMessageReporter messageReport) + IMessageReporter messageReporter) { - this.packageManagementService = packageManagementService; - this.licenseAcceptanceService = licenseAcceptanceService; - this.messageReporter = messageReport; + this.PackageManagementService = packageManagementService; + this.LicenseAcceptanceService = licenseAcceptanceService; + this.MessageReporter = messageReporter; } - public PackageViewModel CreatePackageViewModel(IPackage package) + public virtual PackageViewModel CreatePackageViewModel(IPackage package) { return new PackageViewModel( package, - packageManagementService, - licenseAcceptanceService, - messageReporter); + PackageManagementService, + LicenseAcceptanceService, + MessageReporter); } + + protected IPackageManagementService PackageManagementService { get; private set; } + protected ILicenseAcceptanceService LicenseAcceptanceService { get; private set; } + protected IMessageReporter MessageReporter { get; private set; } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs index e09cedbc50..5d2edf0122 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManager.cs @@ -91,5 +91,24 @@ namespace ICSharpCode.PackageManagement ProjectManager.RemovePackageReference(package.Id, forceRemove, removeDependencies); base.UninstallPackage(package, forceRemove, removeDependencies); } + + public void UpdatePackage(IPackage package, IEnumerable operations) + { + foreach (PackageOperation operation in operations) { + Execute(operation); + } + UpdatePackageReference(package); + } + + void UpdatePackageReference(IPackage package) + { + bool updateDependencies = true; + UpdatePackageReference(package, updateDependencies); + } + + void UpdatePackageReference(IPackage package, bool updateDependencies) + { + ProjectManager.UpdatePackageReference(package.Id, package.Version, updateDependencies); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs new file mode 100644 index 0000000000..d5e99bf7db --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs @@ -0,0 +1,32 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Collections.Generic; +using NuGet; + +namespace ICSharpCode.PackageManagement +{ + public class UpdatedPackageViewModel : PackageViewModel + { + IPackageManagementService packageManagementService; + + public UpdatedPackageViewModel( + IPackage package, + IPackageManagementService packageManagementService, + ILicenseAcceptanceService licenseAcceptanceService, + IMessageReporter messageReporter) + : base(package, packageManagementService, licenseAcceptanceService, messageReporter) + { + this.packageManagementService = packageManagementService; + } + + protected override void InstallPackage( + IPackageRepository sourcePackageRepository, + IPackage package, + IEnumerable packageOperations) + { + packageManagementService.UpdatePackage(sourcePackageRepository, package, packageOperations); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModelFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModelFactory.cs new file mode 100644 index 0000000000..524711d7b5 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModelFactory.cs @@ -0,0 +1,28 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using NuGet; + +namespace ICSharpCode.PackageManagement +{ + public class UpdatedPackageViewModelFactory : PackageViewModelFactory + { + public UpdatedPackageViewModelFactory( + IPackageManagementService packageManagementService, + ILicenseAcceptanceService licenseAcceptanceService, + IMessageReporter messageReporter) + : base(packageManagementService, licenseAcceptanceService, messageReporter) + { + } + + public override PackageViewModel CreatePackageViewModel(IPackage package) + { + return new UpdatedPackageViewModel( + package, + PackageManagementService, + LicenseAcceptanceService, + MessageReporter); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj index debd8ebeda..d8f1fe9856 100644 --- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj +++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj @@ -106,6 +106,7 @@ + @@ -113,6 +114,7 @@ + @@ -136,6 +138,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManager.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManager.cs index d4945284a8..82f9c513f3 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManager.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManager.cs @@ -115,6 +115,15 @@ namespace PackageManagement.Tests.Helpers throw new NotImplementedException(); } + public IPackage PackagePassedToUpdatePackage; + public IEnumerable PackageOperationsPassedToUpdatePackage; + + public void UpdatePackage(IPackage package, IEnumerable operations) + { + PackagePassedToUpdatePackage = package; + PackageOperationsPassedToUpdatePackage = operations; + } + public void InstallPackage(IPackage package, IEnumerable operations) { LoggerSetBeforeInstallPackageCalled = Logger; diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProjectManager.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProjectManager.cs index a9d4591c1e..9901ce686a 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProjectManager.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProjectManager.cs @@ -17,6 +17,9 @@ namespace PackageManagement.Tests.Helpers public bool ForcePassedToRemovePackageReference; public bool RemoveDependenciesPassedToRemovePackageReference; + public IPackage PackagePassedToUpdatePackageReference; + public bool UpdateDependenciesPassedToUpdatePackageReference; + public FakePackageRepository FakeLocalRepository { get { return LocalRepository as FakePackageRepository; } } @@ -50,5 +53,15 @@ namespace PackageManagement.Tests.Helpers ForcePassedToRemovePackageReference = force; RemoveDependenciesPassedToRemovePackageReference = removeDependencies; } + + public override void UpdatePackageReference(string packageId, Version version, bool updateDependencies) + { + var package = new FakePackage(); + package.Id = packageId; + package.Version = version; + + PackagePassedToUpdatePackageReference = package; + UpdateDependenciesPassedToUpdatePackageReference = updateDependencies; + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs new file mode 100644 index 0000000000..17a0ec778a --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs @@ -0,0 +1,68 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using ICSharpCode.PackageManagement; +using ICSharpCode.PackageManagement.Design; +using NuGet; + +namespace PackageManagement.Tests.Helpers +{ + public class TestableUpdatedPackageViewModel : UpdatedPackageViewModel + { + public FakePackageOperationResolver FakePackageOperationResolver = new FakePackageOperationResolver(); + public FakePackageRepository FakeSourcePackageRepository; + public FakePackageManagementService FakePackageManagementService; + public FakeLicenseAcceptanceService FakeLicenseAcceptanceService; + public FakeMessageReporter FakeMessageReporter; + public FakePackage FakePackage; + public ILogger LoggerUsedWhenCreatingPackageResolver; + public string PackageViewModelAddingPackageMessageFormat = String.Empty; + public string PackageViewModelRemovingPackageMessageFormat = String.Empty; + + public TestableUpdatedPackageViewModel() + : this(new FakePackageManagementService()) + { + } + + public TestableUpdatedPackageViewModel(FakePackageManagementService packageManagementService) + : this( + new FakePackage(), + packageManagementService, + new FakeLicenseAcceptanceService(), + new FakeMessageReporter()) + { + } + + public TestableUpdatedPackageViewModel( + FakePackage package, + FakePackageManagementService packageManagementService, + FakeLicenseAcceptanceService licenseAcceptanceService, + FakeMessageReporter messageReporter) + : base( + package, + packageManagementService, + licenseAcceptanceService, + messageReporter) + { + this.FakePackage = package; + this.FakePackageManagementService = packageManagementService; + this.FakeLicenseAcceptanceService = licenseAcceptanceService; + this.FakeMessageReporter = messageReporter; + this.FakeSourcePackageRepository = FakePackageManagementService.FakeActivePackageRepository; + } + + protected override IPackageOperationResolver CreatePackageOperationResolver(ILogger logger) + { + return FakePackageOperationResolver; + } + + protected override string AddingPackageMessageFormat { + get { return PackageViewModelAddingPackageMessageFormat; } + } + + protected override string RemovingPackageMessageFormat { + get { return PackageViewModelRemovingPackageMessageFormat; } + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/UpdatePackageHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/UpdatePackageHelper.cs new file mode 100644 index 0000000000..455dddfc7a --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/UpdatePackageHelper.cs @@ -0,0 +1,41 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Collections.Generic; +using ICSharpCode.PackageManagement; +using ICSharpCode.PackageManagement.Design; +using NuGet; + +namespace PackageManagement.Tests.Helpers +{ + public class UpdatePackageHelper + { + PackageManagementService packageManagementService; + + public FakePackage TestPackage = new FakePackage() { + Id = "Test" + }; + + public FakePackageRepository PackageRepository = new FakePackageRepository(); + public List PackageOperations = new List(); + + public UpdatePackageHelper(PackageManagementService packageManagementService) + { + this.packageManagementService = packageManagementService; + } + + public void UpdateTestPackage() + { + packageManagementService.UpdatePackage(PackageRepository, TestPackage, PackageOperations); + } + + public FakePackage AddPackageInstallOperation() + { + var package = new FakePackage("Package to install"); + var operation = new PackageOperation(package, PackageAction.Install); + PackageOperations.Add(operation); + return package; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs index bdce072e05..e02b542c8a 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementServiceTests.cs @@ -24,6 +24,7 @@ namespace PackageManagement.Tests FakePackageManagementProjectService fakeProjectService; TestableProject testProject; InstallPackageHelper installPackageHelper; + UpdatePackageHelper updatePackageHelper; FakePackageManagementOutputMessagesView fakeOutputMessagesView; void CreatePackageSources() @@ -53,6 +54,7 @@ namespace PackageManagement.Tests fakeOutputMessagesView); installPackageHelper = new InstallPackageHelper(packageManagementService); + updatePackageHelper = new UpdatePackageHelper(packageManagementService); } [Test] @@ -203,7 +205,7 @@ namespace PackageManagement.Tests } [Test] - public void PackageInstalled_PackageIsInstalled_EventFiresAfterPackageInstalled() + public void InstallPackage_PackageIsInstalled_EventFiresAfterPackageInstalled() { CreatePackageManagementService(); @@ -217,7 +219,7 @@ namespace PackageManagement.Tests } [Test] - public void PackageUninstalled_PackageIsUninstalled_EventFiresAfterPackageUninstalled() + public void UninstallPackage_PackageIsUninstalled_EventFiresAfterPackageUninstalled() { CreatePackageManagementService(); @@ -484,5 +486,82 @@ namespace PackageManagement.Tests PackageCollectionAssert.AreEqual(expectedPackages, recentPackages); } + + [Test] + public void UpdatePackage_PackageAndRepositoryPassed_PackageInstalled() + { + CreatePackageManagementService(); + updatePackageHelper.UpdateTestPackage(); + + var expectedPackage = updatePackageHelper.TestPackage; + var actualPackage = fakePackageManagerFactory.FakePackageManager.PackagePassedToUpdatePackage; + + Assert.AreEqual(expectedPackage, actualPackage); + } + + [Test] + public void UpdatePackage_PackageAndRepositoryPassed_RepositoryUsedToCreatePackageManager() + { + CreatePackageManagementService(); + updatePackageHelper.UpdateTestPackage(); + + var expectedRepository = updatePackageHelper.PackageRepository; + var actualRepository = fakePackageManagerFactory.PackageRepositoryPassedToCreatePackageManager; + + Assert.AreEqual(expectedRepository, actualRepository); + } + + [Test] + public void UpdatePackage_PackageAndRepositoryPassed_PackageOperationsUsedToUpdatePackage() + { + CreatePackageManagementService(); + updatePackageHelper.UpdateTestPackage(); + + var expectedOperations = updatePackageHelper.PackageOperations; + var actualOperations = fakePackageManagerFactory.FakePackageManager.PackageOperationsPassedToUpdatePackage; + + Assert.AreEqual(expectedOperations, actualOperations); + } + + [Test] + public void UpdatePackage_PackageAndRepositoryPassed_ProjectBrowserIsRefreshed() + { + CreatePackageManagementService(); + updatePackageHelper.UpdateTestPackage(); + + bool refreshed = fakeProjectService.IsRefreshProjectBrowserCalled; + + Assert.IsTrue(refreshed); + } + + [Test] + public void UpdatePackage_PackageAndRepositoryPassed_PackageUpdateIsAddedToRecentPackagesRepository() + { + CreatePackageManagementService(); + updatePackageHelper.UpdateTestPackage(); + + var recentPackages = packageManagementService.RecentPackageRepository.GetPackages(); + + var expectedPackages = new FakePackage[] { + updatePackageHelper.TestPackage + }; + + PackageCollectionAssert.AreEqual(expectedPackages, recentPackages); + } + + [Test] + public void UpdatePackage_PackageAndRepositoryPassed_PackageInstalledEventIsFired() + { + CreatePackageManagementService(); + + IPackage package = null; + packageManagementService.PackageInstalled += (sender, e) => { + package = fakePackageManagerFactory.FakePackageManager.PackagePassedToUpdatePackage; + }; + updatePackageHelper.UpdateTestPackage(); + + Assert.AreEqual(installPackageHelper.TestPackage, package); + + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs index 05a2128f42..bb49d4a1df 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/SharpDevelopPackageManagerTests.cs @@ -92,7 +92,7 @@ namespace PackageManagement.Tests return package; } - FakePackage InstallPackageWithOnePackageOperation(PackageOperation operation) + FakePackage InstallPackageWithPackageOperations(PackageOperation operation) { var operations = new PackageOperation[] { operation @@ -157,6 +157,24 @@ namespace PackageManagement.Tests return new PackageOperation(package, PackageAction.Install); } + FakePackage UpdatePackageWithNoPackageOperations() + { + FakePackage package = CreateFakePackage(); + var operations = new List(); + packageManager.UpdatePackage(package, operations); + return package; + } + + FakePackage UpdatePackageWithPackageOperations(PackageOperation operation) + { + var operations = new PackageOperation[] { + operation + }; + FakePackage package = CreateFakePackage(); + packageManager.UpdatePackage(package, operations); + return package; + } + [Test] public void ProjectManager_InstanceCreated_SourceRepositoryIsSharedRepositoryPassedToPackageManager() { @@ -242,8 +260,8 @@ namespace PackageManagement.Tests CreateTestableProjectManager(); PackageOperation operation = CreateOneInstallPackageOperation(); - InstallPackageWithOnePackageOperation(operation); - + InstallPackageWithPackageOperations(operation); + Assert.AreEqual(operation.Package, fakeSolutionSharedRepository.FirstPackageAdded); } @@ -358,5 +376,37 @@ namespace PackageManagement.Tests Assert.AreEqual("Test", packageRemovedFromProject.Id); } + + [Test] + public void UpdatePackage_PackageInstanceAndNoPackageOperationsPassed_UpdatesReferenceInProject() + { + CreatePackageManager(); + CreateTestableProjectManager(); + var package = UpdatePackageWithNoPackageOperations(); + + Assert.AreEqual(package, testableProjectManager.PackagePassedToUpdatePackageReference); + } + + [Test] + public void UpdatePackage_PackageInstanceAndNoPackageOperationsPassed_UpdatesDependenciesInProject() + { + CreatePackageManager(); + CreateTestableProjectManager(); + var package = UpdatePackageWithNoPackageOperations(); + + Assert.IsTrue(testableProjectManager.UpdateDependenciesPassedToUpdatePackageReference); + } + + [Test] + public void UpdatePackage_PackageInstanceAndOneInstallPackageOperationPassed_PackageDefinedInOperationIsInstalledInLocalRepository() + { + CreatePackageManager(); + CreateTestableProjectManager(); + + PackageOperation operation = CreateOneInstallPackageOperation(); + UpdatePackageWithPackageOperations(operation); + + Assert.AreEqual(operation.Package, fakeSolutionSharedRepository.FirstPackageAdded); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackageViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackageViewModelTests.cs new file mode 100644 index 0000000000..68b0489b41 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackageViewModelTests.cs @@ -0,0 +1,58 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using ICSharpCode.PackageManagement.Design; +using NUnit.Framework; +using PackageManagement.Tests.Helpers; + +namespace PackageManagement.Tests +{ + [TestFixture] + public class UpdatedPackageViewModelTests + { + TestableUpdatedPackageViewModel viewModel; + FakePackageManagementService fakePackageManagementService; + FakePackageRepository sourcePackageRepository; + + void CreateViewModel() + { + viewModel = new TestableUpdatedPackageViewModel(); + fakePackageManagementService = viewModel.FakePackageManagementService; + sourcePackageRepository = viewModel.FakeSourcePackageRepository; + } + + [Test] + public void AddPackage_PackageAddedSuccessfully_PackageUpdatedUsingSourcePackageRepository() + { + CreateViewModel(); + viewModel.AddPackage(); + + Assert.AreEqual(sourcePackageRepository, fakePackageManagementService.RepositoryPassedToUpdatePackage); + } + + [Test] + public void AddPackage_PackageAddedSuccessfully_PackageUpdated() + { + CreateViewModel(); + viewModel.AddPackage(); + + var expectedPackage = viewModel.FakePackage; + var actualPackage = fakePackageManagementService.PackagePassedToUpdatePackage; + + Assert.AreEqual(expectedPackage, actualPackage); + } + + [Test] + public void AddPackage_PackageAddedSuccessfully_PackageUpdatedUsingPackageOperations() + { + CreateViewModel(); + viewModel.AddPackage(); + + var expectedOperations = viewModel.FakePackageOperationResolver.PackageOperations; + var actualOperations = fakePackageManagementService.PackageOperationsPassedToUpdatePackage; + + Assert.AreEqual(expectedOperations, actualOperations); + } + } +}