Ejemplo n.º 1
0
            public async Task ReturnsSuccessful(
                User currentUser,
                User owner,
                bool isVulnerable,
                bool isLegacy,
                bool isOther,
                PackageDeprecationStatus expectedStatus,
                ReturnsSuccessful_AlternatePackage_State alternatePackageState,
                bool hasAdditionalData)
            {
                // Arrange
                var id = "id";

                var featureFlagService = GetMock <IFeatureFlagService>();

                featureFlagService
                .Setup(x => x.IsManageDeprecationEnabled(currentUser))
                .Returns(true)
                .Verifiable();

                var registration = new PackageRegistration
                {
                    Id = id
                };

                registration.Owners.Add(owner);

                var package = new Package
                {
                    NormalizedVersion   = "2.3.4",
                    PackageRegistration = registration
                };

                var package2 = new Package
                {
                    NormalizedVersion   = "1.0.0",
                    PackageRegistration = registration
                };

                var unselectedPackage = new Package
                {
                    NormalizedVersion   = "1.3.2",
                    PackageRegistration = registration
                };

                var packageService = GetMock <IPackageService>();

                packageService
                .Setup(x => x.FindPackagesById(id, PackageDeprecationFieldsToInclude.DeprecationAndRelationships))
                .Returns(new[] { package, package2, unselectedPackage })
                .Verifiable();

                var alternatePackageId      = alternatePackageState != ReturnsSuccessful_AlternatePackage_State.None ? "altId" : null;
                var alternatePackageVersion = alternatePackageState == ReturnsSuccessful_AlternatePackage_State.Package ? "1.2.3-alt" : null;

                var alternatePackageRegistration = new PackageRegistration
                {
                    Id = alternatePackageId
                };

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

                if (alternatePackageState == ReturnsSuccessful_AlternatePackage_State.Registration)
                {
                    packageService
                    .Setup(x => x.FindPackageRegistrationById(alternatePackageId))
                    .Returns(alternatePackageRegistration)
                    .Verifiable();
                }
                else if (alternatePackageState == ReturnsSuccessful_AlternatePackage_State.Package)
                {
                    packageService
                    .Setup(x => x.FindPackageByIdAndVersionStrict(alternatePackageId, alternatePackageVersion))
                    .Returns(alternatePackage)
                    .Verifiable();
                }

                var deprecationService = GetMock <IPackageDeprecationService>();

                var cveIds = hasAdditionalData ? new[] { "CVE-2019-1111", "CVE-2019-22222", "CVE-2019-333333" } : null;
                var cves   = cveIds?.Select(i => new Cve {
                    CveId = i
                }).ToArray() ?? new Cve[0];

                deprecationService
                .Setup(x => x.GetOrCreateCvesByIdAsync(cveIds ?? Enumerable.Empty <string>(), false))
                .CompletesWith(cves)
                .Verifiable();

                var cvss = hasAdditionalData ? (decimal?)5.5 : null;

                var cweIds = hasAdditionalData ? new[] { "CWE-1", "CWE-2", "CWE-3" } : null;
                var cwes   = cweIds?.Select(i => new Cwe {
                    CweId = i
                }).ToArray() ?? new Cwe[0];

                deprecationService
                .Setup(x => x.GetCwesById(cweIds ?? Enumerable.Empty <string>()))
                .Returns(cwes)
                .Verifiable();

                var customMessage = hasAdditionalData ? "message" : null;

                deprecationService
                .Setup(x => x.UpdateDeprecation(
                           new[] { package, package2 },
                           expectedStatus,
                           cves,
                           cvss,
                           cwes,
                           alternatePackageState == ReturnsSuccessful_AlternatePackage_State.Registration ? alternatePackageRegistration : null,
                           alternatePackageState == ReturnsSuccessful_AlternatePackage_State.Package ? alternatePackage : null,
                           customMessage))
                .Completes()
                .Verifiable();

                var controller = GetController <ManageDeprecationJsonApiController>();

                controller.SetCurrentUser(currentUser);

                // Act
                var result = await controller.Deprecate(
                    id,
                    new[] { package.NormalizedVersion, package2.NormalizedVersion },
                    isVulnerable,
                    isLegacy,
                    isOther,
                    cveIds,
                    cvss,
                    cweIds,
                    alternatePackageId,
                    alternatePackageVersion,
                    customMessage);

                // Assert
                AssertSuccessResponse(controller);
                featureFlagService.Verify();
                packageService.Verify();
                deprecationService.Verify();
            }
Ejemplo n.º 2
0
            private async Task AssertSuccessful(
                User currentUser,
                User owner,
                bool isLegacy,
                bool hasCriticalBugs,
                bool isOther,
                PackageDeprecationStatus expectedStatus,
                ReturnsSuccessful_AlternatePackage_State alternatePackageState,
                bool hasCustomMessage)
            {
                // Arrange
                var id = "id";

                var registration = new PackageRegistration
                {
                    Id = id
                };

                var featureFlagService = GetMock <IFeatureFlagService>();

                featureFlagService
                .Setup(x => x.IsManageDeprecationEnabled(currentUser, registration))
                .Returns(true)
                .Verifiable();

                registration.Owners.Add(owner);

                var package = new Package
                {
                    NormalizedVersion   = "2.3.4",
                    PackageRegistration = registration
                };

                var package2 = new Package
                {
                    NormalizedVersion   = "1.0.0",
                    PackageRegistration = registration
                };

                var unselectedPackage = new Package
                {
                    NormalizedVersion   = "1.3.2",
                    PackageRegistration = registration
                };

                var packageService = GetMock <IPackageService>();

                packageService
                .Setup(x => x.FindPackagesById(id, PackageDeprecationFieldsToInclude.DeprecationAndRelationships))
                .Returns(new[] { package, package2, unselectedPackage })
                .Verifiable();

                var alternatePackageId      = alternatePackageState != ReturnsSuccessful_AlternatePackage_State.None ? "altId" : null;
                var alternatePackageVersion = alternatePackageState == ReturnsSuccessful_AlternatePackage_State.Package ? "1.2.3-alt" : null;

                var alternatePackageRegistration = new PackageRegistration
                {
                    Id = alternatePackageId
                };

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

                if (alternatePackageState == ReturnsSuccessful_AlternatePackage_State.Registration)
                {
                    packageService
                    .Setup(x => x.FindPackageRegistrationById(alternatePackageId))
                    .Returns(alternatePackageRegistration)
                    .Verifiable();
                }
                else if (alternatePackageState == ReturnsSuccessful_AlternatePackage_State.Package)
                {
                    packageService
                    .Setup(x => x.FindPackageByIdAndVersionStrict(alternatePackageId, alternatePackageVersion))
                    .Returns(alternatePackage)
                    .Verifiable();
                }

                var deprecationService = GetMock <IPackageDeprecationService>();

                var customMessage = hasCustomMessage ? "<message>" : null;

                deprecationService
                .Setup(x => x.UpdateDeprecation(
                           new[] { package, package2 },
                           expectedStatus,
                           alternatePackageState == ReturnsSuccessful_AlternatePackage_State.Registration ? alternatePackageRegistration : null,
                           alternatePackageState == ReturnsSuccessful_AlternatePackage_State.Package ? alternatePackage : null,
                           customMessage,
                           currentUser))
                .Completes()
                .Verifiable();

                var controller = GetController <ManageDeprecationJsonApiController>();

                controller.SetCurrentUser(currentUser);

                var packageNormalizedVersions = new[] { package.NormalizedVersion, package2.NormalizedVersion };

                // Act
                var result = await controller.Deprecate(
                    CreateDeprecatePackageRequest(
                        id,
                        packageNormalizedVersions,
                        isLegacy,
                        hasCriticalBugs,
                        isOther,
                        alternatePackageId,
                        alternatePackageVersion,
                        customMessage));

                // Assert
                AssertSuccessResponse(controller);

                featureFlagService.Verify();
                packageService.Verify();
                deprecationService.Verify();
            }