PageRenderTime 61ms CodeModel.GetById 36ms RepoModel.GetById 1ms app.codeStats 0ms

/test/VisualStudio.Test/VsUninstallerTest.cs

https://bitbucket.org/afrischke/nuget-global-env
C# | 145 lines | 118 code | 16 blank | 11 comment | 0 complexity | 1e2c76ed81f5f7f35b94d2ec302b0c48 MD5 | raw file
  1. using System;
  2. using System.Runtime.Versioning;
  3. using Moq;
  4. using NuGet.Test;
  5. using NuGet.Test.Mocks;
  6. using Xunit;
  7. namespace NuGet.VisualStudio.Test
  8. {
  9. using PackageUtility = NuGet.Test.PackageUtility;
  10. public class VsUninstallerTest
  11. {
  12. [Fact]
  13. public void UninstallPackageExecutesUninstallScript()
  14. {
  15. // Arrange
  16. var activeRepository = new MockPackageRepository();
  17. var localRepository = new Mock<MockPackageRepository>() { CallBase = true };
  18. localRepository.As<ISharedPackageRepository>();
  19. var projectRepository = new MockProjectPackageRepository(localRepository.Object);
  20. var project = TestUtils.GetProject("Foo");
  21. var projectSystem = new MockProjectSystem(new FrameworkName(".NETCore, Version=4.5"));
  22. var projectManager = new ProjectManager(activeRepository, new DefaultPackagePathResolver(new MockFileSystem()), projectSystem, projectRepository);
  23. var package = PackageUtility.CreatePackage("A");
  24. var scriptExecutor = new Mock<IScriptExecutor>(MockBehavior.Strict);
  25. scriptExecutor.Setup(s => s.Execute(@"C:\MockFileSystem\A.1.0", "uninstall.ps1", package, project, new FrameworkName(".NETCore, Version=4.5"), NullLogger.Instance)).Returns(true).Verifiable();
  26. var packageManager = new Mock<VsPackageManager>(TestUtils.GetSolutionManager(), activeRepository, new Mock<IFileSystemProvider>().Object, new MockFileSystem(), localRepository.Object,
  27. new Mock<IDeleteOnRestartManager>().Object, new Mock<VsPackageInstallerEvents>().Object) { CallBase = true };
  28. var packageManagerFactory = new Mock<IVsPackageManagerFactory>();
  29. packageManagerFactory.Setup(m => m.CreatePackageManager(activeRepository, false)).Returns(packageManager.Object);
  30. packageManager.Setup(m => m.GetProjectManager(project)).Returns(projectManager).Verifiable();
  31. var packageUninstaller = new VsPackageUninstaller(packageManagerFactory.Object, activeRepository, scriptExecutor.Object);
  32. // Act
  33. localRepository.Object.AddPackage(package);
  34. packageUninstaller.UninstallPackage(project, "A", removeDependencies: true);
  35. // Assert
  36. scriptExecutor.Verify();
  37. Assert.False(localRepository.Object.Contains(package));
  38. }
  39. [Fact]
  40. public void UninstallPackageDoesNotRemoveDependenciesIfFlagIsFalse()
  41. {
  42. // Arrange
  43. var activeRepository = new MockPackageRepository();
  44. var localRepository = new Mock<MockPackageRepository>() { CallBase = true };
  45. localRepository.As<ISharedPackageRepository>();
  46. var projectRepository = new MockProjectPackageRepository(localRepository.Object);
  47. var project = TestUtils.GetProject("Foo");
  48. var projectSystem = new MockProjectSystem(new FrameworkName(".NETCore, Version=4.5"));
  49. var projectManager = new ProjectManager(activeRepository, new DefaultPackagePathResolver(new MockFileSystem()), projectSystem, projectRepository);
  50. var packageA = PackageUtility.CreatePackage("A", dependencies: new[] { new PackageDependency("B") });
  51. var packageB = PackageUtility.CreatePackage("B");
  52. var scriptExecutor = new Mock<IScriptExecutor>(MockBehavior.Strict);
  53. scriptExecutor.Setup(s => s.Execute(@"C:\MockFileSystem\A.1.0", "uninstall.ps1", packageA, project, new FrameworkName(".NETCore, Version=4.5"), NullLogger.Instance)).Returns(true).Verifiable();
  54. var packageManager = new Mock<VsPackageManager>(TestUtils.GetSolutionManager(), activeRepository, new Mock<IFileSystemProvider>().Object, new MockFileSystem(), localRepository.Object,
  55. new Mock<IDeleteOnRestartManager>().Object, new Mock<VsPackageInstallerEvents>().Object) { CallBase = true };
  56. var packageManagerFactory = new Mock<IVsPackageManagerFactory>();
  57. packageManagerFactory.Setup(m => m.CreatePackageManager(activeRepository, false)).Returns(packageManager.Object);
  58. packageManager.Setup(m => m.GetProjectManager(project)).Returns(projectManager).Verifiable();
  59. var packageUninstaller = new VsPackageUninstaller(packageManagerFactory.Object, activeRepository, scriptExecutor.Object);
  60. // Act
  61. localRepository.Object.AddPackage(packageA);
  62. localRepository.Object.AddPackage(packageB);
  63. packageUninstaller.UninstallPackage(project, "A", removeDependencies: false);
  64. // Assert
  65. scriptExecutor.Verify();
  66. Assert.False(localRepository.Object.Contains(packageA));
  67. Assert.True(localRepository.Object.Contains(packageB));
  68. }
  69. [Fact]
  70. public void UninstallPackageRemovesDependenciesIfFlagIsTrue()
  71. {
  72. // Arrange
  73. var activeRepository = new MockPackageRepository();
  74. var localRepository = new Mock<MockPackageRepository>() { CallBase = true };
  75. localRepository.As<ISharedPackageRepository>();
  76. var projectRepository = new MockProjectPackageRepository(localRepository.Object);
  77. var project = TestUtils.GetProject("Foo");
  78. var projectSystem = new MockProjectSystem();
  79. var projectManager = new ProjectManager(activeRepository, new DefaultPackagePathResolver(new MockFileSystem()), projectSystem, projectRepository);
  80. var packageA = PackageUtility.CreatePackage("A", dependencies: new[] { new PackageDependency("B") });
  81. var packageB = PackageUtility.CreatePackage("B");
  82. var scriptExecutor = new Mock<IScriptExecutor>(MockBehavior.Strict);
  83. scriptExecutor.Setup(s => s.Execute(@"C:\MockFileSystem\A.1.0", "uninstall.ps1", packageA, project, It.IsAny<FrameworkName>(), NullLogger.Instance)).Returns(true).Verifiable();
  84. scriptExecutor.Setup(s => s.Execute(@"C:\MockFileSystem\B.1.0", "uninstall.ps1", packageB, project, It.IsAny<FrameworkName>(), NullLogger.Instance)).Returns(true).Verifiable();
  85. var packageManager = new Mock<VsPackageManager>(TestUtils.GetSolutionManager(), activeRepository, new Mock<IFileSystemProvider>().Object, new MockFileSystem(), localRepository.Object,
  86. new Mock<IDeleteOnRestartManager>().Object, new Mock<VsPackageInstallerEvents>().Object) { CallBase = true };
  87. var packageManagerFactory = new Mock<IVsPackageManagerFactory>();
  88. packageManagerFactory.Setup(m => m.CreatePackageManager(activeRepository, false)).Returns(packageManager.Object);
  89. packageManager.Setup(m => m.GetProjectManager(project)).Returns(projectManager).Verifiable();
  90. var packageUninstaller = new VsPackageUninstaller(packageManagerFactory.Object, activeRepository, scriptExecutor.Object);
  91. // Act
  92. localRepository.Object.AddPackage(packageA);
  93. localRepository.Object.AddPackage(packageB);
  94. packageUninstaller.UninstallPackage(project, "A", removeDependencies: true);
  95. // Assert
  96. scriptExecutor.Verify();
  97. Assert.False(localRepository.Object.Contains(packageA));
  98. Assert.False(localRepository.Object.Contains(packageB));
  99. }
  100. [Fact]
  101. public void UninstallPackageDoesNotForceRemovesPackages()
  102. {
  103. // Arrange
  104. var activeRepository = new MockPackageRepository();
  105. var localRepository = new Mock<MockPackageRepository>() { CallBase = true };
  106. localRepository.As<ISharedPackageRepository>();
  107. var projectRepository = new MockProjectPackageRepository(localRepository.Object);
  108. var project = TestUtils.GetProject("Foo");
  109. var projectSystem = new MockProjectSystem();
  110. var projectManager = new ProjectManager(activeRepository, new DefaultPackagePathResolver(new MockFileSystem()), projectSystem, projectRepository);
  111. var packageA = PackageUtility.CreatePackage("A", dependencies: new[] { new PackageDependency("B") });
  112. var packageB = PackageUtility.CreatePackage("B");
  113. var scriptExecutor = new Mock<IScriptExecutor>(MockBehavior.Strict);
  114. scriptExecutor.Setup(s => s.Execute(@"C:\MockFileSystem\A.1.0", "uninstall.ps1", packageA, project, It.IsAny<FrameworkName>(), NullLogger.Instance)).Returns(true).Verifiable();
  115. var packageManager = new Mock<VsPackageManager>(TestUtils.GetSolutionManager(), activeRepository, new Mock<IFileSystemProvider>().Object, new MockFileSystem(), localRepository.Object,
  116. new Mock<IDeleteOnRestartManager>().Object, new Mock<VsPackageInstallerEvents>().Object) { CallBase = true };
  117. var packageManagerFactory = new Mock<IVsPackageManagerFactory>();
  118. packageManagerFactory.Setup(m => m.CreatePackageManager(activeRepository, false)).Returns(packageManager.Object);
  119. packageManager.Setup(m => m.GetProjectManager(project)).Returns(projectManager).Verifiable();
  120. var packageUninstaller = new VsPackageUninstaller(packageManagerFactory.Object, activeRepository, scriptExecutor.Object);
  121. // Act and Assert
  122. localRepository.Object.AddPackage(packageA);
  123. localRepository.Object.AddPackage(packageB);
  124. ExceptionAssert.Throws<InvalidOperationException>(() => packageUninstaller.UninstallPackage(project, "B", removeDependencies: true),
  125. "Unable to uninstall 'B 1.0' because 'A 1.0' depends on it.");
  126. }
  127. }
  128. }
  129. ;