Skip to content

Commit cd1b309

Browse files
committed
Add tests for packages
Signed-off-by: TG1999 <tushar.goel.dav@gmail.com>
1 parent 6e25dc9 commit cd1b309

File tree

3 files changed

+72
-51
lines changed

3 files changed

+72
-51
lines changed

fetchcode/package.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -313,8 +313,7 @@ def get_rubygems_data_from_purl(purl):
313313
name = purl.name
314314
api_url = f"https://rubygems.org/api/v1/gems/{name}.json"
315315
response = get_response(api_url)
316-
declared_license = response.get("licenses") or [None]
317-
declared_license = declared_license[0]
316+
declared_license = response.get("licenses") or None
318317
homepage_url = response.get("homepage_uri")
319318
code_view_url = response.get("source_code_uri")
320319
bug_tracking_url = response.get("bug_tracker_uri")

tests/data/rubygems.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"0": {"type": "rubygems", "namespace": null, "name": "rubocop", "version": null, "qualifiers": {}, "subpath": null, "primary_language": null, "description": null, "release_date": null, "parties": [], "keywords": [], "homepage_url": "https://rubocop.org/", "download_url": "https://rubygems.org/gems/rubocop-0.89.1.gem", "api_url": "https://rubygems.org/api/v1/gems/rubocop.json", "size": null, "sha1": null, "md5": null, "sha256": null, "sha512": null, "bug_tracking_url": "https://github.com/rubocop-hq/rubocop/issues", "code_view_url": "https://github.com/rubocop-hq/rubocop/", "vcs_url": null, "copyright": null, "license_expression": null, "declared_license": "MIT", "notice_text": null, "root_path": null, "dependencies": [], "contains_source_code": null, "source_packages": [], "purl": "pkg:rubygems/rubocop", "repository_homepage_url": null, "repository_download_url": null, "api_data_url": null}}
1+
{"0": {"type": "rubygems", "namespace": null, "name": "rubocop", "version": null, "qualifiers": {}, "subpath": null, "primary_language": null, "description": null, "release_date": null, "parties": [], "keywords": [], "homepage_url": "https://rubocop.org/", "download_url": "https://rubygems.org/gems/rubocop-0.89.1.gem", "api_url": "https://rubygems.org/api/v1/gems/rubocop.json", "size": null, "sha1": null, "md5": null, "sha256": null, "sha512": null, "bug_tracking_url": "https://github.com/rubocop-hq/rubocop/issues", "code_view_url": "https://github.com/rubocop-hq/rubocop/", "vcs_url": null, "copyright": null, "license_expression": null, "declared_license": ["MIT"], "notice_text": null, "root_path": null, "dependencies": [], "contains_source_code": null, "source_packages": [], "purl": "pkg:rubygems/rubocop", "repository_homepage_url": null, "repository_download_url": null, "api_data_url": null}}

tests/test_package.py

Lines changed: 70 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -26,52 +26,74 @@ def file_data(file_name):
2626
return json.loads(data)
2727

2828

29+
def match_data(packages, expected_data):
30+
data = [dict(p.to_dict()) for p in packages]
31+
expected_data_dict = dict(expected_data)
32+
expected_data = [dict(expected_data_dict[p]) for p in expected_data_dict]
33+
assert expected_data == data
34+
35+
36+
@mock.patch("fetchcode.package.get_response")
37+
def test_cargo_packages(mock_get):
38+
side_effect = [file_data("tests/data/cargo_mock_data.json")]
39+
purl = "pkg:cargo/rand"
40+
expected_data = file_data("tests/data/cargo.json")
41+
mock_get.side_effect = side_effect
42+
packages = list(info(purl))
43+
match_data(packages, expected_data)
44+
45+
46+
@mock.patch("fetchcode.package.get_response")
47+
def test_npm_packages(mock_get):
48+
side_effect = [file_data("tests/data/npm_mock_data.json")]
49+
purl = "pkg:npm/express"
50+
expected_data = file_data("tests/data/npm.json")
51+
mock_get.side_effect = side_effect
52+
packages = list(info(purl))
53+
match_data(packages, expected_data)
54+
55+
56+
@mock.patch("fetchcode.package.get_response")
57+
def test_pypi_packages(mock_get):
58+
side_effect = [file_data("tests/data/pypi_mock_data.json")]
59+
purl = "pkg:pypi/flask"
60+
expected_data = file_data("tests/data/pypi.json")
61+
mock_get.side_effect = side_effect
62+
packages = list(info(purl))
63+
match_data(packages, expected_data)
64+
65+
66+
@mock.patch("fetchcode.package.get_response")
67+
def test_github_packages(mock_get):
68+
side_effect = [
69+
file_data("tests/data/github_mock_data.json"),
70+
file_data("tests/data/github_mock_release_data.json"),
71+
]
72+
purl = "pkg:github/TG1999/fetchcode"
73+
expected_data = file_data("tests/data/github.json")
74+
mock_get.side_effect = side_effect
75+
packages = list(info(purl))
76+
match_data(packages, expected_data)
77+
78+
79+
@mock.patch("fetchcode.package.get_response")
80+
def test_bitbucket_packages(mock_get):
81+
side_effect = [
82+
file_data("tests/data/bitbucket_mock_data.json"),
83+
file_data("tests/data/bitbucket_mock_release_data.json"),
84+
]
85+
purl = "pkg:bitbucket/litmis/python-itoolkit"
86+
expected_data = file_data("tests/data/bitbucket.json")
87+
mock_get.side_effect = side_effect
88+
packages = list(info(purl))
89+
match_data(packages, expected_data)
90+
91+
2992
@mock.patch("fetchcode.package.get_response")
30-
def test_packages(mock_get):
31-
32-
package_managers = {
33-
"cargo": {
34-
"side_effect": [file_data("tests/data/cargo_mock_data.json")],
35-
"purl": "pkg:cargo/rand",
36-
"expected_data": "tests/data/cargo.json",
37-
},
38-
"npm": {
39-
"side_effect": [file_data("tests/data/npm_mock_data.json")],
40-
"purl": "pkg:npm/express",
41-
"expected_data": "tests/data/npm.json",
42-
},
43-
"pypi": {
44-
"side_effect": [file_data("tests/data/pypi_mock_data.json")],
45-
"purl": "pkg:pypi/flask",
46-
"expected_data": "tests/data/pypi.json",
47-
},
48-
"github": {
49-
"side_effect": [
50-
file_data("tests/data/github_mock_data.json"),
51-
file_data("tests/data/github_mock_release_data.json"),
52-
],
53-
"purl": "pkg:github/TG1999/fetchcode",
54-
"expected_data": "tests/data/github.json",
55-
},
56-
"bitbucket": {
57-
"side_effect": [
58-
file_data("tests/data/bitbucket_mock_data.json"),
59-
file_data("tests/data/bitbucket_mock_release_data.json"),
60-
],
61-
"purl": "pkg:bitbucket/litmis/python-itoolkit",
62-
"expected_data": "tests/data/bitbucket.json",
63-
},
64-
"rubygems": {
65-
"side_effect": [file_data("tests/data/rubygems_mock_data.json")],
66-
"purl": "pkg:rubygems/rubocop",
67-
"expected_data": "tests/data/rubygems.json",
68-
},
69-
}
70-
71-
for package_manager in package_managers.values():
72-
mock_get.side_effect = package_manager["side_effect"]
73-
packages = list(info(package_manager["purl"]))
74-
data = [dict(p.to_dict()) for p in packages]
75-
expected_data_dict = file_data(package_manager["expected_data"])
76-
expected_data = [dict(expected_data_dict[p]) for p in expected_data_dict]
77-
assert expected_data == data
93+
def test_rubygems_packages(mock_get):
94+
side_effect = [file_data("tests/data/rubygems_mock_data.json")]
95+
purl = "pkg:rubygems/rubocop"
96+
expected_data = file_data("tests/data/rubygems.json")
97+
mock_get.side_effect = side_effect
98+
packages = list(info(purl))
99+
match_data(packages, expected_data)

0 commit comments

Comments
 (0)