func run()

in Sources/PackageRegistryCompatibilityTestSuite/APITests/FetchPackageReleaseManifest.swift [25:87]


    func run() async {
        for fixture in self.configuration.packageReleases {
            let scope = fixture.packageRelease.package.scope
            let name = fixture.packageRelease.package.name
            let version = fixture.packageRelease.version

            // Package.swift
            self.log.append(await self.run(scope: scope, name: name, version: version, fixture: fixture))
            // Case-insensitivity
            self.log.append(await self.run(scope: scope.flipcased, name: name.flipcased, version: version.flipcased, fixture: fixture))

            let url = "\(self.registryURL)/\(scope)/\(name)/\(version)/Package.swift"

            // Version-specific manifests
            if let swiftVersions = fixture.swiftVersions {
                for swiftVersion in swiftVersions {
                    self.log.append(await TestCase(name: "Fetch Package@swift-\(swiftVersion).swift for package release \(scope).\(name)@\(version)") { testCase in
                        let manifestURL = "\(url)?swift-version=\(swiftVersion)"

                        // "alternate" relations are not set for version-specific manifests
                        try await self.fetchAndCheckResponse(url: manifestURL, packageRelease: fixture.packageRelease, checkLinkAlternate: false,
                                                             expectedFilename: "Package@swift-\(swiftVersion).swift", for: &testCase)
                    })
                }
            }

            // These Swift versions do not have version-specific manifest
            if let noSwiftVersions = fixture.noSwiftVersions {
                for swiftVersion in noSwiftVersions {
                    self.log.append(await TestCase(name: "Fetch missing Package@swift-\(swiftVersion).swift for package release \(scope).\(name)@\(version)") { testCase in
                        let manifestURL = "\(url)?swift-version=\(swiftVersion)"

                        // 4.3 Server should return 303 and redirect to unqualified (i.e., `Package.swift`) if version-specific manifest is not found
                        try await self.fetchAndCheckResponse(url: manifestURL, packageRelease: fixture.packageRelease, checkLinkAlternate: false,
                                                             expectedFilename: "Package.swift", for: &testCase)
                    })
                }
            }
        }

        for packageRelease in self.configuration.unknownPackageReleases {
            self.log.append(await TestCase(name: "Fetch Package.swift for unknown package release \(packageRelease.package.scope).\(packageRelease.package.name)@\(packageRelease.version)") { testCase in
                let url = "\(self.registryURL)/\(packageRelease.package.scope)/\(packageRelease.package.name)/\(packageRelease.version)/Package.swift"

                testCase.mark("HTTP request: GET \(url)")
                let response = try await self.get(url: url, mediaType: .swift)

                // 4.3 Server should return 404 if package release is not found
                testCase.mark("HTTP response status")
                guard response.status == .notFound else {
                    throw TestError("Expected HTTP status code 404 but got \(response.status.code)")
                }

                // 3.3 Server should communicate errors using "problem details" object
                testCase.mark("Response body")
                if response.body == nil {
                    testCase.warning("Response should include problem details")
                }
            })
        }

        self.printLog()
    }