コード例 #1
0
        public void TheCtorSortsPackageVersionsProperly()
        {
            var package = new Package
            {
                Dependencies = Enumerable.Empty<PackageDependency>().ToList(),
                PackageRegistration = new PackageRegistration
                {
                    Owners = Enumerable.Empty<User>().ToList(),

                }
            };

            package.PackageRegistration.Packages = new Package[] 
            {
                new Package {Version = "1.0.0alpha2", PackageRegistration = package.PackageRegistration},
                new Package {Version = "1.0.0", PackageRegistration = package.PackageRegistration},
                new Package {Version = "1.0.0alpha", PackageRegistration = package.PackageRegistration},
                new Package {Version = "1.0.0beta", PackageRegistration = package.PackageRegistration},
                new Package {Version = "1.0.2beta", PackageRegistration = package.PackageRegistration},
                new Package {Version = "1.0.2", PackageRegistration = package.PackageRegistration},
                new Package {Version = "1.0.10", PackageRegistration = package.PackageRegistration}
            };

            var packageVersions = new DisplayPackageViewModel(package).PackageVersions.ToList();

            // Descending
            Assert.Equal("1.0.0alpha", packageVersions[6].Version);
            Assert.Equal("1.0.0alpha2", packageVersions[5].Version);
            Assert.Equal("1.0.0beta", packageVersions[4].Version);
            Assert.Equal("1.0.0", packageVersions[3].Version);
            Assert.Equal("1.0.2beta", packageVersions[2].Version);
            Assert.Equal("1.0.2", packageVersions[1].Version);
            Assert.Equal("1.0.10", packageVersions[0].Version);
        }
コード例 #2
0
        public void HasSemVer2DependencyIsFalseWhenNonSemVer2DependencyVersionSpec(string versionSpec)
        {
            // Arrange
            var package = CreateTestPackage("1.0.0", dependencyVersion: versionSpec);
            var history = package.PackageRegistration.Packages.OrderByDescending(p => p.Version);

            // Act
            var viewModel = new DisplayPackageViewModel(package, null, history);

            // Assert
            Assert.False(viewModel.HasSemVer2Dependency);
        }
コード例 #3
0
        public void ItInitializesProjectUrl(string projectUrl, string expected)
        {
            var package = new Package
            {
                Version    = "1.0.0",
                ProjectUrl = projectUrl
            };

            var model = new DisplayPackageViewModel(package, null, "test");

            Assert.Equal(expected, model.ProjectUrl);
        }
コード例 #4
0
        public void ItDeterminesRepositoryKind(string repoUrl, string repoType, RepositoryKind expectedKind)
        {
            var package = new Package
            {
                Version        = "1.0.0",
                RepositoryUrl  = repoUrl,
                RepositoryType = repoType,
            };
            var model = new DisplayPackageViewModel(package, null, "test");

            Assert.Equal(expectedKind, model.RepositoryType);
        }
コード例 #5
0
        public void HasSemVer2VersionIsTrueWhenSemVer2Version(string version)
        {
            // Arrange
            var package = CreateTestPackage(version);
            var history = package.PackageRegistration.Packages.OrderByDescending(p => p.Version);

            // Act
            var viewModel = new DisplayPackageViewModel(package, null, history);

            // Assert
            Assert.True(viewModel.HasSemVer2Version);
        }
コード例 #6
0
                public void ReturnsAnAddinDirective()
                {
                    var model = new DisplayPackageViewModel
                    {
                        Id      = "Cake.7zip",
                        Version = "1.0.0",
                        Tags    = new[] { "cake-addin" },
                    };

                    var actual = model.GetCakeInstallPackageCommand();

                    Assert.Equal("#addin nuget:?package=Cake.7zip&version=1.0.0", actual);
                }
コード例 #7
0
                public void ReturnsADotNetToolDirective()
                {
                    var model = new DisplayPackageViewModel
                    {
                        IsDotnetToolPackageType = true,
                        Id      = "dotnet-reportgenerator-globaltool",
                        Version = "1.0.0",
                    };

                    var actual = model.GetCakeInstallPackageCommand();

                    Assert.Equal("#tool dotnet:?package=dotnet-reportgenerator-globaltool&version=1.0.0", actual);
                }
コード例 #8
0
                public void ReturnsAModuleDirective()
                {
                    var model = new DisplayPackageViewModel
                    {
                        Id      = "Cake.BuildSystems.Module",
                        Version = "1.0.0",
                        Tags    = new[] { "cake-module" },
                    };

                    var actual = model.GetCakeInstallPackageCommand();

                    Assert.Equal("#module nuget:?package=Cake.BuildSystems.Module&version=1.0.0", actual);
                }
コード例 #9
0
                public void ReturnsALoadDirective()
                {
                    var model = new DisplayPackageViewModel
                    {
                        Id      = "Cake.Recipe",
                        Version = "1.0.0",
                        Tags    = new[] { "cake-recipe" },
                    };

                    var actual = model.GetCakeInstallPackageCommand();

                    Assert.Equal("#load nuget:?package=Cake.Recipe&version=1.0.0", actual);
                }
コード例 #10
0
        public void LicenseNamesAreParsedByCommas()
        {
            var package = new Package
            {
                LicenseUrl   = "https://mylicense.com",
                Version      = "1.0.0",
                LicenseNames = "l1,l2, l3 ,l4  ,  l5 ",
            };

            var packageViewModel = new DisplayPackageViewModel(package, currentUser: null, pushedBy: "test");

            Assert.Equal(new string[] { "l1", "l2", "l3", "l4", "l5" }, packageViewModel.LicenseNames);
        }
コード例 #11
0
                public void ReturnsMultipleDirectives(string[] tags)
                {
                    var model = new DisplayPackageViewModel
                    {
                        Id      = "Polly",
                        Version = "1.0.0",
                        Tags    = tags,
                    };

                    var actual = model.GetCakeInstallPackageCommand();

                    Assert.Contains("#addin nuget:?package=Polly&version=1.0.0", actual);
                    Assert.Contains("#tool nuget:?package=Polly&version=1.0.0", actual);
                }
コード例 #12
0
        public void TheCtorSortsPackageVersionsProperly()
        {
            var package = new Package
            {
                Version             = "1.0.0",
                Dependencies        = Enumerable.Empty <PackageDependency>().ToList(),
                PackageRegistration = new PackageRegistration
                {
                    Owners = Enumerable.Empty <User>().ToList(),
                }
            };

            package.PackageRegistration.Packages = new[]
            {
                new Package {
                    Version = "1.0.0-alpha2", PackageRegistration = package.PackageRegistration
                },
                new Package {
                    Version = "1.0.0", PackageRegistration = package.PackageRegistration
                },
                new Package {
                    Version = "1.0.0-alpha", PackageRegistration = package.PackageRegistration
                },
                new Package {
                    Version = "1.0.0-beta", PackageRegistration = package.PackageRegistration
                },
                new Package {
                    Version = "1.0.2-beta", PackageRegistration = package.PackageRegistration
                },
                new Package {
                    Version = "1.0.2", PackageRegistration = package.PackageRegistration
                },
                new Package {
                    Version = "1.0.10", PackageRegistration = package.PackageRegistration
                }
            };

            var packageVersions = new DisplayPackageViewModel(package, null, null)
                                  .PackageVersions.ToList();

            // Descending
            Assert.Equal("1.0.0-alpha", packageVersions[6].Version);
            Assert.Equal("1.0.0-alpha2", packageVersions[5].Version);
            Assert.Equal("1.0.0-beta", packageVersions[4].Version);
            Assert.Equal("1.0.0", packageVersions[3].Version);
            Assert.Equal("1.0.2-beta", packageVersions[2].Version);
            Assert.Equal("1.0.2", packageVersions[1].Version);
            Assert.Equal("1.0.10", packageVersions[0].Version);
        }
コード例 #13
0
        public void ItInitializesProjectUrl(string projectUrl, string expected)
        {
            var package = new Package
            {
                Version             = "1.0.0",
                ProjectUrl          = projectUrl,
                PackageRegistration = new PackageRegistration
                {
                    Owners   = Enumerable.Empty <User>().ToList(),
                    Packages = Enumerable.Empty <Package>().ToList()
                }
            };

            var model = new DisplayPackageViewModel(package, null, null);

            Assert.Equal(expected, model.ProjectUrl);
        }
コード例 #14
0
        public void LicenseNamesAreParsedByCommas()
        {
            var package = new Package
            {
                LicenseUrl          = "https://mylicense.com",
                Version             = "1.0.0",
                LicenseNames        = "l1,l2, l3 ,l4  ,  l5 ",
                PackageRegistration = new PackageRegistration
                {
                    Owners   = Enumerable.Empty <User>().ToList(),
                    Packages = Enumerable.Empty <Package>().ToList()
                }
            };

            var packageViewModel = new DisplayPackageViewModel(package, currentUser: null, deprecation: null);

            Assert.Equal(new string[] { "l1", "l2", "l3", "l4", "l5" }, packageViewModel.LicenseNames);
        }
コード例 #15
0
        public void AvgDownloadsPerDayConsidersOldestPackageVersionInHistory()
        {
            // Arrange
            var       utcNow = DateTime.UtcNow;
            const int daysSinceFirstPackageCreated = 10;
            const int totalDownloadCount           = 250;

            var packageRegistration = new PackageRegistration
            {
                Owners        = Enumerable.Empty <User>().ToList(),
                DownloadCount = totalDownloadCount
            };

            var package = new Package
            {
                // Simulating that lowest package version was pushed latest, on-purpose,
                // to assert we use the *oldest* package version in the calculation.
                Created             = utcNow,
                Dependencies        = Enumerable.Empty <PackageDependency>().ToList(),
                DownloadCount       = 10,
                PackageRegistration = packageRegistration,
                Version             = "1.0.0"
            };

            package.PackageRegistration.Packages = new[]
            {
                package,
                new Package {
                    Version = "1.0.1", PackageRegistration = packageRegistration, DownloadCount = 100, Created = utcNow.AddDays(-daysSinceFirstPackageCreated)
                },
                new Package {
                    Version = "2.0.1", PackageRegistration = packageRegistration, DownloadCount = 140, Created = utcNow.AddDays(-3)
                }
            };

            var packageHistory = packageRegistration.Packages.OrderByDescending(p => new NuGetVersion(p.Version));

            // Act
            var viewModel = new DisplayPackageViewModel(package, packageHistory);

            // Assert
            Assert.Equal(daysSinceFirstPackageCreated, viewModel.TotalDaysSinceCreated);
            Assert.Equal(totalDownloadCount / daysSinceFirstPackageCreated, viewModel.DownloadsPerDay);
        }
コード例 #16
0
        public void ItDeterminesRepositoryKind(string repoUrl, string repoType, RepositoryKind expectedKind, string expectedUrl)
        {
            var package = new Package
            {
                Version             = "1.0.0",
                RepositoryUrl       = repoUrl,
                RepositoryType      = repoType,
                PackageRegistration = new PackageRegistration
                {
                    Owners   = Enumerable.Empty <User>().ToList(),
                    Packages = Enumerable.Empty <Package>().ToList()
                }
            };

            var model = new DisplayPackageViewModel(package, null, null);

            Assert.Equal(expectedKind, model.RepositoryType);
            Assert.Equal(expectedUrl, model.RepositoryUrl);
        }
コード例 #17
0
        public void HasNewerReleaseReturnsTrueWhenNewerReleaseAvailable(
            string currentVersion,
            string otherVersion,
            bool expectedNewerReleaseAvailable)
        {
            // Arrange
            var dependencies        = Enumerable.Empty <PackageDependency>().ToList();
            var packageRegistration = new PackageRegistration
            {
                Owners = Enumerable.Empty <User>().ToList(),
            };

            var package = new Package
            {
                Dependencies        = dependencies,
                PackageRegistration = packageRegistration,
                IsPrerelease        = NuGetVersion.Parse(currentVersion).IsPrerelease,
                Version             = currentVersion
            };

            var otherPackage = new Package
            {
                Dependencies        = dependencies,
                PackageRegistration = packageRegistration,
                IsPrerelease        = NuGetVersion.Parse(otherVersion).IsPrerelease,
                Version             = otherVersion
            };

            package.PackageRegistration.Packages = new[] { package, otherPackage };

            var viewModel = new DisplayPackageViewModel(package, null, null);

            // Act
            var hasNewerRelease = viewModel.HasNewerRelease;

            // Assert
            Assert.Equal(expectedNewerReleaseAvailable, hasNewerRelease);
        }
コード例 #18
0
        public void HasNewerReleaseDoesNotConsiderUnlistedVersions()
        {
            // Arrange
            var dependencies        = Enumerable.Empty <PackageDependency>().ToList();
            var packageRegistration = new PackageRegistration
            {
                Owners = Enumerable.Empty <User>().ToList(),
            };

            var package = new Package
            {
                Dependencies        = dependencies,
                PackageRegistration = packageRegistration,
                IsPrerelease        = false,
                Version             = "1.0.0"
            };

            // This is a newer prerelease version, however unlisted.
            var otherPackage = new Package
            {
                Dependencies        = dependencies,
                PackageRegistration = packageRegistration,
                IsPrerelease        = false,
                Version             = "1.0.1",
                Listed = false
            };

            package.PackageRegistration.Packages = new[] { package, otherPackage };

            var viewModel = new DisplayPackageViewModel(package, null, null);

            // Act
            var hasNewerRelease = viewModel.HasNewerRelease;

            // Assert
            Assert.False(hasNewerRelease);
        }
コード例 #19
0
        public void DeprecationFieldsAreSetAsExpected(
            PackageDeprecationStatus status,
            bool hasAlternateRegistration,
            bool hasAlternatePackage)
        {
            // Arrange
            var deprecation = new PackageDeprecation
            {
                CustomMessage = "hello"
            };

            var alternateRegistrationId = "alternateRegistrationId";

            if (hasAlternateRegistration)
            {
                var registration = new PackageRegistration
                {
                    Id = alternateRegistrationId
                };

                deprecation.AlternatePackageRegistration = registration;
            }

            var alternatePackageRegistrationId = "alternatePackageRegistration";
            var alternatePackageVersion        = "1.0.0-alt";

            if (hasAlternatePackage)
            {
                var alternatePackageRegistration = new PackageRegistration
                {
                    Id = alternatePackageRegistrationId
                };

                var alternatePackage = new Package
                {
                    Version             = alternatePackageVersion,
                    PackageRegistration = alternatePackageRegistration
                };

                deprecation.AlternatePackage = alternatePackage;
            }

            var package = CreateTestPackage("1.0.0");

            var linkedDeprecation = new PackageDeprecation
            {
                Status = status
            };

            package.Deprecations.Add(linkedDeprecation);

            // Act
            var model = new DisplayPackageViewModel(package, null, deprecation);

            // Assert
            Assert.Equal(status, model.DeprecationStatus);
            Assert.Equal(deprecation.CustomMessage, model.CustomMessage);

            if (hasAlternatePackage)
            {
                Assert.Equal(alternatePackageRegistrationId, model.AlternatePackageId);
                Assert.Equal(alternatePackageVersion, model.AlternatePackageVersion);
            }
            else if (hasAlternateRegistration)
            {
                Assert.Equal(alternateRegistrationId, model.AlternatePackageId);
                Assert.Null(model.AlternatePackageVersion);
            }
            else
            {
                Assert.Null(model.AlternatePackageId);
                Assert.Null(model.AlternatePackageVersion);
            }

            var versionModel = model.PackageVersions.Single();

            Assert.Equal(status, versionModel.DeprecationStatus);
            Assert.Null(versionModel.AlternatePackageId);
            Assert.Null(versionModel.AlternatePackageVersion);
            Assert.Null(versionModel.CustomMessage);
        }
コード例 #20
0
        public void DeprecationFieldsAreSetAsExpected(
            PackageDeprecationStatus status,
            SeverityString_State severity,
            bool hasCves,
            bool hasCwes,
            bool hasAlternateRegistration,
            bool hasAlternatePackage)
        {
            // Arrange
            decimal?cvss;

            switch (severity)
            {
            case SeverityString_State.Critical:
                cvss = (decimal)9.5;
                break;

            case SeverityString_State.High:
                cvss = (decimal)7.5;
                break;

            case SeverityString_State.Medium:
                cvss = (decimal)5;
                break;

            case SeverityString_State.Low:
                cvss = (decimal)2;
                break;

            case SeverityString_State.None:
                cvss = null;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(severity));
            }

            var deprecation = new PackageDeprecation
            {
                CvssRating    = cvss,
                CustomMessage = "hello"
            };

            var cveIds = new[] { "CVE-2019-1111", "CVE-2019-2222" };

            if (hasCves)
            {
                foreach (var cveId in cveIds)
                {
                    var cve = new Cve
                    {
                        CveId = cveId
                    };

                    deprecation.Cves.Add(cve);
                }
            }

            var cweIds = new[] { "CWE-1", "CWE-2" };

            if (hasCwes)
            {
                foreach (var cweId in cweIds)
                {
                    var cwe = new Cwe
                    {
                        CweId = cweId
                    };

                    deprecation.Cwes.Add(cwe);
                }
            }

            var alternateRegistrationId = "alternateRegistrationId";

            if (hasAlternateRegistration)
            {
                var registration = new PackageRegistration
                {
                    Id = alternateRegistrationId
                };

                deprecation.AlternatePackageRegistration = registration;
            }

            var alternatePackageRegistrationId = "alternatePackageRegistration";
            var alternatePackageVersion        = "1.0.0-alt";

            if (hasAlternatePackage)
            {
                var alternatePackageRegistration = new PackageRegistration
                {
                    Id = alternatePackageRegistrationId
                };

                var alternatePackage = new Package
                {
                    Version             = alternatePackageVersion,
                    PackageRegistration = alternatePackageRegistration
                };

                deprecation.AlternatePackage = alternatePackage;
            }

            var package = CreateTestPackage("1.0.0");

            var linkedDeprecation = new PackageDeprecation
            {
                Status = status
            };

            package.Deprecations.Add(linkedDeprecation);

            // Act
            var model = new DisplayPackageViewModel(package, null, deprecation);

            // Assert
            Assert.Equal(status, model.DeprecationStatus);
            Assert.Equal(deprecation.CustomMessage, model.CustomMessage);

            string expectedString;

            switch (severity)
            {
            case SeverityString_State.Critical:
                expectedString = "Critical";
                break;

            case SeverityString_State.High:
                expectedString = "High";
                break;

            case SeverityString_State.Medium:
                expectedString = "Medium";
                break;

            case SeverityString_State.Low:
                expectedString = "Low";
                break;

            case SeverityString_State.None:
                expectedString = null;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(severity));
            }

            Assert.Equal(expectedString, model.Severity);

            if (hasCves)
            {
                Assert.Equal(cveIds, model.CveIds);
            }
            else
            {
                Assert.Empty(model.CveIds);
            }

            if (hasCwes)
            {
                Assert.Equal(cweIds, model.CweIds);
            }
            else
            {
                Assert.Empty(model.CweIds);
            }

            if (hasAlternatePackage)
            {
                Assert.Equal(alternatePackageRegistrationId, model.AlternatePackageId);
                Assert.Equal(alternatePackageVersion, model.AlternatePackageVersion);
            }
            else if (hasAlternateRegistration)
            {
                Assert.Equal(alternateRegistrationId, model.AlternatePackageId);
                Assert.Null(model.AlternatePackageVersion);
            }
            else
            {
                Assert.Null(model.AlternatePackageId);
                Assert.Null(model.AlternatePackageVersion);
            }

            var versionModel = model.PackageVersions.Single();

            Assert.Equal(status, versionModel.DeprecationStatus);
            Assert.Null(versionModel.Severity);
            Assert.Null(versionModel.CveIds);
            Assert.Null(versionModel.CweIds);
            Assert.Null(versionModel.AlternatePackageId);
            Assert.Null(versionModel.AlternatePackageVersion);
            Assert.Null(versionModel.CustomMessage);
        }
コード例 #21
0
            public void ReturnsExpectedUser(Package package, User currentUser, string expected)
            {
                var model = new DisplayPackageViewModel(package, currentUser, null);

                Assert.Equal(expected, model.PushedBy);
            }
コード例 #22
0
        public void TheCtorDoesNotPopulateLatestSymbolsPackageForHistory()
        {
            var package = new Package
            {
                Version             = "1.0.0",
                Dependencies        = Enumerable.Empty <PackageDependency>().ToList(),
                PackageRegistration = new PackageRegistration
                {
                    Owners = Enumerable.Empty <User>().ToList(),
                }
            };

            package.SymbolPackages.Add(new SymbolPackage()
            {
                Package   = package,
                StatusKey = PackageStatus.Available
            });

            package.PackageRegistration.Packages = new[]
            {
                new Package {
                    Version = "1.0.0-alpha2", PackageRegistration = package.PackageRegistration
                },
                new Package {
                    Version = "1.0.0", PackageRegistration = package.PackageRegistration
                },
                new Package {
                    Version = "1.0.0-alpha", PackageRegistration = package.PackageRegistration
                },
                new Package {
                    Version = "1.0.0-beta", PackageRegistration = package.PackageRegistration
                },
                new Package {
                    Version = "1.0.2-beta", PackageRegistration = package.PackageRegistration
                },
                new Package {
                    Version = "1.0.2", PackageRegistration = package.PackageRegistration
                },
                new Package {
                    Version = "1.0.10", PackageRegistration = package.PackageRegistration
                }
            };

            foreach (var packageVersion in package.PackageRegistration.Packages)
            {
                packageVersion.SymbolPackages.Add(new SymbolPackage()
                {
                    Package   = packageVersion,
                    StatusKey = PackageStatus.Available
                });
            }

            var viewModel = new DisplayPackageViewModel(package, null, null);

            // Descending
            Assert.NotNull(viewModel.LatestSymbolsPackage);
            foreach (var version in viewModel.PackageVersions)
            {
                Assert.Null(version.LatestSymbolsPackage);
            }
        }
コード例 #23
0
            public void ReturnsExpectedUser(Package package, User currentUser, string expected)
            {
                var model = new DisplayPackageViewModel(package, currentUser, new[] { package }.OrderByDescending(p => new NuGetVersion(p.Version)));

                Assert.Equal(expected, model.PushedBy);
            }