public async Task GetInstalledPackagesAsync_LegacyProjectInvalidDataException_ReturnsProjectInvalidResultAsync() { // Arrange var projectGuid = Guid.NewGuid(); var settings = new Mock <ISettings>(); var telemetryProvider = new Mock <INuGetTelemetryProvider>(MockBehavior.Strict); // Emulate the InvalidDataException thrown by LegacyPackageReferenceProject when the project doesn't have MSBuildProjectExtensionsPath var project = new Mock <BuildIntegratedNuGetProject>(); project.Setup(p => p.GetPackageSpecsAndAdditionalMessagesAsync(It.IsAny <DependencyGraphCacheContext>())) .Throws <InvalidDataException>(); var solutionManager = new Mock <IVsSolutionManager>(); solutionManager.Setup(sm => sm.GetNuGetProjectAsync(projectGuid.ToString())) .Returns(() => Task.FromResult <NuGetProject>(project.Object)); // Act var target = new NuGetProjectService(solutionManager.Object, settings.Object, telemetryProvider.Object); InstalledPackagesResult actual = await target.GetInstalledPackagesAsync(projectGuid, CancellationToken.None); // Assert Assert.NotNull(actual); Assert.Equal(InstalledPackageResultStatus.ProjectInvalid, actual.Status); }
public async Task GetInstalledPackagesAsync_CpsProjectNotNominated_ReturnsProjectNotReadyResult() { // Arrange var projectGuid = Guid.NewGuid(); var settings = new Mock <ISettings>(); var telemetryProvider = new Mock <INuGetTelemetryProvider>(MockBehavior.Strict); // emulate the ProjectNotNominatedException when we have a CpsPackageReference project, but there's no nomination data yet. var project = new Mock <BuildIntegratedNuGetProject>(); project.Setup(p => p.GetPackageSpecsAndAdditionalMessagesAsync(It.IsAny <DependencyGraphCacheContext>())) .Throws <ProjectNotNominatedException>(); var solutionManager = new Mock <IVsSolutionManager>(); solutionManager.Setup(sm => sm.GetNuGetProjectAsync(projectGuid.ToString())) .Returns(() => Task.FromResult <NuGetProject>(project.Object)); // Act var target = new NuGetProjectService(solutionManager.Object, settings.Object, telemetryProvider.Object); InstalledPackagesResult actual = await target.GetInstalledPackagesAsync(projectGuid, CancellationToken.None); // Assert Assert.NotNull(actual); Assert.Equal(InstalledPackageResultStatus.ProjectNotReady, actual.Status); }
public async Task GetInstalledPackagesAsync_PackageReferenceProject_ReturnsTransitiveAsync() { // Arrange var projectGuid = Guid.NewGuid(); var settings = new Mock <ISettings>(); var telemetryProvider = new Mock <INuGetTelemetryProvider>(MockBehavior.Strict); var installedPackages = new List <PackageReference>() { new PackageReference(new PackageIdentity("a", new NuGetVersion(1, 0, 0)), FrameworkConstants.CommonFrameworks.Net50) }; var transitivePackages = new List <PackageReference>() { new PackageReference(new PackageIdentity("b", new NuGetVersion(1, 2, 3)), FrameworkConstants.CommonFrameworks.Net50) }; var transitiveProjectPackages = transitivePackages.Select(p => new TransitivePackageReference(p)).ToList(); var projectPackages = new ProjectPackages(installedPackages, transitiveProjectPackages); var project = new TestPackageReferenceProject("ProjectA", @"src\ProjectA\Project.csproj", @"c:\path\to\src\ProjectA\ProjectA.csproj", installedPackages, transitivePackages); var solutionManager = new Mock <IVsSolutionManager>(); solutionManager.Setup(sm => sm.GetNuGetProjectAsync(projectGuid.ToString())) .Returns(() => Task.FromResult <NuGetProject>(project)); // Act var target = new NuGetProjectService(solutionManager.Object, settings.Object, telemetryProvider.Object); InstalledPackagesResult actual = await target.GetInstalledPackagesAsync(projectGuid, CancellationToken.None); // Assert Assert.NotNull(actual); Assert.Equal(InstalledPackageResultStatus.Successful, actual.Status); NuGetInstalledPackage package = actual.Packages.FirstOrDefault(p => p.Id == "a"); Assert.NotNull(package); Assert.True(package.DirectDependency); package = actual.Packages.FirstOrDefault(p => p.Id == "b"); Assert.NotNull(package); Assert.False(package.DirectDependency); }