#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

818 lines
29 KiB

// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using NuGet;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests
{
[TestFixture]
public class UpdatedPackagesViewModelTests
{
UpdatedPackagesViewModel viewModel;
FakePackageManagementSolution solution;
FakeTaskFactory taskFactory;
FakeRegisteredPackageRepositories registeredPackageRepositories;
ExceptionThrowingPackageManagementSolution exceptionThrowingSolution;
FakePackageViewModelFactory packageViewModelFactory;
FakePackageManagementEvents fakePackageManagementEvents;
UpdatedPackageViewModelFactory updatedPackageViewModelFactory;
PackageManagementEvents packageManagementEvents;
void CreateViewModel()
{
CreateSolution();
CreateViewModel(solution);
}
void CreateSolution()
{
solution = new FakePackageManagementSolution();
solution.FakeActiveMSBuildProject = ProjectHelper.CreateTestProject();
}
void NoProjectsSelected()
{
solution.NoProjectsSelected();
}
void CreateViewModel(FakePackageManagementSolution solution)
{
CreateRegisteredPackageRepositories();
CreateViewModel(solution, registeredPackageRepositories);
}
void CreateViewModel(FakePackageActionRunner actionRunner)
{
CreateSolution();
CreateRegisteredPackageRepositories();
CreateViewModel(solution, registeredPackageRepositories, actionRunner);
}
void CreateViewModel(FakePackageManagementSolution solution, FakeRegisteredPackageRepositories registeredPackageRepositories)
{
packageViewModelFactory = new FakePackageViewModelFactory { FakeSolution = solution };
CreateViewModel(solution, registeredPackageRepositories, packageViewModelFactory);
}
void CreateViewModelWithRealPackageManagementEvents()
{
CreateSolution();
CreateRegisteredPackageRepositories();
packageManagementEvents = new PackageManagementEvents();
var actionRunner = new FakePackageActionRunner();
var packageViewModelFactory = new PackageViewModelFactory(solution, packageManagementEvents, actionRunner);
updatedPackageViewModelFactory = new UpdatedPackageViewModelFactory(packageViewModelFactory);
taskFactory = new FakeTaskFactory();
viewModel = new UpdatedPackagesViewModel(
solution,
packageManagementEvents,
registeredPackageRepositories,
updatedPackageViewModelFactory,
taskFactory);
}
void CreateViewModel(
FakePackageManagementSolution solution,
FakeRegisteredPackageRepositories registeredPackageRepositories,
FakePackageActionRunner actionRunner)
{
packageViewModelFactory = new FakePackageViewModelFactory {
FakeSolution = solution,
FakeActionRunner = actionRunner
};
CreateViewModel(solution, registeredPackageRepositories, packageViewModelFactory);
}
void CreateViewModel(
FakePackageManagementSolution solution,
FakeRegisteredPackageRepositories registeredPackageRepositories,
FakePackageViewModelFactory packageViewModelFactory)
{
taskFactory = new FakeTaskFactory();
this.packageViewModelFactory = packageViewModelFactory;
fakePackageManagementEvents = packageViewModelFactory.FakePackageManagementEvents;
updatedPackageViewModelFactory = new UpdatedPackageViewModelFactory(packageViewModelFactory);
viewModel = new UpdatedPackagesViewModel(
solution,
packageManagementEvents,
registeredPackageRepositories,
updatedPackageViewModelFactory,
taskFactory);
}
void CreateRegisteredPackageRepositories()
{
registeredPackageRepositories = new FakeRegisteredPackageRepositories();
}
void CreateViewModel(FakeRegisteredPackageRepositories registeredPackageRepositories)
{
CreateSolution();
CreateViewModel(solution, registeredPackageRepositories);
}
void CreateExceptionThrowingSolution()
{
exceptionThrowingSolution = new ExceptionThrowingPackageManagementSolution();
exceptionThrowingSolution.FakeActiveMSBuildProject = ProjectHelper.CreateTestProject();
}
void CompleteReadPackagesTask()
{
taskFactory.ExecuteAllFakeTasks();
}
FakePackage AddPackageToLocalRepository(string version)
{
return AddPackageToLocalRepository("Test", version);
}
FakePackage AddPackageToLocalRepository(string id, string version)
{
FakePackage package = FakePackage.CreatePackageWithVersion(id, version);
solution.FakeProjectToReturnFromGetProject.FakePackages.Add(package);
return package;
}
FakePackage AddPackageToActiveRepository(string id, string version)
{
return registeredPackageRepositories.AddFakePackageWithVersionToActiveRepository(id, version);
}
FakePackage AddPackageToSolution(string id, string version)
{
FakePackage package = FakePackage.CreatePackageWithVersion(version);
package.Id = id;
solution.FakeInstalledPackages.Add(package);
return package;
}
void AddOnePackageSourceToRegisteredSources()
{
registeredPackageRepositories.ClearPackageSources();
registeredPackageRepositories.AddOnePackageSource();
registeredPackageRepositories.HasMultiplePackageSources = false;
}
void AddTwoPackageSourcesToRegisteredSources()
{
var expectedPackageSources = new PackageSource[] {
new PackageSource("http://first.com", "First"),
new PackageSource("http://second.com", "Second")
};
AddPackageSourcesToRegisteredSources(expectedPackageSources);
registeredPackageRepositories.HasMultiplePackageSources = true;
}
void AddPackageSourcesToRegisteredSources(PackageSource[] sources)
{
registeredPackageRepositories.ClearPackageSources();
registeredPackageRepositories.AddPackageSources(sources);
}
UpdatePackagesAction GetUpdatePackagesActionRun()
{
return packageViewModelFactory
.FakeActionRunner
.ActionPassedToRun as UpdatePackagesAction;
}
UpdateSolutionPackagesAction GetUpdateSolutionPackagesActionRun()
{
return packageViewModelFactory
.FakeActionRunner
.ActionPassedToRun as UpdateSolutionPackagesAction;
}
void RunUpdateAllPackagesCommand()
{
viewModel.UpdateAllPackagesCommand.Execute(null);
}
void ViewModelHasTwoPackagesThatCanBeUpdatedAfterReadingPackages()
{
AddPackageToLocalRepository("First", "1.0.0.0");
AddPackageToActiveRepository("First", "1.1.0.0");
AddPackageToLocalRepository("Second", "1.0.0.0");
AddPackageToActiveRepository("Second", "1.1.0.0");
viewModel.ReadPackages();
CompleteReadPackagesTask();
}
void ViewModelHasTwoPackagesInSolutionThatCanBeUpdatedAfterReadingPackages()
{
AddPackageToSolution("First", "1.0.0.0");
AddPackageToActiveRepository("First", "1.1.0.0");
AddPackageToSolution("Second", "1.0.0.0");
AddPackageToActiveRepository("Second", "1.1.0.0");
viewModel.ReadPackages();
CompleteReadPackagesTask();
}
FakePackageManagementProject AddProjectToSolution()
{
return solution.AddFakeProject("MyProject");
}
[Test]
public void ReadPackages_OneNewerPackageVersionAvailable_NewerPackageVersionDisplayed()
{
CreateViewModel();
AddPackageToLocalRepository("Test", "1.0.0.0");
FakePackage newerPackage = AddPackageToActiveRepository("Test", "1.1.0.0");
viewModel.ReadPackages();
CompleteReadPackagesTask();
var expectedPackages = new FakePackage[] {
newerPackage
};
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
}
[Test]
public void ReadPackages_TwoPackagesInSourceRepositoryAndOneNewerPackageVersionAvailable_NewerPackageVersionDisplayed()
{
CreateViewModel();
AddPackageToLocalRepository("Test", "1.0.0.0");
AddPackageToActiveRepository("Test", "1.0.0.0");
FakePackage newerPackage = AddPackageToActiveRepository("Test", "1.1.0.0");
viewModel.ReadPackages();
CompleteReadPackagesTask();
var expectedPackages = new FakePackage[] {
newerPackage
};
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
}
[Test]
public void ReadPackages_OneNewerPackageVersionAvailable_ProjectNotCreatedByBackgroundThread()
{
CreateViewModel();
AddPackageToLocalRepository("Test", "1.0.0.0");
FakePackage newerPackage = AddPackageToActiveRepository("Test", "1.1.0.0");
viewModel.ReadPackages();
registeredPackageRepositories.FakeAggregateRepository = null;
CompleteReadPackagesTask();
Assert.AreEqual(1, viewModel.PackageViewModels.Count);
}
[Test]
public void ReadPackages_GetProjectThrowsException_ErrorMessageFromExceptionNotOverriddenByReadPackagesCall()
{
CreateExceptionThrowingSolution();
exceptionThrowingSolution.ExceptionToThrowWhenGetProjectCalled =
new Exception("Test");
CreateViewModel(exceptionThrowingSolution);
viewModel.ReadPackages();
ApplicationException ex = Assert.Throws<ApplicationException>(() => CompleteReadPackagesTask());
Assert.AreEqual("Test", ex.Message);
}
[Test]
public void ReadPackages_OnlySolutionSelectedAndOneNewerPackageVersionAvailable_NewerPackageVersionDisplayed()
{
CreateSolution();
NoProjectsSelected();
CreateViewModel(solution);
AddPackageToSolution("Test", "1.0.0.0");
FakePackage newerPackage = AddPackageToActiveRepository("Test", "1.1.0.0");
viewModel.ReadPackages();
CompleteReadPackagesTask();
var expectedPackages = new FakePackage[] {
newerPackage
};
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
}
[Test]
public void ReadPackages_SolutionInitiallySelectedWithOneNewerPackageAndProjectSelectedBeforeSecondReadOfPackages_NewerPackageVersionDisplayed()
{
CreateSolution();
NoProjectsSelected();
CreateViewModel(solution);
AddPackageToSolution("Test", "1.0.0.0");
FakePackage newerPackage = AddPackageToActiveRepository("Test", "1.1.0.0");
viewModel.ReadPackages();
CompleteReadPackagesTask();
TestableProject msbuildProject = ProjectHelper.CreateTestProject("Test");
solution.FakeActiveMSBuildProject = msbuildProject;
solution.FakeActiveProject = new FakePackageManagementProject("Test");
viewModel.ReadPackages();
CompleteReadPackagesTask();
var expectedPackages = new FakePackage[] {
newerPackage
};
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
}
[Test]
public void ReadPackages_PrereleasePackageVersionAvailable_NoUpdatesFound()
{
CreateViewModel();
AddPackageToLocalRepository("Test", "1.0.0");
FakePackage newerPackage = AddPackageToActiveRepository("Test", "1.1.0-alpha");
viewModel.ReadPackages();
CompleteReadPackagesTask();
Assert.AreEqual(0, viewModel.PackageViewModels.Count);
}
[Test]
public void ReadPackages_PrereleasePackageVersionAvailableAndIncludePrereleaseIsTrue_UpdateFound()
{
CreateViewModel();
viewModel.IncludePrerelease = true;
AddPackageToLocalRepository("Test", "1.0.0");
FakePackage newerPackage = AddPackageToActiveRepository("Test", "1.1.0-alpha");
var expectedPackages = new FakePackage[] { newerPackage };
viewModel.ReadPackages();
CompleteReadPackagesTask();
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
}
[Test]
public void ShowSources_TwoPackageSources_ReturnsTrue()
{
CreateRegisteredPackageRepositories();
AddTwoPackageSourcesToRegisteredSources();
CreateViewModel(registeredPackageRepositories);
Assert.IsTrue(viewModel.ShowPackageSources);
}
[Test]
public void ShowPackageSources_OnePackageSources_ReturnsTrue()
{
CreateRegisteredPackageRepositories();
AddOnePackageSourceToRegisteredSources();
CreateViewModel(registeredPackageRepositories);
Assert.IsTrue(viewModel.ShowPackageSources);
}
[Test]
public void ShowUpdateAllPackages_DefaultValue_ReturnsTrue()
{
CreateViewModel();
bool result = viewModel.ShowUpdateAllPackages;
Assert.IsTrue(result);
}
[Test]
public void IsUpdateAllPackagesEnabled_NoPackages_ReturnsFalse()
{
CreateViewModel();
bool enabled = viewModel.IsUpdateAllPackagesEnabled;
Assert.IsFalse(enabled);
}
[Test]
public void IsUpdateAllPackagesEnabled_TwoNewerPackagesAvailable_ReturnsTrue()
{
CreateViewModel();
ViewModelHasTwoPackagesThatCanBeUpdatedAfterReadingPackages();
bool enabled = viewModel.IsUpdateAllPackagesEnabled;
Assert.IsTrue(enabled);
}
[Test]
public void IsUpdateAllPackagesEnabled_OneNewerPackageAvailable_ReturnsFalse()
{
CreateViewModel();
AddPackageToLocalRepository("First", "1.0.0.0");
AddPackageToActiveRepository("First", "1.1.0.0");
viewModel.ReadPackages();
CompleteReadPackagesTask();
bool enabled = viewModel.IsUpdateAllPackagesEnabled;
Assert.IsFalse(enabled);
}
[Test]
public void UpdateAllPackagesCommand_TwoPackagesToBeUpdated_BothPackagesUpdated()
{
CreateViewModel();
AddPackageToLocalRepository("First", "1.0.0.0");
FakePackage firstUpdatedPackage = AddPackageToActiveRepository("First", "1.1.0.0");
AddPackageToLocalRepository("Second", "1.0.0.0");
FakePackage secondUpdatedPackage = AddPackageToActiveRepository("Second", "1.1.0.0");
viewModel.ReadPackages();
CompleteReadPackagesTask();
RunUpdateAllPackagesCommand();
UpdatePackagesAction action = GetUpdatePackagesActionRun();
IPackage firstPackage = action.Packages.FirstOrDefault(p => p.Id == "First");
IPackage secondPackage = action.Packages.FirstOrDefault(p => p.Id == "Second");
Assert.AreEqual(firstUpdatedPackage, firstPackage);
Assert.AreEqual(secondUpdatedPackage, secondPackage);
Assert.AreEqual(2, action.Packages.Count());
}
[Test]
public void UpdateAllPackagesCommand_ExceptionThrownWhenUpdatingAllPackages_ExceptionReported()
{
var actionRunner = new ExceptionThrowingPackageActionRunner();
CreateViewModel(actionRunner);
ViewModelHasTwoPackagesThatCanBeUpdatedAfterReadingPackages();
var exception = new Exception("test");
actionRunner.ExceptionToThrow = exception;
RunUpdateAllPackagesCommand();
Assert.AreEqual(exception, packageViewModelFactory.FakePackageManagementEvents.ExceptionPassedToOnPackageOperationError);
}
[Test]
public void UpdateAllPackagesCommand_ExceptionThrownWhenUpdatingAllPackages_ExceptionLogged()
{
var actionRunner = new ExceptionThrowingPackageActionRunner();
CreateViewModel(actionRunner);
ViewModelHasTwoPackagesThatCanBeUpdatedAfterReadingPackages();
var exception = new Exception("Exception error message");
actionRunner.ExceptionToThrow = exception;
RunUpdateAllPackagesCommand();
string actualMessage = fakePackageManagementEvents.FormattedStringPassedToOnPackageOperationMessageLogged;
bool containsExceptionErrorMessage = actualMessage.Contains("Exception error message");
Assert.IsTrue(containsExceptionErrorMessage, actualMessage);
Assert.AreEqual(MessageLevel.Error, fakePackageManagementEvents.MessageLevelPassedToOnPackageOperationMessageLogged);
}
[Test]
public void UpdateAllPackagesCommand_PackagesUpdated_ProjectCreatedUsingSourcePackageRepository()
{
CreateViewModel();
ViewModelHasTwoPackagesThatCanBeUpdatedAfterReadingPackages();
var package = viewModel.PackageViewModels[0].GetPackage() as IPackageFromRepository;
solution.RepositoryPassedToGetProject = null;
RunUpdateAllPackagesCommand();
Assert.AreEqual(package.Repository, solution.RepositoryPassedToGetProject);
}
[Test]
public void UpdateAllPackagesCommand_PackagesUpdated_UpdatePackagesActionCreatedFromProject()
{
CreateViewModel();
ViewModelHasTwoPackagesThatCanBeUpdatedAfterReadingPackages();
RunUpdateAllPackagesCommand();
UpdatePackagesAction action = GetUpdatePackagesActionRun();
FakePackageManagementProject project = solution.FakeProjectToReturnFromGetProject;
UpdatePackagesAction expectedAction = project.UpdatePackagesActionsCreated.FirstOrDefault();
Assert.AreEqual(expectedAction, action);
}
[Test]
public void UpdateAllPackagesCommand_CheckLoggerUsed_PackageViewModelLoggerUsedWhenResolvingPackageOperations()
{
CreateViewModel();
ViewModelHasTwoPackagesThatCanBeUpdatedAfterReadingPackages();
RunUpdateAllPackagesCommand();
ILogger expectedLogger = updatedPackageViewModelFactory.Logger;
ILogger actualLogger = solution.FakeProjectToReturnFromGetProject.Logger;
Assert.AreEqual(expectedLogger, actualLogger);
}
[Test]
public void UpdateAllPackagesCommand_PackageOperations_CreatedFromProjectUsingPackagesAndUpdatePackagesAction()
{
CreateViewModel();
ViewModelHasTwoPackagesThatCanBeUpdatedAfterReadingPackages();
RunUpdateAllPackagesCommand();
UpdatePackagesAction action = GetUpdatePackagesActionRun();
FakePackageManagementProject project = solution.FakeProjectToReturnFromGetProject;
Assert.AreEqual(action, project.SettingsPassedToGetUpdatePackagesOperations);
Assert.AreEqual(action.Packages, project.PackagesOnUpdatePackagesActionPassedToGetUpdatePackagesOperations);
}
[Test]
public void UpdateAllPackagesCommand_PackageOperations_ActionHasPackageOperationsReturnedFromProject()
{
CreateViewModel();
ViewModelHasTwoPackagesThatCanBeUpdatedAfterReadingPackages();
FakePackageManagementProject project = solution.FakeProjectToReturnFromGetProject;
List<PackageOperation> operations = PackageOperationHelper.CreateListWithOneInstallOperationWithFile("readme.txt");
project.PackageOperationsToReturnFromGetUpdatePackagesOperations = operations;
RunUpdateAllPackagesCommand();
UpdatePackagesAction action = GetUpdatePackagesActionRun();
CollectionAssert.AreEqual(operations, action.Operations);
}
[Test]
public void UpdateAllPackagesCommand_PackageOperations_PackagesUsedToDeterminePackageOperations()
{
CreateViewModel();
ViewModelHasTwoPackagesThatCanBeUpdatedAfterReadingPackages();
FakePackageManagementProject project = solution.FakeProjectToReturnFromGetProject;
List<FakePackage> expectedPackages = registeredPackageRepositories.FakeActiveRepository.FakePackages;
RunUpdateAllPackagesCommand();
CollectionAssert.AreEqual(expectedPackages, project.PackagesOnUpdatePackagesActionPassedToGetUpdatePackagesOperations);
}
[Test]
public void UpdateAllPackagesCommand_TwoProjectsAndPackagesUpdatedForSolution_UpdateAllPackagesInSolutionActionIsRun()
{
CreateSolution();
NoProjectsSelected();
FakePackageManagementProject project1 = AddProjectToSolution();
FakePackageManagementProject project2 = AddProjectToSolution();
CreateViewModel(solution);
ViewModelHasTwoPackagesInSolutionThatCanBeUpdatedAfterReadingPackages();
RunUpdateAllPackagesCommand();
UpdateSolutionPackagesAction action = GetUpdateSolutionPackagesActionRun();
Assert.IsNotNull(action);
}
[Test]
public void UpdateAllPackagesCommand_TwoProjectsAndPackagesUpdatedForSolution_UpdateAllPackagesInSolutionActionRunHasSolutionSet()
{
CreateSolution();
NoProjectsSelected();
FakePackageManagementProject project1 = AddProjectToSolution();
FakePackageManagementProject project2 = AddProjectToSolution();
CreateViewModel(solution);
ViewModelHasTwoPackagesInSolutionThatCanBeUpdatedAfterReadingPackages();
RunUpdateAllPackagesCommand();
UpdateSolutionPackagesAction action = GetUpdateSolutionPackagesActionRun();
Assert.AreEqual(solution, action.Solution);
}
[Test]
public void UpdateAllPackagesCommand_TwoProjectsAndPackagesUpdatedForSolution_UpdateAllPackagesInSolutionActionRunHasTwoPackages()
{
CreateSolution();
NoProjectsSelected();
FakePackageManagementProject project1 = AddProjectToSolution();
FakePackageManagementProject project2 = AddProjectToSolution();
CreateViewModel(solution);
AddPackageToSolution("First", "1.0.0.0");
FakePackage firstUpdatedPackage = AddPackageToActiveRepository("First", "1.1.0.0");
AddPackageToSolution("Second", "1.0.0.0");
FakePackage secondUpdatedPackage = AddPackageToActiveRepository("Second", "1.1.0.0");
viewModel.ReadPackages();
CompleteReadPackagesTask();
RunUpdateAllPackagesCommand();
UpdateSolutionPackagesAction action = GetUpdateSolutionPackagesActionRun();
IPackage firstPackage = action.Packages.FirstOrDefault(p => p.Id == "First");
IPackage secondPackage = action.Packages.FirstOrDefault(p => p.Id == "Second");
Assert.AreEqual(firstUpdatedPackage, firstPackage);
Assert.AreEqual(secondUpdatedPackage, secondPackage);
Assert.AreEqual(2, action.Packages.Count());
}
[Test]
public void UpdateAllPackagesCommand_TwoProjectsAndPackagesUpdatedForSolution_ActionHasPackageOperations()
{
CreateSolution();
NoProjectsSelected();
FakePackageManagementProject project1 = AddProjectToSolution();
FakePackageManagementProject project2 = AddProjectToSolution();
CreateViewModel(solution);
ViewModelHasTwoPackagesInSolutionThatCanBeUpdatedAfterReadingPackages();
List<PackageOperation> operations = PackageOperationHelper.CreateListWithOneInstallOperationWithFile("readme.txt");
project1.PackageOperationsToReturnFromGetUpdatePackagesOperations = operations;
RunUpdateAllPackagesCommand();
UpdateSolutionPackagesAction action = GetUpdateSolutionPackagesActionRun();
CollectionAssert.AreEqual(operations, action.Operations);
}
[Test]
public void UpdateAllPackagesCommand_TwoProjectsAndPackagesUpdatedForSolution_PackageOperationsDeterminedFromConfiguredPackageRepository()
{
CreateSolution();
NoProjectsSelected();
FakePackageManagementProject project1 = AddProjectToSolution();
FakePackageManagementProject project2 = AddProjectToSolution();
CreateViewModel(solution);
ViewModelHasTwoPackagesInSolutionThatCanBeUpdatedAfterReadingPackages();
List<PackageOperation> operations = PackageOperationHelper.CreateListWithOneInstallOperationWithFile("readme.txt");
project1.PackageOperationsToReturnFromGetUpdatePackagesOperations = operations;
IPackageFromRepository package = viewModel.PackageViewModels[0].GetPackage() as IPackageFromRepository;
RunUpdateAllPackagesCommand();
Assert.AreEqual(package.Repository, solution.SourceRepositoryPassedToGetProjects);
}
[Test]
public void UpdateAllPackagesCommand_TwoProjectsAndPackagesUpdatedForSolution_LoggerSetWhenResolvingPackageOperations()
{
CreateSolution();
NoProjectsSelected();
FakePackageManagementProject project1 = AddProjectToSolution();
FakePackageManagementProject project2 = AddProjectToSolution();
CreateViewModel(solution);
ViewModelHasTwoPackagesInSolutionThatCanBeUpdatedAfterReadingPackages();
RunUpdateAllPackagesCommand();
ILogger expectedLogger = updatedPackageViewModelFactory.Logger;
ILogger actualLogger = project1.Logger;
Assert.AreEqual(expectedLogger, actualLogger);
}
[Test]
public void UpdateAllPackagesCommand_TwoProjectsAndPackagesUpdatedForSolution_LoggerSetOnUpdateSolutionPackagesAction()
{
CreateSolution();
NoProjectsSelected();
FakePackageManagementProject project1 = AddProjectToSolution();
FakePackageManagementProject project2 = AddProjectToSolution();
CreateViewModel(solution);
ViewModelHasTwoPackagesInSolutionThatCanBeUpdatedAfterReadingPackages();
RunUpdateAllPackagesCommand();
ILogger expectedLogger = updatedPackageViewModelFactory.Logger;
UpdateSolutionPackagesAction action = GetUpdateSolutionPackagesActionRun();
Assert.AreEqual(expectedLogger, action.Logger);
}
[Test]
public void UpdateAllPackagesCommand_TwoPackagesBeingUpdated_PreviouslyLoggedMessagesAreCleared()
{
CreateViewModel();
ViewModelHasTwoPackagesThatCanBeUpdatedAfterReadingPackages();
RunUpdateAllPackagesCommand();
Assert.IsTrue(packageViewModelFactory.FakePackageManagementEvents.IsOnPackageOperationsStartingCalled);
}
[Test]
public void PackageViewModels_PackagesUpdated_PackagesAreUpdatedInViewModelList()
{
CreateViewModelWithRealPackageManagementEvents();
AddPackageToLocalRepository("Test", "1.0.0.0");
FakePackage newerPackage = AddPackageToActiveRepository("Test", "1.1.0.0");
viewModel.ReadPackages();
CompleteReadPackagesTask();
solution.FakeProjectToReturnFromGetProject.FakePackages.Clear();
AddPackageToLocalRepository("Second", "1.0.0.0");
AddPackageToLocalRepository("Test", "1.1.0.0");
FakePackage expectedPackage = AddPackageToActiveRepository("Second", "1.1.0.0");
var expectedPackages = new FakePackage[] { expectedPackage };
packageManagementEvents.OnParentPackagesUpdated(new FakePackage[] { newerPackage });
CompleteReadPackagesTask();
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
}
[Test]
public void PackageViewModels_PackagesUpdatedAfterViewModelIsDisposed_PackagesAreNotUpdatedInViewModelList()
{
CreateViewModelWithRealPackageManagementEvents();
viewModel.ReadPackages();
CompleteReadPackagesTask();
viewModel.Dispose();
AddPackageToLocalRepository("Test", "1.0.0.0");
FakePackage newerPackage = AddPackageToActiveRepository("Test", "1.1.0.0");
var expectedPackages = new FakePackage[] { newerPackage };
packageManagementEvents.OnParentPackagesUpdated(new FakePackage[] { newerPackage });
CompleteReadPackagesTask();
Assert.AreEqual(0, viewModel.PackageViewModels.Count);
}
[Test]
public void ShowPrerelease_ByDefault_ReturnsTrue()
{
CreateViewModel();
bool show = viewModel.ShowPrerelease;
Assert.IsTrue(show);
}
[Test]
public void PackageViewModels_ChildPackageViewModelParent_IsUpdatedPackagesViewModel()
{
CreateViewModel();
AddPackageToLocalRepository("Test", "1.0.0.0");
FakePackage newerPackage = AddPackageToActiveRepository("Test", "1.1.0.0");
viewModel.ReadPackages();
CompleteReadPackagesTask();
PackageViewModel childViewModel = viewModel.PackageViewModels.First();
IPackageViewModelParent parent = childViewModel.GetParent();
Assert.AreEqual(viewModel, parent);
}
[Test]
public void UpdateAllPackagesCommand_SourceRepositoryIsOperationAware_UpdateOperationStartedAndDisposed()
{
CreateViewModel();
var operationAwareRepository = new FakeOperationAwarePackageRepository();
registeredPackageRepositories.FakeActiveRepository = operationAwareRepository;
AddPackageToLocalRepository("Test", "1.0.0.0");
AddPackageToActiveRepository("Test", "1.0.0.0");
FakePackage newerPackage = AddPackageToActiveRepository("Test", "1.1.0.0");
viewModel.ReadPackages();
CompleteReadPackagesTask();
RunUpdateAllPackagesCommand();
operationAwareRepository.AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Update, null);
}
[Test]
public void ReadPackages_TwoPackagesInSourceRepositoryAndTwoNewerPackageVersionAvailableAndProjectHasConstraint_NewerPackageVersionThatMeetsConstraintIsDisplayed()
{
CreateViewModel();
var versionSpec = new VersionSpec();
versionSpec.MinVersion = new SemanticVersion("1.0");
versionSpec.IsMinInclusive = true;
versionSpec.MaxVersion = new SemanticVersion("2.0");
versionSpec.IsMaxInclusive = true;
var constraintProvider = new DefaultConstraintProvider();
constraintProvider.AddConstraint("Test", versionSpec);
solution.FakeProjectToReturnFromGetProject.ConstraintProvider = constraintProvider;
AddPackageToLocalRepository("Test", "1.0.0.0");
AddPackageToActiveRepository("Test", "1.0.0.0");
FakePackage expectedPackage = AddPackageToActiveRepository("Test", "2.0.0.0");
AddPackageToActiveRepository("Test", "3.0.0.0");
viewModel.ReadPackages();
CompleteReadPackagesTask();
var expectedPackages = new FakePackage[] {
expectedPackage
};
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
}
}
}