bool PackageOperationRequiresLicenseAcceptance(PackageOperation operation)
 {
     return
         ((operation.Action == PackageAction.Install) &&
          operation.Package.RequireLicenseAcceptance &&
          !IsPackageInstalledInSolution(operation.Package));
 }
        PackageOperation AddInstallOperationForPackage(IPackage package)
        {
            var operation = new PackageOperation(package, PackageAction.Install);

            AddInstallOperationsForPackage(package, operation);
            return(operation);
        }
Esempio n. 3
0
        public Operation(
            PackageOperation operation, 
            IProjectManager projectManager,
            IPackageManager packageManager)
            : base(operation.Package, operation.Action)
        {
            if (projectManager != null && packageManager != null)
            {
                throw new ArgumentException("Only one of packageManager and projectManager can be non-null");
            }

            if (operation.Target == PackageOperationTarget.PackagesFolder && packageManager == null)
            {
                throw new ArgumentNullException("packageManager");
            }

            if (operation.Target == PackageOperationTarget.Project && projectManager == null)
            {
                throw new ArgumentNullException("projectManager");
            }

            Target = operation.Target;
            PackageManager = packageManager;
            ProjectManager = projectManager;
            if (ProjectManager != null)
            {
                _projectName = ProjectManager.Project.ProjectName;
            }
        }
Esempio n. 4
0
        public void InstallPackageWithOperationsExecuteAllOperations()
        {
            // Arrange
            var localRepository = new Mock<MockPackageRepository>() { CallBase = true }.As<ISharedPackageRepository>().Object;
            var sourceRepository = new MockPackageRepository();
            var projectSystem = new MockProjectSystem();
            var pathResolver = new DefaultPackagePathResolver(projectSystem);
            var projectManager = new ProjectManager(localRepository, pathResolver, new MockProjectSystem(), new MockPackageRepository());
            var packageManager = new VsPackageManager(TestUtils.GetSolutionManager(), sourceRepository, projectSystem, localRepository, new Mock<IRecentPackageRepository>().Object);

            var package = PackageUtility.CreatePackage("foo", "1.0", new[] { "hello" }, dependencies: new PackageDependency[] { new PackageDependency("bar") });
            sourceRepository.AddPackage(package);

            var package2 = PackageUtility.CreatePackage("bar", "2.0", new[] { "world" });
            sourceRepository.AddPackage(package2);

            var package3 = PackageUtility.CreatePackage("awesome", "1.0", new[] { "candy" });
            localRepository.AddPackage(package3);

            var operations = new PackageOperation[] {
                 new PackageOperation(package, PackageAction.Install),
                 new PackageOperation(package2, PackageAction.Install),
                 new PackageOperation(package3, PackageAction.Uninstall)
             };

            // Act
            packageManager.InstallPackage(projectManager, package, operations, ignoreDependencies: false, logger: NullLogger.Instance);

            // Assert
            Assert.IsTrue(packageManager.LocalRepository.Exists(package));
            Assert.IsTrue(packageManager.LocalRepository.Exists(package2));
            Assert.IsTrue(!packageManager.LocalRepository.Exists(package3));
            Assert.IsTrue(projectManager.LocalRepository.Exists(package));
            Assert.IsTrue(projectManager.LocalRepository.Exists(package2));
        }
Esempio n. 5
0
        private void Execute(PackageOperation operation)
        {
            bool isPackageInstalled = this.LocalRepository.Exists(operation.Package);

            if (operation.Action == PackageAction.Install)
            {
                if (isPackageInstalled)
                {
                    this.Logger.Log(MessageLevel.Info, NuGetResources.Log_PackageAlreadyInstalled, (object)operation.Package.GetFullName());
                }
                else if (this.WhatIf)
                {
                    this.Logger.Log(MessageLevel.Info, NuGetResources.Log_InstallPackage, (object)operation.Package);
                }
                else
                {
                    this.ExecuteInstall(operation.Package);
                }
            }
            else
            {
                if (!isPackageInstalled)
                {
                    return;
                }
                if (this.WhatIf)
                {
                    this.Logger.Log(MessageLevel.Info, NuGetResources.Log_UninstallPackage, (object)operation.Package);
                }
                else
                {
                    this.ExecuteUninstall(operation.Package);
                }
            }
        }
Esempio n. 6
0
        public Operation(
            PackageOperation operation,
            IProjectManager projectManager,
            IPackageManager packageManager)
            : base(operation.Package, operation.Action)
        {
            if (projectManager != null && packageManager != null)
            {
                throw new ArgumentException("Only one of packageManager and projectManager can be non-null");
            }

            if (operation.Target == PackageOperationTarget.PackagesFolder && packageManager == null)
            {
                throw new ArgumentNullException("packageManager");
            }

            if (operation.Target == PackageOperationTarget.Project && projectManager == null)
            {
                throw new ArgumentNullException("projectManager");
            }

            Target         = operation.Target;
            PackageManager = packageManager;
            ProjectManager = projectManager;
            if (ProjectManager != null)
            {
                _projectName = ProjectManager.Project.ProjectName;
            }
        }
Esempio n. 7
0
        private static async Task RunDeletePackageAsync(PackageOperation packageOperation, CloudBlockBlob packageBlob, IAsyncCollector <PackageDocument> documentDeleteCollector)
        {
            // Delete from index blob
            await packageBlob.DeleteIfExistsAsync();

            // Add delete from index actions
            await documentDeleteCollector.AddAsync(new PackageDocument(packageOperation.Id, packageOperation.Version));
        }
        private static async Task RunDeletePackageAsync(PackageOperation packageOperation, CloudBlockBlob packageBlob, ILogger log)
        {
            log.LogInformation("Deleting package {packageId}@{packageVersionNormalized} from blob storage...", packageOperation.Id, packageOperation.VersionNormalized);

            await packageBlob.DeleteIfExistsAsync();

            log.LogInformation("Deleted package {packageId}@{packageVersionNormalized} from blob storage.", packageOperation.Id, packageOperation.VersionNormalized);
        }
        public static List <PackageOperation> CreateListWithOneInstallOperationWithFile(string fileName)
        {
            PackageOperation operation = CreateInstallOperationWithFile(fileName);
            var operations             = new List <PackageOperation>();

            operations.Add(operation);
            return(operations);
        }
Esempio n. 10
0
        public FakePackage AddPackageInstallOperation()
        {
            var package   = new FakePackage("Package to install");
            var operation = new PackageOperation(package, PackageAction.Install);

            PackageOperations.Add(operation);
            return(package);
        }
Esempio n. 11
0
        public void Execute_UpdatePackagesActionWithOnePackageOperation_PackagesUpdatedUsingProject()
        {
            PackageOperation operation = CreateInstallOperationWithFile(@"tools\readme.txt");

            CreateActionWithOperations(operation);

            action.Execute();

            project.AssertWasCalled(p => p.UpdatePackages(action));
        }
        public void HasPackageScriptsToRun_PackageHasInitPowerShellScript_ReturnsTrue()
        {
            PackageOperation operation = CreateInstallOperationWithFile(@"tools\install.ps1");

            CreateActionWithOperations(operation);

            bool result = action.HasPackageScriptsToRun();

            Assert.IsTrue(result);
        }
Esempio n. 13
0
        FakeInstallPackageAction CreateInstallActionWithOneOperation()
        {
            var operations = new PackageOperation[] {
                new PackageOperation(new FakePackage(), PackageAction.Install)
            };
            FakeInstallPackageAction action = CreateInstallAction();

            action.Operations = operations;
            return(action);
        }
        public void HasPackageScriptsToRun_PackageHasOneTextFile_ReturnsFalse()
        {
            PackageOperation operation = CreateInstallOperationWithFile(@"tools\readme.txt");

            CreateActionWithOperations(operation);

            bool result = action.HasPackageScriptsToRun();

            Assert.IsFalse(result);
        }
Esempio n. 15
0
        FakePackage InstallPackageWithPackageOperations(PackageOperation operation)
        {
            var operations = new PackageOperation[] {
                operation
            };
            FakePackage package = CreateFakePackage();

            packageManager.InstallPackage(package, operations);
            return(package);
        }
Esempio n. 16
0
            internal void AddOperation(PackageOperation operation)
            {
                Dictionary <IPackage, PackageOperation> packageLookup = this.GetPackageLookup(operation.Action, true);

                if (!packageLookup.ContainsKey(operation.Package))
                {
                    packageLookup.Add(operation.Package, operation);
                    this._operations.Add(operation);
                }
            }
Esempio n. 17
0
        public static void Run(
            [NuGetCatalogTrigger(CursorBlobName = nameof(Enqueuer))] PackageOperation packageOperation,
            [Queue(Constants.IndexingQueue, Connection = Constants.IndexingQueueConnection)] ICollector <PackageOperation> queueCollector,
            ILogger logger)
        {
            // Log
            logger.LogInformation(packageOperation.Action + ": " + packageOperation.Id + "@" + packageOperation.Version);

            // Forward...
            queueCollector.Add(packageOperation);
        }
Esempio n. 18
0
        public void Reduce_OnePackage_ReturnsPackageOperationsFromResolverForPackage()
        {
            CreateReducedPackageOperations();
            IPackage         package   = AddPackage("Test", "1.0");
            PackageOperation operation = AddInstallOperationForPackage(package);

            reducedPackageOperations.Reduce();

            Assert.AreEqual(1, reducedPackageOperations.Operations.Count());
            Assert.AreEqual(operation, reducedPackageOperations.Operations.First());
        }
        public void UpdatePackage_PackageInstanceAndOneInstallPackageOperationPassed_PackageDefinedInOperationIsInstalledInLocalRepository()
        {
            CreatePackageManager();
            CreateTestableProjectManager();

            PackageOperation operation = CreateOneInstallPackageOperation();

            UpdatePackageWithPackageOperations(operation);

            Assert.AreEqual(operation.Package, fakeSolutionSharedRepository.FirstPackageAdded);
        }
Esempio n. 20
0
        public void AddPackage_PackageAddedSuccessfully_PackageOperationsUsedWhenInstallingPackage()
        {
            CreateViewModel();
            viewModel.AddPackage();

            PackageOperation[] expectedOperations = new PackageOperation[] {
                new PackageOperation(package, PackageAction.Install)
            };

            CollectionAssert.AreEqual(expectedOperations, packageManagementService.PackageOperationsPassedToInstallPackage);
        }
        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);
        }
        public void AddPackage_OnePackageOperationIsToUninstallPackageWhichRequiresLicenseAcceptance_UserIsNotAskedToAcceptLicenseAgreementForPackageToBeUninstalled()
        {
            CreateViewModel();
            fakePackage.RequireLicenseAcceptance = false;
            PackageOperation operation          = viewModel.AddOneFakeUninstallPackageOperation();
            FakePackage      packageToUninstall = operation.Package as FakePackage;

            packageToUninstall.RequireLicenseAcceptance = true;
            viewModel.AddPackage();

            Assert.IsFalse(fakePackageManagementEvents.IsOnAcceptLicensesCalled);
        }
Esempio n. 23
0
        public void Execute_PackageScriptRunnerSet_PackagesAreUpdated()
        {
            CreateAction();
            PackageOperation operation = CreateInstallOperationWithFile(@"tools\readme.txt");

            CreateActionWithOperations(operation);
            action.PackageScriptRunner = CreatePackageScriptRunner();

            action.Execute();

            project.AssertWasCalled(p => p.UpdatePackages(action));
        }
        public void AddPackage_PackageAddedSuccessfully_PackageOperationsUsedWhenInstallingPackage()
        {
            CreateViewModel();
            viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
            viewModel.AddPackage();

            PackageOperation[] expectedOperations = new PackageOperation[] {
                new PackageOperation(fakePackage, PackageAction.Install)
            };

            CollectionAssert.AreEqual(expectedOperations, fakeInstallPackageAction.Operations);
        }
Esempio n. 25
0
        public static async Task RunAsync(
            [QueueTrigger(Constants.IndexingQueue, Connection = Constants.IndexingQueueConnection)] PackageOperation packageOperation,
            [Blob("index/{Id}.{VersionNormalized}.json", FileAccess.ReadWrite, Connection = Constants.IndexConnection)] CloudBlockBlob packageBlob,
            ILogger log)
        {
            var indexClient  = SearchServiceClient.Indexes.GetClient(Constants.SearchServiceIndexName);
            var indexActions = new List <IndexAction <PackageDocument> >();

            // Build actions
            if (packageOperation.IsAdd())
            {
                await RunAddPackageAsync(packageOperation, packageBlob, log, indexActions);
            }
            else if (packageOperation.IsDelete())
            {
                await RunDeletePackageAsync(packageOperation, packageBlob, indexClient, indexActions);
            }

            // Commit changes to index
            if (!Constants.DevCommitToSearchIndex)
            {
                return;
            }

            log.LogInformation("Committing changes for package {packageId}@{packageVersionNormalized} to index...", packageOperation.Id, packageOperation.Version);
            foreach (var actions in indexActions.Paged(BatchCommitSize))
            {
                var indexBatch = IndexBatch.New(actions);
                try
                {
                    log.LogInformation("Committing batch to index...");
                    await indexClient.Documents.IndexAsync(indexBatch);

                    log.LogInformation("Committed batch to index.");
                }
                catch (IndexBatchException ex)
                {
                    log.LogError("Error while committing batch to index.", ex);
                    foreach (var result in ex.IndexingResults)
                    {
                        if (result.Succeeded)
                        {
                            continue;
                        }

                        log.LogError("Result for {key}: {message}", result.Key, result.ErrorMessage);
                    }
                    throw;
                }
            }
            log.LogInformation("Finished committing changes for package {packageId}@{packageVersionNormalized} to index.", packageOperation.Id, packageOperation.Version);
        }
        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);
        }
Esempio n. 27
0
        public void Reduce_OncePackageOperationInstallsPackageWhilstOneUninstallsSamePackage_PackageOperationNotIncludedInReducedSet()
        {
            CreateReducedPackageOperations();
            IPackage         package            = AddPackage("Test", "1.0");
            PackageOperation installOperation   = CreatePackageOperation("Foo", "1.0", PackageAction.Install);
            PackageOperation uninstallOperation = CreatePackageOperation("Foo", "1.0", PackageAction.Uninstall);

            AddInstallOperationsForPackage(package, installOperation, uninstallOperation);

            reducedPackageOperations.Reduce();

            Assert.AreEqual(0, reducedPackageOperations.Operations.Count());
        }
        void AddInstallOperationWithFile(string fileName)
        {
            var package = new FakePackage();

            package.AddFile(fileName);

            var operation  = new PackageOperation(package, PackageAction.Install);
            var operations = new List <PackageOperation>();

            operations.Add(operation);

            action.Operations = operations;
        }
        public void Execute_OneProjectThatHasOlderVersionOfPackageBeingUpdated_PackagesUpdatedEventIsFired()
        {
            PackageOperation operation = CreateInstallOperationWithFile(@"tools\readme.txt");

            CreateActionWithOperations(operation);
            IPackageFromRepository    package = AddPackageToAction("Test", "1.0");
            IPackageManagementProject project = AddProjectToSolution();
            var expectedOperations            = new PackageOperation[] { operation };

            action.Execute();

            packageEvents.AssertWasCalled(events => events.OnParentPackagesUpdated(action.Packages));
        }
        public void AddPackage_PackageAddedSuccessfully_PackageOperationsUsedWhenInstallingPackage()
        {
            CreateViewModel();
            viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
            viewModel.AddPackage();

            PackageOperation[] expectedOperations = new PackageOperation[] {
                new PackageOperation(fakePackage, PackageAction.Install)
            };

            FakeInstallPackageAction action = fakeSolution.FakeProjectToReturnFromGetProject.LastInstallPackageCreated;

            CollectionAssert.AreEqual(expectedOperations, action.Operations);
        }
        public void GetInstallPackageOperations_PackageOperationResolverFactoryUsed_PackageOperationsReturnedFromPackageOperationsResolverCreated()
        {
            CreatePackageManager();
            var package            = new FakePackage();
            var expectedOperations = new PackageOperation [] {
                new PackageOperation(package, PackageAction.Install)
            };

            fakePackageOperationResolver.AddOperations(package, expectedOperations);

            IEnumerable <PackageOperation> operations = GetInstallPackageOperations(package);

            Assert.AreEqual(expectedOperations, operations);
        }
Esempio n. 32
0
        public void Reduce_TwoPackages_ReturnsPackageOperationsForBothPackages()
        {
            CreateReducedPackageOperations();
            IPackage         package1   = AddPackage("Test", "1.0");
            IPackage         package2   = AddPackage("Test2", "1.0");
            PackageOperation operation1 = AddInstallOperationForPackage(package1);
            PackageOperation operation2 = AddInstallOperationForPackage(package2);

            reducedPackageOperations.Reduce();

            Assert.AreEqual(2, reducedPackageOperations.Operations.Count());
            AssertReducedOperationsContains(operation1);
            AssertReducedOperationsContains(operation2);
        }
Esempio n. 33
0
        public override void Execute(PackageOperation op)
        {
            // Try to get the project for this project manager
            Project project = _packageManager.GetProject(this);
            IVsProjectBuildSystem build = null;
            if (project != null)
            {
                build = project.ToVsProjectBuildSystem();
            }

            try
            {
                if (build != null)
                {
                    // Start a batch edit so there is no background compilation until we're done
                    // processing project actions
                    build.StartBatchEdit();
                }

                base.Execute(op);
            }
            finally
            {
                if (build != null)
                {
                    // End the batch edit when we are done.
                    build.EndBatchEdit();
                }
            }

            var eventArgs = CreateOperation(op.Package);
            if (op.Action == PackageAction.Install)
            {
                _packageManager.PackageEvents.NotifyReferenceAdded(eventArgs);
            }
            else
            {
                _packageManager.PackageEvents.NotifyReferenceRemoved(eventArgs);
            }
        }
Esempio n. 34
0
 private void AssertOperation(string expectedId, string expectedVersion, PackageAction expectedAction, PackageOperation operation)
 {
     Assert.Equal(expectedAction, operation.Action);
     Assert.Equal(expectedId, operation.Package.Id);
     Assert.Equal(new SemanticVersion(expectedVersion), operation.Package.Version);
 }
Esempio n. 35
0
#pragma warning restore 0067

        public void Execute(PackageOperation operation)
        {
            // no-op
        }
 public void Execute(PackageOperation operation)
 {
     System.Diagnostics.Debug.Assert(false, "Didn't expect this to be called!");
     throw new NotImplementedException();
 }
        public void UpdatePackageWithNoProjectsInstallsAtSolutionLevel()
        {
            // Arrange 
            var localRepository = new Mock<MockPackageRepository>() { CallBase = true }.As<ISharedPackageRepository>().Object;
            var sourceRepository = new MockPackageRepository();
            var projectSystem = new MockProjectSystem();
            var pathResolver = new DefaultPackagePathResolver(projectSystem);
            var packageManager = new VsPackageManager(TestUtils.GetSolutionManager(), sourceRepository, new Mock<IFileSystemProvider>().Object, projectSystem, localRepository, new Mock<IDeleteOnRestartManager>().Object, new Mock<VsPackageInstallerEvents>().Object);

            var package = PackageUtility.CreatePackage("foo", "1.0", dependencies: new PackageDependency[] { new PackageDependency("bar") });
            sourceRepository.AddPackage(package);

            var package2 = PackageUtility.CreatePackage("bar", "2.0");
            sourceRepository.AddPackage(package2);

            var package3 = PackageUtility.CreatePackage("awesome", "1.0");
            localRepository.AddPackage(package3);

            var operations = new PackageOperation[] {  
                 new PackageOperation(package, PackageAction.Install), 
                 new PackageOperation(package2, PackageAction.Install), 
                 new PackageOperation(package3, PackageAction.Uninstall) 
             };

            // Act 
            packageManager.UpdatePackage(Enumerable.Empty<Project>(),
                                         package,
                                         operations,
                                         updateDependencies: true,
                                         allowPrereleaseVersions: false,
                                         logger: NullLogger.Instance,
                                         packageOperationEventListener: null);

            // Assert 
            Assert.True(packageManager.LocalRepository.Exists(package));
            Assert.True(packageManager.LocalRepository.Exists(package2));
            Assert.True(!packageManager.LocalRepository.Exists(package3));
        }
        public void UpdatePackagesWithOperationsAddPackageCorrectly()
        {
            // Arrange            
            var localRepository = new MockSharedPackageRepository();

            var projectRepository = new MockProjectPackageRepository(localRepository);
            var sourceRepository = new MockPackageRepository();
            var fileSystem = new MockFileSystem();
            var pathResolver = new DefaultPackagePathResolver(fileSystem);
            var A1 = PackageUtility.CreatePackage("A", "1.0", new[] { "hello1" });
            var A2 = PackageUtility.CreatePackage("A", "2.0", new[] { "hello2" });
            var A3 = PackageUtility.CreatePackage("A", "3.0", new[] { "hello3" });

            var B1 = PackageUtility.CreatePackage("B", "1.0", new[] { "world1" });
            var B2 = PackageUtility.CreatePackage("B", "2.0", new[] { "world2" });

            sourceRepository.AddPackage(A2);
            sourceRepository.AddPackage(A3);
            sourceRepository.AddPackage(B1);
            sourceRepository.AddPackage(B2);

            localRepository.AddPackage(A1);
            localRepository.AddPackage(B1);

            projectRepository.Add(A1);
            projectRepository.Add(B1);

            var packageManager = new VsPackageManager(TestUtils.GetSolutionManager(), sourceRepository, new Mock<IFileSystemProvider>().Object, fileSystem, localRepository, new Mock<IDeleteOnRestartManager>().Object, new Mock<VsPackageInstallerEvents>().Object);
            var projectManager = new ProjectManager(localRepository, pathResolver, new MockProjectSystem(), projectRepository);
 
            var operations = new PackageOperation[] {
                new PackageOperation(A3, PackageAction.Install),
                new PackageOperation(B2, PackageAction.Install)
            };

            // Act
            packageManager.UpdatePackages(projectManager, new[] { A3, B2 }, operations, updateDependencies: true, allowPrereleaseVersions: true, logger: NullLogger.Instance);

            // Assert
            Assert.True(localRepository.Exists("A", new SemanticVersion("3.0")));
            Assert.False(localRepository.Exists("A", new SemanticVersion("2.0")));
            Assert.False(localRepository.Exists("A", new SemanticVersion("1.0")));

            Assert.True(localRepository.Exists("B", new SemanticVersion("2.0")));
            Assert.False(localRepository.Exists("B", new SemanticVersion("1.0")));

            Assert.True(projectRepository.Exists("A", new SemanticVersion("3.0")));
            Assert.True(projectRepository.Exists("B", new SemanticVersion("2.0")));
        }
        public void InstallPackageUninstalledSolutionLevelPackagesAreNotAddedToSolutionPackageConfig()
        {
            // Arrange 
            var localRepository = new MockSharedPackageRepository();
            var sourceRepository = new MockPackageRepository();
            var projectSystem = new MockProjectSystem();
            var pathResolver = new DefaultPackagePathResolver(projectSystem);
            var projectManager = new ProjectManager(localRepository, pathResolver, new MockProjectSystem(), new MockPackageRepository());
            var packageManager = new VsPackageManager(TestUtils.GetSolutionManager(), sourceRepository, new Mock<IFileSystemProvider>().Object, projectSystem, localRepository, new Mock<IDeleteOnRestartManager>().Object, new Mock<VsPackageInstallerEvents>().Object);

            var packageFoo = PackageUtility.CreatePackage("foo", "1.0", content: new[] { "hello" });
            sourceRepository.AddPackage(packageFoo);

            var packageBar1 = PackageUtility.CreatePackage("bar1", "2.0",
                tools: new[] { "install.ps1" });
            sourceRepository.AddPackage(packageBar1);

            var packageBar2 = PackageUtility.CreatePackage("bar2", "2.0",
                tools: new[] { "install.ps1" });
            sourceRepository.AddPackage(packageBar2);

            var operations = new PackageOperation[] {  
                 new PackageOperation(packageFoo, PackageAction.Install), 
                 new PackageOperation(packageBar1, PackageAction.Uninstall), 
                 new PackageOperation(packageBar2, PackageAction.Uninstall)
            };

            // Act 
            packageManager.InstallPackage(
                projectManager, packageFoo, operations,
                ignoreDependencies: false, allowPrereleaseVersions: false, logger: NullLogger.Instance);

            // Assert
            Assert.False(localRepository.IsReferenced("bar1", new SemanticVersion("2.0")));
            Assert.False(localRepository.IsReferenced("bar2", new SemanticVersion("2.0")));

            Assert.True(packageManager.LocalRepository.Exists(packageFoo));
            Assert.True(projectManager.LocalRepository.Exists(packageFoo));
        }
        public void InstallPackageWithOperationsInstallsMetaPackageSuccessfully()
        {
            // Arrange 
            var localRepository = new Mock<MockPackageRepository>() { CallBase = true }.As<ISharedPackageRepository>().Object;
            var sourceRepository = new MockPackageRepository();
            var projectSystem = new MockProjectSystem();
            var pathResolver = new DefaultPackagePathResolver(projectSystem);
            var projectManager = new ProjectManager(localRepository, pathResolver, new MockProjectSystem(), new MockPackageRepository());
            var packageManager = new VsPackageManager(TestUtils.GetSolutionManager(), sourceRepository, new Mock<IFileSystemProvider>().Object, projectSystem, localRepository, new Mock<IDeleteOnRestartManager>().Object, new Mock<VsPackageInstallerEvents>().Object);

            var package = PackageUtility.CreatePackage("foo", "1.0", dependencies: new [] { new PackageDependency("bar") });
            sourceRepository.AddPackage(package);

            var package2 = PackageUtility.CreatePackage("bar", "2.0", content: new[] { "world" });
            sourceRepository.AddPackage(package2);

            var operations = new PackageOperation[] {  
                 new PackageOperation(package, PackageAction.Install), 
                 new PackageOperation(package2, PackageAction.Install), 
             };

            // Act 
            packageManager.InstallPackage(projectManager, package, operations, ignoreDependencies: false, allowPrereleaseVersions: false, logger: NullLogger.Instance);

            // Assert 
            Assert.True(packageManager.LocalRepository.Exists(package));
            Assert.True(packageManager.LocalRepository.Exists(package2));

            Assert.True(projectManager.LocalRepository.Exists(package));
            Assert.True(projectManager.LocalRepository.Exists(package2));
        }