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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
public void ReturnsExpectedUser(Package package, User currentUser, string expected) { var model = new DisplayPackageViewModel(package, currentUser, null); Assert.Equal(expected, model.PushedBy); }
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); } }
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); }