def test_purl_conversion_bogus_forge(): package = {"name": "odd", "type": "npm", "version": "github:something/odd"} pkg = Package.from_json(package) msg = f"Could not convert version {pkg.version} to purl" with pytest.raises(ContentManifestError, match=msg): pkg.to_purl()
def test_purl_conversion(package, expected_purl, defined, known_protocol): pkg = Package.from_json(package) if defined and known_protocol: purl = pkg.to_purl() assert purl == expected_purl else: msg = f"The PURL spec is not defined for {pkg.type} packages" if defined: msg = f"Unknown protocol in {pkg.type} package version: {pkg.version}" with pytest.raises(ContentManifestError, match=msg): pkg.to_purl()
def test_package_from_json(package_json): package = Package.from_json(package_json) assert package.name == package_json.get("name") assert package.type == package_json.get("type") assert package.version == package_json.get("version") assert package.dev == package_json.get("dev", False) assert package.path == package_json.get("path") if "dependencies" in package_json: dependency = package.dependencies[0] dependency_json = package_json["dependencies"][0] assert type(dependency) == Package assert dependency.name == dependency_json["name"] assert dependency.type == dependency_json["type"] assert dependency.version == dependency_json["version"]
def test_to_json_with_multiple_packages(mock_generate_icm, app, packages_json): request = Request() packages = _load_packages_from_json(packages_json) cm = ContentManifest(request, packages) image_contents = [] for package_json in packages_json: package = Package.from_json(package_json) content = { "purl": package.to_purl(), "dependencies": [], "sources": [] } image_contents.append(content) res = cm.to_json() mock_generate_icm.assert_called_once_with(image_contents) assert res == mock_generate_icm.return_value
def test_package_equality(json1, json2, equality): package1 = Package.from_json(json1) package2 = Package.from_json(json2) assert (package1 == package2) == equality
def _load_packages_from_json(packages_json): return [Package.from_json(package) for package in packages_json]