#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.
 
 
 
 
 
 

954 lines
33 KiB

// 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.Linq;
using System.Collections.Generic;
using ICSharpCode.Core;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
using Rhino.Mocks;
namespace PackageManagement.Tests
{
[TestFixture]
public class SharpDevelopPackageManagerTests
{
SharpDevelopPackageManager packageManager;
FakePackageRepository fakeFeedSourceRepository;
FakeSharedPackageRepository fakeSolutionSharedRepository;
IProject testProject;
PackageManagementOptions options;
SolutionPackageRepositoryPath repositoryPaths;
PackageReferenceRepositoryHelper packageRefRepositoryHelper;
TestableProjectManager testableProjectManager;
FakeFileSystem fakeFileSystem;
FakePackageOperationResolverFactory fakePackageOperationResolverFactory;
IPackageOperationResolver fakePackageOperationResolver;
void CreatePackageManager(IProject project, PackageReferenceRepositoryHelper packageRefRepositoryHelper)
{
options = new TestablePackageManagementOptions();
options.PackagesDirectory = "packages";
repositoryPaths = new SolutionPackageRepositoryPath(project, options);
var pathResolver = new DefaultPackagePathResolver(repositoryPaths.PackageRepositoryPath);
fakeFileSystem = new FakeFileSystem();
fakeFeedSourceRepository = new FakePackageRepository();
fakeSolutionSharedRepository = packageRefRepositoryHelper.FakeSharedSourceRepository;
fakePackageOperationResolverFactory = new FakePackageOperationResolverFactory();
var fakeSolutionPackageRepository = new FakeSolutionPackageRepository();
fakeSolutionPackageRepository.FileSystem = fakeFileSystem;
fakeSolutionPackageRepository.PackagePathResolver = pathResolver;
fakeSolutionPackageRepository.FakeSharedRepository = fakeSolutionSharedRepository;
packageManager = new SharpDevelopPackageManager(fakeFeedSourceRepository,
packageRefRepositoryHelper.FakeProjectSystem,
fakeSolutionPackageRepository,
fakePackageOperationResolverFactory);
}
void CreatePackageManager()
{
CreateTestProject();
CreatePackageReferenceRepositoryHelper();
CreatePackageManager(testProject, packageRefRepositoryHelper);
}
void CreatePackageReferenceRepositoryHelper()
{
packageRefRepositoryHelper = new PackageReferenceRepositoryHelper();
}
void CreateTestProject()
{
testProject = ProjectHelper.CreateTestProject();
}
void CreateTestableProjectManager()
{
testableProjectManager = new TestableProjectManager();
packageManager.ProjectManager = testableProjectManager;
}
FakePackage CreateFakePackage(string id = "Test", string version = "1.0.0.0")
{
return new FakePackage(id, version);
}
FakePackage InstallPackage()
{
FakePackage package = CreateFakePackage();
packageManager.InstallPackage(package);
return package;
}
FakePackage InstallPackageWithNoPackageOperations()
{
return InstallPackageWithNoPackageOperations(ignoreDependencies: false);
}
FakePackage InstallPackageWithNoPackageOperationsAndIgnoreDependencies()
{
return InstallPackageWithNoPackageOperations(ignoreDependencies: true);
}
FakePackage InstallPackageWithNoPackageOperationsAndAllowPrereleaseVersions()
{
return InstallPackageWithNoPackageOperations(ignoreDependencies: false, allowPrereleaseVersions: true);
}
FakePackage InstallPackageWithNoPackageOperations(bool ignoreDependencies)
{
return InstallPackageWithNoPackageOperations(ignoreDependencies, allowPrereleaseVersions: false);
}
FakePackage InstallPackageWithNoPackageOperations(bool ignoreDependencies, bool allowPrereleaseVersions)
{
FakePackage package = CreateFakePackage();
var operations = new List<PackageOperation>();
var installAction = new FakeInstallPackageAction();
installAction.IgnoreDependencies = ignoreDependencies;
installAction.AllowPrereleaseVersions = allowPrereleaseVersions;
installAction.Operations = operations;
packageManager.InstallPackage(package, installAction);
return package;
}
FakePackage InstallPackageWithPackageOperations(PackageOperation operation)
{
var operations = new PackageOperation[] {
operation
};
FakePackage package = CreateFakePackage();
var installAction = new FakeInstallPackageAction();
installAction.Operations = operations;
packageManager.InstallPackage(package, installAction);
return package;
}
FakePackage InstallPackageAndIgnoreDependencies()
{
return InstallPackageWithParameters(true, false);
}
FakePackage InstallPackageWithParameters(bool ignoreDependencies, bool allowPrereleaseVersions)
{
FakePackage package = CreateFakePackage();
packageManager.InstallPackage(package, ignoreDependencies, allowPrereleaseVersions);
return package;
}
FakePackage InstallPackageAndAllowPrereleaseVersions()
{
return InstallPackageWithParameters(false, true);
}
FakePackage InstallPackageAndDoNotAllowPrereleaseVersions()
{
return InstallPackageWithParameters(false, false);
}
FakePackage InstallPackageAndDoNotIgnoreDependencies()
{
return InstallPackageWithParameters(false, false);
}
FakePackage UninstallPackage()
{
FakePackage package = CreateFakePackage();
testableProjectManager.FakeLocalRepository.FakePackages.Add(package);
packageManager.UninstallPackage(package);
return package;
}
FakePackage UninstallPackageAndForceRemove()
{
FakePackage package = CreateFakePackage();
testableProjectManager.FakeLocalRepository.FakePackages.Add(package);
bool removeDependencies = false;
bool forceRemove = true;
packageManager.UninstallPackage(package, forceRemove, removeDependencies);
return package;
}
FakePackage UninstallPackageAndRemoveDependencies()
{
FakePackage package = CreateFakePackage();
testableProjectManager.FakeLocalRepository.FakePackages.Add(package);
bool removeDependencies = true;
bool forceRemove = false;
packageManager.UninstallPackage(package, forceRemove, removeDependencies);
return package;
}
PackageOperation CreateOneInstallPackageOperation(string id = "PackageToInstall", string version = "1.0")
{
FakePackage package = CreateFakePackage(id, version);
return new PackageOperation(package, PackageAction.Install);
}
IEnumerable<PackageOperation> GetInstallPackageOperations(FakePackage package)
{
return GetInstallPackageOperations(package, false, false);
}
IEnumerable<PackageOperation> GetInstallPackageOperationsAndIgnoreDependencies(FakePackage package)
{
return GetInstallPackageOperations(package, true, false);
}
IEnumerable<PackageOperation> GetInstallPackageOperationsAndAllowPrereleaseVersions(FakePackage package)
{
return GetInstallPackageOperations(package, false, true);
}
IEnumerable<PackageOperation> GetInstallPackageOperations(
FakePackage package,
bool ignoreDependencies,
bool allowPrereleaseVersions)
{
var fakeInstallAction = new FakeInstallPackageAction();
fakeInstallAction.IgnoreDependencies = ignoreDependencies;
fakeInstallAction.AllowPrereleaseVersions = allowPrereleaseVersions;
return packageManager.GetInstallPackageOperations(package, fakeInstallAction);
}
FakePackage UpdatePackageWithNoPackageOperations()
{
FakePackage package = CreateFakePackage();
var updateAction = new FakeUpdatePackageAction();
updateAction.Operations = new List<PackageOperation>();
updateAction.UpdateDependencies = true;
packageManager.UpdatePackage(package, updateAction);
return package;
}
FakePackage UpdatePackageWithPackageOperations(PackageOperation operation)
{
var operations = new PackageOperation[] {
operation
};
FakePackage package = CreateFakePackage();
var updateAction = new FakeUpdatePackageAction();
updateAction.Operations = operations;
updateAction.UpdateDependencies = true;
packageManager.UpdatePackage(package, updateAction);
return package;
}
FakePackage UpdatePackageWithNoPackageOperationsAndDoNotUpdateDependencies()
{
return UpdatePackageWithNoPackageOperations(false, false);
}
FakePackage UpdatePackageWithNoPackageOperationsAndAllowPrereleaseVersions()
{
return UpdatePackageWithNoPackageOperations(false, true);
}
FakePackage UpdatePackageWithNoPackageOperations(bool updateDependencies, bool allowPrereleaseVersions)
{
FakePackage package = CreateFakePackage();
var updateAction = new FakeUpdatePackageAction();
updateAction.Operations = new List<PackageOperation>();
updateAction.UpdateDependencies = updateDependencies;
updateAction.AllowPrereleaseVersions = allowPrereleaseVersions;
packageManager.UpdatePackage(package, updateAction);
return package;
}
UpdatePackagesAction CreateUpdatePackagesAction()
{
return new UpdatePackagesAction(new FakePackageManagementProject());
}
UpdatePackagesAction CreateUpdatePackagesActionWithPackages(params IPackage[] packages)
{
UpdatePackagesAction action = CreateUpdatePackagesAction();
action.AddPackages(packages);
return action;
}
UpdatePackagesAction CreateUpdatePackagesActionWithOperations(params PackageOperation[] operations)
{
UpdatePackagesAction action = CreateUpdatePackagesAction();
action.AddOperations(operations);
return action;
}
PackageOperation AddInstallOperationForPackage(IPackage package)
{
var operation = new PackageOperation(package, PackageAction.Install);
AddInstallOperationsForPackage(package, operation);
return operation;
}
void AddInstallOperationsForPackage(IPackage package, params PackageOperation[] operations)
{
fakePackageOperationResolver
.Stub(resolver => resolver.ResolveOperations(package))
.Return(operations);
}
void CreateFakePackageResolverForUpdatePackageOperations()
{
fakePackageOperationResolver = MockRepository.GenerateStub<IPackageOperationResolver>();
fakePackageOperationResolverFactory.UpdatePackageOperationsResolver = fakePackageOperationResolver;
}
[Test]
public void ProjectManager_InstanceCreated_SourceRepositoryIsSharedRepositoryPassedToPackageManager()
{
CreatePackageManager();
Assert.AreEqual(fakeSolutionSharedRepository, packageManager.ProjectManager.SourceRepository);
}
[Test]
public void ProjectManager_InstanceCreated_LocalRepositoryIsPackageReferenceRepository()
{
CreatePackageManager();
PackageReferenceRepository packageRefRepository = packageManager.ProjectManager.LocalRepository as PackageReferenceRepository;
Assert.IsNotNull(packageRefRepository);
}
[Test]
public void ProjectManager_InstanceCreated_LocalRepositoryIsRegisteredWithSharedRepository()
{
CreateTestProject();
CreatePackageReferenceRepositoryHelper();
string expectedPath = @"c:\projects\Test\MyProject";
packageRefRepositoryHelper.FakeProjectSystem.PathToReturnFromGetFullPath = expectedPath;
CreatePackageManager(testProject, packageRefRepositoryHelper);
string actualPath = fakeSolutionSharedRepository.PathPassedToRegisterRepository;
Assert.AreEqual(expectedPath, actualPath);
}
[Test]
public void ProjectManager_InstanceCreated_PathResolverIsPackageManagerPathResolver()
{
CreatePackageManager();
Assert.AreEqual(packageManager.PathResolver, packageManager.ProjectManager.PathResolver);
}
[Test]
public void InstallPackage_PackageInstancePassed_AddsReferenceToProject()
{
CreatePackageManager();
FakePackage package = InstallPackage();
Assert.AreEqual(package, testableProjectManager.PackagePassedToAddPackageReference);
}
[Test]
public void InstallPackage_PackageInstancePassed_DependenciesNotIgnoredWhenAddingReferenceToProject()
{
CreatePackageManager();
CreateTestableProjectManager();
InstallPackage();
Assert.IsFalse(testableProjectManager.IgnoreDependenciesPassedToAddPackageReference);
}
[Test]
public void InstallPackage_PackageInstancePassed_PrereleaseVersionsNotAllowedWhenAddingReferenceToProject()
{
CreatePackageManager();
CreateTestableProjectManager();
InstallPackage();
Assert.IsFalse(testableProjectManager.AllowPrereleaseVersionsPassedToAddPackageReference);
}
[Test]
public void InstallPackage_PackageInstanceAndPackageOperationsPassed_AddsReferenceToProject()
{
CreatePackageManager();
CreateTestableProjectManager();
FakePackage package = InstallPackageWithNoPackageOperations();
Assert.AreEqual(package, testableProjectManager.PackagePassedToAddPackageReference);
}
[Test]
public void InstallPackage_PackageInstanceAndPackageOperationsPassed_DoNotIgnoreDependenciesWhenAddingReferenceToProject()
{
CreatePackageManager();
CreateTestableProjectManager();
InstallPackageWithNoPackageOperations();
Assert.IsFalse(testableProjectManager.IgnoreDependenciesPassedToAddPackageReference);
}
[Test]
public void InstallPackage_PackageInstanceAndPackageOperationsPassed_DoNotAllowPrereleaseVersionsWhenAddingReferenceToProject()
{
CreatePackageManager();
CreateTestableProjectManager();
InstallPackageWithNoPackageOperations();
Assert.IsFalse(testableProjectManager.AllowPrereleaseVersionsPassedToAddPackageReference);
}
[Test]
public void InstallPackage_PackageInstanceAndPackageOperationsPassedAndIgnoreDependenciesIsTrue_IgnoreDependenciesWhenAddingReferenceToProject()
{
CreatePackageManager();
CreateTestableProjectManager();
InstallPackageWithNoPackageOperationsAndIgnoreDependencies();
Assert.IsTrue(testableProjectManager.IgnoreDependenciesPassedToAddPackageReference);
}
[Test]
public void InstallPackage_PackageInstanceAndPackageOperationsPassedAndAllowPrereleaseVersionsIsTrue_PrereleaseVersionsallowedWhenAddingReferenceToProject()
{
CreatePackageManager();
CreateTestableProjectManager();
InstallPackageWithNoPackageOperationsAndAllowPrereleaseVersions();
Assert.IsTrue(testableProjectManager.AllowPrereleaseVersionsPassedToAddPackageReference);
}
[Test]
public void InstallPackage_PackageInstanceAndOneInstallPackageOperationPassed_PackageDefinedInOperationIsInstalledInLocalRepository()
{
CreatePackageManager();
CreateTestableProjectManager();
PackageOperation operation = CreateOneInstallPackageOperation();
InstallPackageWithPackageOperations(operation);
Assert.AreEqual(operation.Package, fakeSolutionSharedRepository.FirstPackageAdded);
}
[Test]
public void InstallPackage_PackageDependenciesIgnored_IgnoreDependenciesPassedToProjectManager()
{
CreatePackageManager();
CreateTestableProjectManager();
InstallPackageAndIgnoreDependencies();
Assert.IsTrue(testableProjectManager.IgnoreDependenciesPassedToAddPackageReference);
}
[Test]
public void InstallPackage_AllowPrereleaseVersions_AllowPrereleaseVersionsPassedToProjectManager()
{
CreatePackageManager();
CreateTestableProjectManager();
InstallPackageAndAllowPrereleaseVersions();
Assert.IsTrue(testableProjectManager.AllowPrereleaseVersionsPassedToAddPackageReference);
}
[Test]
public void InstallPackage_PackageDependenciesIgnored_AddsReferenceToPackage()
{
CreatePackageManager();
CreateTestableProjectManager();
FakePackage package = InstallPackageAndIgnoreDependencies();
Assert.AreEqual(package, testableProjectManager.PackagePassedToAddPackageReference);
}
[Test]
public void InstallPackage_PackageDependenciesNotIgnored_IgnoreDependenciesPassedToProjectManager()
{
CreatePackageManager();
CreateTestableProjectManager();
InstallPackageAndDoNotIgnoreDependencies();
Assert.IsFalse(testableProjectManager.IgnoreDependenciesPassedToAddPackageReference);
}
[Test]
public void InstallPackage_PackageDependenciesNotIgnored_AddsReferenceToPackage()
{
CreatePackageManager();
CreateTestableProjectManager();
FakePackage package = InstallPackageAndDoNotIgnoreDependencies();
Assert.AreEqual(package, testableProjectManager.PackagePassedToAddPackageReference);
}
[Test]
public void UninstallPackage_PackageInProjectLocalRepository_RemovesReferenceFromProject()
{
CreatePackageManager();
CreateTestableProjectManager();
FakePackage package = UninstallPackage();
Assert.AreEqual(package.Id, testableProjectManager.PackagePassedToRemovePackageReference.Id);
}
[Test]
public void UninstallPackage_PackageInProjectLocalRepository_DoesNotRemoveReferenceForcefullyFromProject()
{
CreatePackageManager();
CreateTestableProjectManager();
UninstallPackage();
Assert.IsFalse(testableProjectManager.ForcePassedToRemovePackageReference);
}
[Test]
public void UninstallPackage_PackageInProjectLocalRepository_DependenciesNotRemovedWhenPackageReferenceRemovedFromProject()
{
CreatePackageManager();
CreateTestableProjectManager();
UninstallPackage();
Assert.IsFalse(testableProjectManager.RemoveDependenciesPassedToRemovePackageReference);
}
[Test]
public void UninstallPackage_PassingForceRemove_ReferenceForcefullyRemovedFromProject()
{
CreatePackageManager();
CreateTestableProjectManager();
UninstallPackageAndForceRemove();
Assert.IsTrue(testableProjectManager.ForcePassedToRemovePackageReference);
}
[Test]
public void UninstallPackage_PassingRemoveDependencies_DependenciesRemovedWhenPackageReferenceRemovedFromProject()
{
CreatePackageManager();
CreateTestableProjectManager();
UninstallPackageAndRemoveDependencies();
Assert.IsTrue(testableProjectManager.RemoveDependenciesPassedToRemovePackageReference);
}
[Test]
public void UninstallPackage_ProjectLocalRepositoryHasPackage_PackageRemovedFromProjectRepositoryBeforeSolutionRepository()
{
CreatePackageManager();
CreateTestableProjectManager();
FakePackage package = CreateFakePackage();
package.Id = "Test";
testableProjectManager.FakeLocalRepository.FakePackages.Add(package);
IPackage packageRemovedFromProject = null;
packageManager.PackageUninstalled += (sender, e) => {
packageRemovedFromProject = testableProjectManager.PackagePassedToRemovePackageReference;
};
packageManager.UninstallPackage(package);
Assert.AreEqual("Test", packageRemovedFromProject.Id);
}
[Test]
public void UninstallPackage_PackageReferencedByNoProjects_PackageIsRemovedFromSharedSolutionRepository()
{
CreatePackageManager();
CreateTestableProjectManager();
FakePackage package = CreateFakePackage();
package.Id = "MyPackageId";
testableProjectManager.FakeLocalRepository.FakePackages.Add(package);
fakeSolutionSharedRepository.FakePackages.Add(package);
packageManager.UninstallPackage(package);
bool containsPackage = fakeSolutionSharedRepository.FakePackages.Contains(package);
Assert.IsFalse(containsPackage);
}
[Test]
public void UninstallPackage_PackageReferencedByTwoProjects_PackageIsNotRemovedFromSharedSolutionRepository()
{
CreatePackageManager();
CreateTestableProjectManager();
var package = new FakePackage("MyPackageId", "1.4.5.2");
testableProjectManager.FakeLocalRepository.FakePackages.Add(package);
fakeSolutionSharedRepository.FakePackages.Add(package);
fakeSolutionSharedRepository.PackageIdsReferences.Add("MyPackageId");
packageManager.UninstallPackage(package);
bool containsPackage = fakeSolutionSharedRepository.FakePackages.Contains(package);
Assert.IsTrue(containsPackage);
Assert.AreEqual("MyPackageId", fakeSolutionSharedRepository.PackageIdPassedToIsReferenced);
Assert.AreEqual(package.Version, fakeSolutionSharedRepository.VersionPassedToIsReferenced);
}
[Test]
public void GetInstallPackageOperations_PackageOperationResolverFactoryUsed_PackageOperationsReturnedFromPackageOperationsResolverCreated()
{
CreatePackageManager();
var package = new FakePackage();
IEnumerable<PackageOperation> operations = GetInstallPackageOperations(package);
IEnumerable<PackageOperation> expectedOperations = fakePackageOperationResolverFactory.FakeInstallPackageOperationResolver.PackageOperations;
Assert.AreEqual(expectedOperations, operations);
}
[Test]
public void GetInstallPackageOperations_PackageOperationResolverFactoryUsed_PackageManagerUsesLocalRepositoryWhenGettingPackageOperations()
{
CreatePackageManager();
var package = new FakePackage();
GetInstallPackageOperations(package);
IPackageRepository expectedRepository = packageManager.LocalRepository;
IPackageRepository actualRepository = fakePackageOperationResolverFactory.LocalRepositoryPassedToCreateInstallPackageOperationsResolver;
Assert.AreEqual(expectedRepository, actualRepository);
}
[Test]
public void GetInstallPackageOperations_PackageOperationResolverFactoryUsed_PackageManagerUsesSourceRepositoryWhenGettingPackageOperations()
{
CreatePackageManager();
var package = new FakePackage();
GetInstallPackageOperations(package);
IPackageRepository expectedRepository = packageManager.SourceRepository;
IPackageRepository actualRepository = fakePackageOperationResolverFactory.SourceRepositoryPassedToCreateInstallPackageOperationsResolver;
Assert.AreEqual(expectedRepository, actualRepository);
}
[Test]
public void GetInstallPackageOperations_PackageOperationResolverFactoryUsed_DependenciesNotIgnored()
{
CreatePackageManager();
var package = new FakePackage();
GetInstallPackageOperations(package);
bool result = fakePackageOperationResolverFactory.IgnoreDependenciesPassedToCreateInstallPackageOperationResolver;
Assert.IsFalse(result);
}
[Test]
public void GetInstallPackageOperations_PackageOperationResolverFactoryUsed_PackageManagerUsesLoggerWhenGettingPackageOperations()
{
CreatePackageManager();
var package = new FakePackage();
GetInstallPackageOperations(package);
ILogger expectedLogger = packageManager.Logger;
ILogger actualLogger = fakePackageOperationResolverFactory.LoggerPassedToCreateInstallPackageOperationResolver;
Assert.AreEqual(expectedLogger, actualLogger);
}
[Test]
public void GetInstallPackageOperations_PackageOperationResolverFactoryUsed_PackageUsedWhenGettingPackageOperations()
{
CreatePackageManager();
var package = new FakePackage();
GetInstallPackageOperations(package);
IPackage actualPackage = fakePackageOperationResolverFactory
.FakeInstallPackageOperationResolver
.PackagePassedToResolveOperations;
Assert.AreEqual(package, actualPackage);
}
[Test]
public void GetInstallPackageOperations_IgnoreDependenciesIsTrue_PackageOperationResolverIgnoresDependencies()
{
CreatePackageManager();
var package = new FakePackage();
GetInstallPackageOperationsAndIgnoreDependencies(package);
bool result = fakePackageOperationResolverFactory.IgnoreDependenciesPassedToCreateInstallPackageOperationResolver;
Assert.IsTrue(result);
}
[Test]
public void GetInstallPackageOperations_AllowPrereleaseVersionsIsTrue_PackageOperationResolverAllowsPrereleaseVersions()
{
CreatePackageManager();
var package = new FakePackage();
GetInstallPackageOperationsAndAllowPrereleaseVersions(package);
bool result = fakePackageOperationResolverFactory.AllowPrereleaseVersionsPassedToCreateInstallPackageOperationResolver;
Assert.IsTrue(result);
}
[Test]
public void GetInstallPackageOperations_AllowPrereleaseVersionsIsFalse_PackageOperationResolverDoesNotAllowPrereleaseVersions()
{
CreatePackageManager();
var package = new FakePackage();
GetInstallPackageOperations(package);
bool result = fakePackageOperationResolverFactory.AllowPrereleaseVersionsPassedToCreateInstallPackageOperationResolver;
Assert.IsFalse(result);
}
public void UpdatePackage_PackageInstanceAndNoPackageOperationsPassed_UpdatesReferenceInProject()
{
CreatePackageManager();
CreateTestableProjectManager();
FakePackage package = UpdatePackageWithNoPackageOperations();
Assert.AreEqual(package, testableProjectManager.PackagePassedToUpdatePackageReference);
}
[Test]
public void UpdatePackage_PackageInstanceAndNoPackageOperationsPassed_UpdatesDependenciesInProject()
{
CreatePackageManager();
CreateTestableProjectManager();
FakePackage package = UpdatePackageWithNoPackageOperations();
Assert.IsTrue(testableProjectManager.UpdateDependenciesPassedToUpdatePackageReference);
}
[Test]
public void UpdatePackage_PackageInstanceAndAllowPrereleaseVersionsIsTrue_PrereleaseVersionsAllowedToUpdateProject()
{
CreatePackageManager();
CreateTestableProjectManager();
FakePackage package = UpdatePackageWithNoPackageOperationsAndAllowPrereleaseVersions();
Assert.IsTrue(testableProjectManager.AllowPrereleaseVersionsPassedToUpdatePackageReference);
}
[Test]
public void UpdatePackage_PackageInstanceAndAllowPrereleaseVersionsIsFalse_PrereleaseVersionsNotAllowedToUpdateProject()
{
CreatePackageManager();
CreateTestableProjectManager();
FakePackage package = UpdatePackageWithNoPackageOperations();
Assert.IsFalse(testableProjectManager.AllowPrereleaseVersionsPassedToUpdatePackageReference);
}
[Test]
public void UpdatePackage_PackageInstanceAndOneInstallPackageOperationPassed_PackageDefinedInOperationIsInstalledInLocalRepository()
{
CreatePackageManager();
CreateTestableProjectManager();
PackageOperation operation = CreateOneInstallPackageOperation();
UpdatePackageWithPackageOperations(operation);
Assert.AreEqual(operation.Package, fakeSolutionSharedRepository.FirstPackageAdded);
}
[Test]
public void UpdatePackage_UpdateDependenciesSetToFalse_DependenciesInProjectNotUpdated()
{
CreatePackageManager();
CreateTestableProjectManager();
UpdatePackageWithNoPackageOperationsAndDoNotUpdateDependencies();
Assert.IsFalse(testableProjectManager.UpdateDependenciesPassedToUpdatePackageReference);
}
[Test]
public void UpdatePackages_OnePackage_PackageReferencedIsAddedToProject()
{
CreatePackageManager();
CreateTestableProjectManager();
FakePackage package = CreateFakePackage("Test", "1.1");
UpdatePackagesAction action = CreateUpdatePackagesActionWithPackages(package);
packageManager.UpdatePackages(action);
Assert.AreEqual(package, testableProjectManager.PackagePassedToUpdatePackageReference);
}
[Test]
public void UpdatePackages_TwoPackages_PackageReferencedIsAddedToProjectForBothPackages()
{
CreatePackageManager();
CreateTestableProjectManager();
FakePackage package1 = CreateFakePackage("First", "1.1");
FakePackage package2 = CreateFakePackage("Second", "2.0");
var expectedPackages = new FakePackage[] { package1, package2 };
UpdatePackagesAction action = CreateUpdatePackagesActionWithPackages(expectedPackages);
packageManager.UpdatePackages(action);
PackageCollectionAssert.AreEqual(expectedPackages, testableProjectManager.PackagesPassedToUpdatePackageReference);
}
[Test]
public void UpdatePackages_UpdateDependenciesIsTrue_UpdateDependenciesPassedToProjectManager()
{
CreatePackageManager();
CreateTestableProjectManager();
FakePackage package = CreateFakePackage("Test", "1.1");
UpdatePackagesAction action = CreateUpdatePackagesActionWithPackages(package);
action.UpdateDependencies = true;
packageManager.UpdatePackages(action);
Assert.IsTrue(testableProjectManager.UpdateDependenciesPassedToUpdatePackageReference);
}
[Test]
public void UpdatePackages_UpdateDependenciesIsFalse_UpdateDependenciesPassedToProjectManager()
{
CreatePackageManager();
CreateTestableProjectManager();
FakePackage package = CreateFakePackage("Test", "1.1");
UpdatePackagesAction action = CreateUpdatePackagesActionWithPackages(package);
action.UpdateDependencies = false;
packageManager.UpdatePackages(action);
Assert.IsFalse(testableProjectManager.UpdateDependenciesPassedToUpdatePackageReference);
}
[Test]
public void UpdatePackages_AllowPrereleaseVersionsIsTrue_AllowPrereleaseVersionsPassedToProjectManager()
{
CreatePackageManager();
CreateTestableProjectManager();
FakePackage package = CreateFakePackage("Test", "1.1");
UpdatePackagesAction action = CreateUpdatePackagesActionWithPackages(package);
action.AllowPrereleaseVersions = true;
packageManager.UpdatePackages(action);
Assert.IsTrue(testableProjectManager.AllowPrereleaseVersionsPassedToUpdatePackageReference);
}
[Test]
public void UpdatePackages_AllowPrereleaseVersionsIsFalse_AllowPrereleaseVersionsPassedToProjectManager()
{
CreatePackageManager();
CreateTestableProjectManager();
FakePackage package = CreateFakePackage("Test", "1.1");
UpdatePackagesAction action = CreateUpdatePackagesActionWithPackages(package);
action.AllowPrereleaseVersions = false;
packageManager.UpdatePackages(action);
Assert.IsFalse(testableProjectManager.AllowPrereleaseVersionsPassedToUpdatePackageReference);
}
[Test]
public void UpdatePackages_TwoPackageOperations_BothPackagesInOperationsAddedToSharedRepository()
{
CreatePackageManager();
CreateTestableProjectManager();
PackageOperation operation1 = CreateOneInstallPackageOperation("First", "1.0");
PackageOperation operation2 = CreateOneInstallPackageOperation("Second", "1.0");
UpdatePackagesAction action = CreateUpdatePackagesActionWithOperations(operation1, operation2);
var expectedPackages = new FakePackage[] {
operation1.Package as FakePackage,
operation2.Package as FakePackage
};
packageManager.UpdatePackages(action);
PackageCollectionAssert.AreEqual(expectedPackages, fakeSolutionSharedRepository.PackagesAdded);
}
[Test]
public void GetUpdatePackageOperations_PackageOperationResolverFactoryUsed_PackageManagerUsesLoggerWhenGettingPackageOperations()
{
CreatePackageManager();
FakePackage package = CreateFakePackage("Test", "1.1");
UpdatePackagesAction updateAction = CreateUpdatePackagesActionWithPackages(package);
packageManager.GetUpdatePackageOperations(updateAction);
ILogger expectedLogger = packageManager.Logger;
ILogger actualLogger = fakePackageOperationResolverFactory.LoggerPassedToCreateUpdatePackageOperationResolver;
Assert.AreEqual(expectedLogger, actualLogger);
}
[Test]
public void GetUpdatePackageOperations_PackageOperationResolverFactoryUsed_PackageManagerUsesLocalRepositoryWhenGettingPackageOperations()
{
CreatePackageManager();
FakePackage package = CreateFakePackage("Test", "1.1");
UpdatePackagesAction updateAction = CreateUpdatePackagesActionWithPackages(package);
packageManager.GetUpdatePackageOperations(updateAction);
IPackageRepository expectedRepository = packageManager.LocalRepository;
IPackageRepository actualRepository = fakePackageOperationResolverFactory.LocalRepositoryPassedToCreateUpdatePackageOperationsResolver;
Assert.AreEqual(expectedRepository, actualRepository);
}
[Test]
public void GetUpdatePackageOperations_PackageOperationResolverFactoryUsed_PackageManagerUsesSourceRepositoryWhenGettingPackageOperations()
{
CreatePackageManager();
FakePackage package = CreateFakePackage("Test", "1.1");
UpdatePackagesAction updateAction = CreateUpdatePackagesActionWithPackages(package);
packageManager.GetUpdatePackageOperations(updateAction);
IPackageRepository expectedRepository = packageManager.SourceRepository;
IPackageRepository actualRepository = fakePackageOperationResolverFactory.SourceRepositoryPassedToCreateUpdatePackageOperationsResolver;
Assert.AreEqual(expectedRepository, actualRepository);
}
[Test]
public void GetUpdatePackageOperations_PackageOperationResolverFactoryUsed_PackageManagerUsesUpdatePackageSettingsWhenGettingPackageOperations()
{
CreatePackageManager();
FakePackage package = CreateFakePackage("Test", "1.1");
UpdatePackagesAction updateAction = CreateUpdatePackagesActionWithPackages(package);
packageManager.GetUpdatePackageOperations(updateAction);
IUpdatePackageSettings settings = fakePackageOperationResolverFactory.SettingsPassedToCreatePackageOperationResolver;
Assert.AreEqual(updateAction, settings);
}
[Test]
public void GetUpdatePackageOperations_TwoPackages_ReturnsPackageOperationsForBothPackages()
{
CreatePackageManager();
CreateFakePackageResolverForUpdatePackageOperations();
IPackage package1 = CreateFakePackage("Test", "1.0");
IPackage package2 = CreateFakePackage("Test2", "1.0");
PackageOperation operation1 = AddInstallOperationForPackage(package1);
PackageOperation operation2 = AddInstallOperationForPackage(package2);
UpdatePackagesAction updateAction = CreateUpdatePackagesActionWithPackages(package1, package2);
List<PackageOperation> operations = packageManager.GetUpdatePackageOperations(updateAction).ToList();
Assert.AreEqual(2, operations.Count());
Assert.Contains(operation1, operations);
Assert.Contains(operation2, operations);
}
}
}