public async Task CopyPackagesToOriginalCaseAsync_WhenPackageMustComeFromProvider_ConvertsPackagesAsync()
        {
            // Arrange
            using (var workingDirectory = TestDirectory.Create())
            {
                var packagesDirectory = Path.Combine(workingDirectory, "packages");
                var sourceDirectory   = Path.Combine(workingDirectory, "source");

                // Add the package to the source.
                var identity    = new PackageIdentity("PackageA", NuGetVersion.Parse("1.0.0-Beta"));
                var packagePath = await SimpleTestPackageUtility.CreateFullPackageAsync(
                    sourceDirectory,
                    identity.Id,
                    identity.Version.ToString());

                var logger = new TestLogger();
                var graph  = GetRestoreTargetGraph(sourceDirectory, identity, packagePath, logger);

                var request  = GetRestoreRequest(packagesDirectory, logger);
                var resolver = new VersionFolderPathResolver(packagesDirectory, isLowercase: false);

                var target = new OriginalCaseGlobalPackageFolder(request);

                // Act
                await target.CopyPackagesToOriginalCaseAsync(
                    new[] { graph },
                    CancellationToken.None);

                // Assert
                Assert.True(File.Exists(resolver.GetPackageFilePath(identity.Id, identity.Version)));
                Assert.Equal(1, logger.Messages.Count(x => x.Contains(identity.ToString())));
            }
        }
        public void ConvertLockFileToOriginalCase_ConvertsPackagesPathsInLockFile()
        {
            // Arrange
            var logger         = new TestLogger();
            var request        = GetRestoreRequest("fake", logger);
            var packageLibrary = new LockFileLibrary
            {
                Name    = "PackageA",
                Version = NuGetVersion.Parse("1.0.0-Beta"),
                Path    = "packagea/1.0.0-beta",
                Type    = LibraryType.Package
            };
            var projectLibrary = new LockFileLibrary
            {
                Name    = "Project",
                Version = NuGetVersion.Parse("1.0.0-Beta"),
                Path    = "project",
                Type    = LibraryType.Project
            };
            var lockFile = new LockFile
            {
                Libraries = { packageLibrary, projectLibrary }
            };

            var target = new OriginalCaseGlobalPackageFolder(request);

            // Act
            target.ConvertLockFileToOriginalCase(lockFile);

            // Assert
            Assert.Equal("PackageA/1.0.0-Beta", packageLibrary.Path);
            Assert.Equal("project", projectLibrary.Path);
        }
示例#3
0
        public async Task CopyPackagesToOriginalCaseAsync_EmitsTelemetryWithParentIdAsync()
        {
            // Set up telemetry service
            var telemetryEvents = new ConcurrentQueue <TelemetryEvent>();
            var telSvc          = new Mock <INuGetTelemetryService>();

            telSvc.Setup(x => x.EmitTelemetryEvent(It.IsAny <TelemetryEvent>()))
            .Callback <TelemetryEvent>(x => telemetryEvents.Enqueue(x));
            TelemetryActivity.NuGetTelemetryService = telSvc.Object;

            var parentIdGuid = Guid.NewGuid();

            // Arrange
            using (var workingDirectory = TestDirectory.Create())
            {
                var packagesDirectory = Path.Combine(workingDirectory, "packages");
                var sourceDirectory   = Path.Combine(workingDirectory, "source");

                var identity    = new PackageIdentity("PackageA", NuGetVersion.Parse("1.0.0-Beta"));
                var packagePath = await SimpleTestPackageUtility.CreateFullPackageAsync(
                    sourceDirectory,
                    identity.Id,
                    identity.Version.ToString());

                var logger = new TestLogger();
                var graphA = GetRestoreTargetGraph(sourceDirectory, identity, packagePath, logger);
                var graphB = GetRestoreTargetGraph(sourceDirectory, identity, packagePath, logger);

                var request  = GetRestoreRequest(packagesDirectory, logger);
                var resolver = new VersionFolderPathResolver(packagesDirectory, isLowercase: false);

                var target = new OriginalCaseGlobalPackageFolder(request, parentIdGuid);

                // Act
                await target.CopyPackagesToOriginalCaseAsync(
                    new[] { graphA, graphB },
                    CancellationToken.None);
            }

            // Assert
            var eventSingleCollection = telemetryEvents.Where(x => x.Name == "PackageExtractionInformation");

            Assert.Single(eventSingleCollection);
            var evt = eventSingleCollection.Single();

            Assert.NotNull(evt["ParentId"]);
            Assert.Equal(evt["ParentId"], parentIdGuid.ToString());
        }
        public async Task CopyPackagesToOriginalCaseAsync_DoesNothingIfPackageIsAlreadyInstalledAsync()
        {
            // Arrange
            using (var workingDirectory = TestDirectory.Create())
            {
                var packagesDirectory = Path.Combine(workingDirectory, "packages");
                var sourceDirectory   = Path.Combine(workingDirectory, "source");

                var identity    = new PackageIdentity("PackageA", NuGetVersion.Parse("1.0.0-Beta"));
                var packagePath = await SimpleTestPackageUtility.CreateFullPackageAsync(
                    sourceDirectory,
                    identity.Id,
                    identity.Version.ToString());

                var logger = new TestLogger();
                var graph  = GetRestoreTargetGraph(sourceDirectory, identity, packagePath, logger);

                var request  = GetRestoreRequest(packagesDirectory, logger);
                var resolver = new VersionFolderPathResolver(packagesDirectory, isLowercase: false);

                var hashPath = resolver.GetNupkgMetadataPath(identity.Id, identity.Version);
                Directory.CreateDirectory(Path.GetDirectoryName(hashPath));

                // The hash file is what determines if the package is installed or not.
                File.WriteAllText(hashPath, string.Empty);

                var target = new OriginalCaseGlobalPackageFolder(request);

                // Act
                await target.CopyPackagesToOriginalCaseAsync(
                    new[] { graph },
                    CancellationToken.None);

                // Assert
                Assert.True(File.Exists(resolver.GetNupkgMetadataPath(identity.Id, identity.Version)));
                Assert.Equal(0, logger.Messages.Count(x => x.Contains(identity.ToString())));
            }
        }