public void ReturnsSemVer2ForSemVer2CompliantPackagesThatAreNotSemVer1Compliant(string originalVersionString)
            {
                // Arrange
                var nugetVersion = NuGetVersion.Parse(originalVersionString);

                // Act
                var key = SemVerLevelKey.ForPackage(nugetVersion, null);

                // Assert
                Assert.Equal(SemVerLevelKey.SemVer2, key);
            }
            public void ReturnsUnknownForNonSemVer2CompliantPackages(string originalVersionString)
            {
                // Arrange
                var nugetVersion = NuGetVersion.Parse(originalVersionString);

                // Act
                var key = SemVerLevelKey.ForPackage(nugetVersion, null);

                // Assert
                Assert.Equal(SemVerLevelKey.Unknown, key);
            }
Esempio n. 3
0
        private static PackageUploadService CreateService(
            Mock <IPackageService> packageService = null,
            Mock <IReservedNamespaceService> reservedNamespaceService = null,
            Mock <IValidationService> validationService = null)
        {
            if (packageService == null)
            {
                packageService = new Mock <IPackageService>();
            }

            packageService.Setup(x => x.FindPackageRegistrationById(It.IsAny <string>())).Returns((PackageRegistration)null);
            packageService.Setup(x => x
                                 .CreatePackageAsync(It.IsAny <PackageArchiveReader>(), It.IsAny <PackageStreamMetadata>(), It.IsAny <User>(), It.IsAny <User>(), It.IsAny <bool>()))
            .Returns((PackageArchiveReader packageArchiveReader, PackageStreamMetadata packageStreamMetadata, User owner, User currentUser, bool isVerified) =>
            {
                var packageMetadata = PackageMetadata.FromNuspecReader(
                    packageArchiveReader.GetNuspecReader(),
                    strict: true);

                var newPackage = new Package();
                newPackage.PackageRegistration = new PackageRegistration {
                    Id = packageMetadata.Id, IsVerified = isVerified
                };
                newPackage.Version        = packageMetadata.Version.ToString();
                newPackage.SemVerLevelKey = SemVerLevelKey.ForPackage(packageMetadata.Version, packageMetadata.GetDependencyGroups().AsPackageDependencyEnumerable());

                return(Task.FromResult(newPackage));
            });

            if (reservedNamespaceService == null)
            {
                reservedNamespaceService = new Mock <IReservedNamespaceService>();

                reservedNamespaceService
                .Setup(r => r.GetReservedNamespacesForId(It.IsAny <string>()))
                .Returns(new ReservedNamespace[0]);
            }

            if (validationService == null)
            {
                validationService = new Mock <IValidationService>();
            }

            var packageUploadService = new Mock <PackageUploadService>(
                packageService.Object,
                new Mock <IPackageFileService>().Object,
                new Mock <IEntitiesContext>().Object,
                reservedNamespaceService.Object,
                validationService.Object);

            return(packageUploadService.Object);
        }
            public void ReturnsUnknownForNonSemVer2CompliantDependenciesThatAreNotSemVer1Compliant(string versionSpec)
            {
                // Arrange
                var packageVersion = NuGetVersion.Parse("1.0.0");
                var dependency     = new PackageDependency {
                    VersionSpec = versionSpec
                };

                // Act
                var key = SemVerLevelKey.ForPackage(packageVersion, new[] { dependency });

                // Assert
                Assert.Equal(SemVerLevelKey.Unknown, key);
            }
Esempio n. 5
0
        private static PackageUploadService CreateService(
            Mock <IPackageService> packageService = null,
            Mock <IReservedNamespaceService> reservedNamespaceService = null)
        {
            {
                if (packageService == null)
                {
                    packageService = new Mock <IPackageService>();
                }
                packageService.Setup(x => x.FindPackageRegistrationById(It.IsAny <string>())).Returns((PackageRegistration)null);
                packageService.Setup(x => x.CreatePackageAsync(It.IsAny <PackageArchiveReader>(), It.IsAny <PackageStreamMetadata>(), It.IsAny <User>(), It.IsAny <bool>(), It.IsAny <bool>())).
                Returns((PackageArchiveReader packageArchiveReader, PackageStreamMetadata packageStreamMetadata, User user, bool isVerified, bool commitChanges) =>
                {
                    var packageMetadata = PackageMetadata.FromNuspecReader(packageArchiveReader.GetNuspecReader());

                    var newPackage = new Package();
                    newPackage.PackageRegistration = new PackageRegistration {
                        Id = packageMetadata.Id, IsVerified = isVerified
                    };
                    newPackage.Version        = packageMetadata.Version.ToString();
                    newPackage.SemVerLevelKey = SemVerLevelKey.ForPackage(packageMetadata.Version, packageMetadata.GetDependencyGroups().AsPackageDependencyEnumerable());

                    return(Task.FromResult(newPackage));
                });
            }

            if (reservedNamespaceService == null)
            {
                reservedNamespaceService = new Mock <IReservedNamespaceService>();
                IReadOnlyCollection <ReservedNamespace> userOwnedMatchingNamespaces = new List <ReservedNamespace>();
                reservedNamespaceService.Setup(s => s.IsPushAllowed(It.IsAny <string>(), It.IsAny <User>(), out userOwnedMatchingNamespaces))
                .Returns(true);
            }

            var packageUploadService = new Mock <PackageUploadService>(
                packageService.Object,
                reservedNamespaceService.Object);

            return(packageUploadService.Object);
        }
 public void ThrowsArgumentNullWhenOriginalVersionStringIsNull()
 {
     Assert.Throws <ArgumentNullException>(() => SemVerLevelKey.ForPackage(null, null));
 }
Esempio n. 7
0
        public virtual Package EnrichPackageFromNuGetPackage(
            Package package,
            PackageArchiveReader packageArchive,
            PackageMetadata packageMetadata,
            PackageStreamMetadata packageStreamMetadata,
            User user)
        {
            // Version must always be the exact string from the nuspec, which OriginalVersion will return to us.
            // However, we do also store a normalized copy for looking up later.
            package.Version           = packageMetadata.Version.OriginalVersion;
            package.NormalizedVersion = packageMetadata.Version.ToNormalizedString();

            package.Description               = packageMetadata.Description;
            package.ReleaseNotes              = packageMetadata.ReleaseNotes;
            package.HashAlgorithm             = packageStreamMetadata.HashAlgorithm;
            package.Hash                      = packageStreamMetadata.Hash;
            package.PackageFileSize           = packageStreamMetadata.Size;
            package.Language                  = packageMetadata.Language;
            package.Copyright                 = packageMetadata.Copyright;
            package.FlattenedAuthors          = packageMetadata.Authors.Flatten();
            package.IsPrerelease              = packageMetadata.Version.IsPrerelease;
            package.Listed                    = true;
            package.RequiresLicenseAcceptance = packageMetadata.RequireLicenseAcceptance;
            package.Summary                   = packageMetadata.Summary;
            package.Tags                      = PackageHelper.ParseTags(packageMetadata.Tags);
            package.Title                     = packageMetadata.Title;
            package.User                      = user;

            package.IconUrl          = packageMetadata.IconUrl.ToEncodedUrlStringOrNull();
            package.LicenseUrl       = packageMetadata.LicenseUrl.ToEncodedUrlStringOrNull();
            package.ProjectUrl       = packageMetadata.ProjectUrl.ToEncodedUrlStringOrNull();
            package.MinClientVersion = packageMetadata.MinClientVersion.ToStringOrNull();

#pragma warning disable 618 // TODO: remove Package.Authors completely once production services definitely no longer need it
            foreach (var author in packageMetadata.Authors)
            {
                package.Authors.Add(new PackageAuthor {
                    Name = author
                });
            }
#pragma warning restore 618

            var supportedFrameworks = GetSupportedFrameworks(packageArchive)
                                      .ToArray();

            if (!supportedFrameworks.Any(fx => fx != null && fx.IsAny))
            {
                var supportedFrameworkNames = supportedFrameworks
                                              .Select(fn => fn.ToShortNameOrNull())
                                              .Where(fn => fn != null)
                                              .ToArray();

                ValidateSupportedFrameworks(supportedFrameworkNames);

                foreach (var supportedFramework in supportedFrameworkNames)
                {
                    package.SupportedFrameworks.Add(new PackageFramework {
                        TargetFramework = supportedFramework
                    });
                }
            }

            package.Dependencies = packageMetadata
                                   .GetDependencyGroups()
                                   .AsPackageDependencyEnumerable()
                                   .ToList();

            package.PackageTypes = packageMetadata
                                   .GetPackageTypes()
                                   .AsPackageTypeEnumerable()
                                   .ToList();

            package.FlattenedDependencies = package.Dependencies.Flatten();

            package.FlattenedPackageTypes = package.PackageTypes.Flatten();

            // Identify the SemVerLevelKey using the original package version string and package dependencies
            package.SemVerLevelKey = SemVerLevelKey.ForPackage(packageMetadata.Version, package.Dependencies);

            return(package);
        }