Skip to content

Commit 0ae2fb0

Browse files
committed
Add unit test for the download_scan_data action #272
Signed-off-by: tdruez <tdruez@nexb.com>
1 parent aaa533c commit 0ae2fb0

3 files changed

Lines changed: 41 additions & 1 deletion

File tree

component_catalog/api.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -943,6 +943,10 @@ def download_scan_data(self, request, uuid):
943943
download_url=package.download_url,
944944
dataspace=dataspace,
945945
)
946+
if not scan_infos:
947+
message = {"error": "Scan results are not available"}
948+
return Response(message, status=status.HTTP_400_BAD_REQUEST)
949+
946950
project_uuid = scan_infos.get("uuid")
947951

948952
scan_results_url = scancodeio.get_scan_action_url(project_uuid, "results")

component_catalog/tests/test_api.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1475,6 +1475,40 @@ def test_api_package_viewset_aboutcode_files_action(self):
14751475
'attachment; filename="package1.zip_about.zip"', response["content-disposition"]
14761476
)
14771477

1478+
@mock.patch("dejacode_toolkit.scancodeio.ScanCodeIO.get_scan_results")
1479+
@mock.patch("dejacode_toolkit.scancodeio.ScanCodeIO.fetch_scan_data")
1480+
@mock.patch("dejacode_toolkit.scancodeio.ScanCodeIO.is_available")
1481+
def test_api_package_viewset_download_scan_data_action(
1482+
self, mock_is_available, mock_fetch_scan_data, mock_get_scan_results
1483+
):
1484+
scan_data_url = reverse("api_v2:package-download-scan-data", args=[self.package1.uuid])
1485+
mock_fetch_scan_data.return_value = {}
1486+
mock_get_scan_results.return_value = None
1487+
1488+
response = self.client.get(scan_data_url)
1489+
self.assertEqual(403, response.status_code)
1490+
response = self.client.post(scan_data_url)
1491+
self.assertEqual(403, response.status_code)
1492+
1493+
self.client.login(username=self.base_user.username, password="secret")
1494+
mock_is_available.return_value = False
1495+
response = self.client.get(scan_data_url)
1496+
self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
1497+
expected = {"error": "The ScanCode.io service is not available"}
1498+
self.assertEqual(expected, response.data)
1499+
1500+
mock_is_available.return_value = True
1501+
response = self.client.get(scan_data_url)
1502+
self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
1503+
expected = {"error": "Scan results are not available"}
1504+
self.assertEqual(expected, response.data)
1505+
1506+
mock_get_scan_results.return_value = {"url": ""}
1507+
response = self.client.get(scan_data_url)
1508+
self.assertEqual(200, response.status_code)
1509+
self.assertEqual("application/zip", response["content-type"])
1510+
self.assertEqual('attachment; filename="package1.zip"', response["content-disposition"])
1511+
14781512
def test_api_package_protected_fields_as_read_only(self):
14791513
policy = UsagePolicy.objects.create(
14801514
label="PackagePolicy",

component_catalog/tests/test_views.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2971,7 +2971,9 @@ def test_delete_scan_view(self, mock_fetch_scan_list, mock_delete_scan):
29712971
self.assertEqual(404, response.status_code)
29722972

29732973
@mock.patch("dejacode_toolkit.scancodeio.ScanCodeIO.fetch_scan_data")
2974-
def test_send_scan_data_as_file_view(self, mock_fetch_scan_data):
2974+
@mock.patch("dejacode_toolkit.scancodeio.ScanCodeIO.is_available")
2975+
def test_send_scan_data_as_file_view(self, mock_is_available, mock_fetch_scan_data):
2976+
mock_is_available.return_value = True
29752977
mock_fetch_scan_data.return_value = {}
29762978

29772979
project_uuid = "348df847-f48f-4ac7-b864-5785b44c65e2"

0 commit comments

Comments
 (0)