@@ -1475,6 +1475,101 @@ 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_project_info" )
1479+ @mock .patch ("dejacode_toolkit.scancodeio.ScanCodeIO.is_available" )
1480+ def test_api_package_viewset_scan_actions_errors (
1481+ self , mock_is_available , mock_get_project_info
1482+ ):
1483+ scan_actions_urls = [
1484+ reverse ("api_v2:package-scan-info" , args = [self .package1 .uuid ]),
1485+ reverse ("api_v2:package-scan-results" , args = [self .package1 .uuid ]),
1486+ reverse ("api_v2:package-scan-summary" , args = [self .package1 .uuid ]),
1487+ reverse ("api_v2:package-scan-data-download-zip" , args = [self .package1 .uuid ]),
1488+ ]
1489+
1490+ mock_get_project_info .return_value = None
1491+ for action_url in scan_actions_urls :
1492+ response = self .client .get (action_url )
1493+ self .assertEqual (403 , response .status_code , msg = action_url )
1494+ response = self .client .post (action_url )
1495+ self .assertEqual (403 , response .status_code , msg = action_url )
1496+
1497+ self .client .login (username = self .base_user .username , password = "secret" )
1498+ mock_is_available .return_value = False
1499+ for action_url in scan_actions_urls :
1500+ response = self .client .get (action_url )
1501+ self .assertEqual (status .HTTP_400_BAD_REQUEST , response .status_code , msg = action_url )
1502+ expected = "The ScanCode.io service is not available"
1503+ self .assertEqual (expected , str (response .data ["detail" ]), msg = action_url )
1504+
1505+ mock_is_available .return_value = True
1506+ for action_url in scan_actions_urls :
1507+ response = self .client .get (action_url )
1508+ self .assertEqual (status .HTTP_400_BAD_REQUEST , response .status_code , msg = action_url )
1509+ expected = "Scan data is not available"
1510+ self .assertEqual (expected , str (response .data ["detail" ]), msg = action_url )
1511+
1512+ @mock .patch ("dejacode_toolkit.scancodeio.ScanCodeIO.get_project_info" )
1513+ @mock .patch ("dejacode_toolkit.scancodeio.ScanCodeIO.is_available" )
1514+ def test_api_package_viewset_scan_info_action (self , mock_is_available , mock_get_project_info ):
1515+ self .client .login (username = self .base_user .username , password = "secret" )
1516+ action_url = reverse ("api_v2:package-scan-info" , args = [self .package1 .uuid ])
1517+ mock_is_available .return_value = True
1518+ project_info = {"uuid" : "abcdef" }
1519+ mock_get_project_info .return_value = project_info
1520+
1521+ response = self .client .get (action_url )
1522+ self .assertEqual (200 , response .status_code )
1523+ self .assertEqual (project_info , response .data )
1524+
1525+ @mock .patch ("dejacode_toolkit.scancodeio.ScanCodeIO.get_project_info" )
1526+ @mock .patch ("dejacode_toolkit.scancodeio.ScanCodeIO.fetch_scan_data" )
1527+ @mock .patch ("dejacode_toolkit.scancodeio.ScanCodeIO.is_available" )
1528+ def test_api_package_viewset_scan_results_action (
1529+ self , mock_is_available , mock_fetch_scan_data , mock_get_project_info
1530+ ):
1531+ self .client .login (username = self .base_user .username , password = "secret" )
1532+ action_url = reverse ("api_v2:package-scan-results" , args = [self .package1 .uuid ])
1533+ mock_is_available .return_value = True
1534+ mock_get_project_info .return_value = {"uuid" : "abcdef" }
1535+ mock_fetch_scan_data .return_value = {"results" : "" }
1536+ response = self .client .get (action_url )
1537+ self .assertEqual (200 , response .status_code )
1538+ self .assertEqual ({"results" : "" }, response .data )
1539+
1540+ @mock .patch ("dejacode_toolkit.scancodeio.ScanCodeIO.get_project_info" )
1541+ @mock .patch ("dejacode_toolkit.scancodeio.ScanCodeIO.fetch_scan_data" )
1542+ @mock .patch ("dejacode_toolkit.scancodeio.ScanCodeIO.is_available" )
1543+ def test_api_package_viewset_scan_summary_action (
1544+ self , mock_is_available , mock_fetch_scan_data , mock_get_project_info
1545+ ):
1546+ self .client .login (username = self .base_user .username , password = "secret" )
1547+ action_url = reverse ("api_v2:package-scan-summary" , args = [self .package1 .uuid ])
1548+ mock_is_available .return_value = True
1549+ mock_get_project_info .return_value = {"uuid" : "abcdef" }
1550+ mock_fetch_scan_data .return_value = {"summary" : "" }
1551+ response = self .client .get (action_url )
1552+ self .assertEqual (200 , response .status_code )
1553+ self .assertEqual ({"summary" : "" }, response .data )
1554+
1555+ @mock .patch ("dejacode_toolkit.scancodeio.ScanCodeIO.get_project_info" )
1556+ @mock .patch ("dejacode_toolkit.scancodeio.ScanCodeIO.fetch_scan_data" )
1557+ @mock .patch ("dejacode_toolkit.scancodeio.ScanCodeIO.is_available" )
1558+ def test_api_package_viewset_scan_data_download_zip_action (
1559+ self , mock_is_available , mock_fetch_scan_data , mock_get_project_info
1560+ ):
1561+ self .client .login (username = self .base_user .username , password = "secret" )
1562+ action_url = reverse ("api_v2:package-scan-data-download-zip" , args = [self .package1 .uuid ])
1563+ mock_is_available .return_value = True
1564+ mock_get_project_info .return_value = {"uuid" : "abcdef" }
1565+ mock_fetch_scan_data .return_value = {}
1566+ response = self .client .get (action_url )
1567+ self .assertEqual (200 , response .status_code )
1568+ self .assertEqual ("application/zip" , response ["content-type" ])
1569+ self .assertEqual (
1570+ 'attachment; filename="package1.zip_scan.zip"' , response ["content-disposition" ]
1571+ )
1572+
14781573 def test_api_package_protected_fields_as_read_only (self ):
14791574 policy = UsagePolicy .objects .create (
14801575 label = "PackagePolicy" ,
0 commit comments