|
6 | 6 | # See https://aboutcode.org for more information about AboutCode FOSS projects. |
7 | 7 | # |
8 | 8 |
|
| 9 | +import json |
9 | 10 | import tempfile |
10 | 11 | import uuid |
11 | 12 | from pathlib import Path |
@@ -908,6 +909,36 @@ def test_product_portfolio_product_import_from_scan_input_data_validation_errors |
908 | 909 | self.assertEqual(expected, warnings) |
909 | 910 | self.assertEqual({"Packages": 1, "Product Packages": 1}, created_counts) |
910 | 911 |
|
| 912 | + def test_product_portfolio_product_import_from_scan_create_dependencies(self): |
| 913 | + scan_input_location = self.testfiles_path / "import_from_scan_with_dependencies.json" |
| 914 | + |
| 915 | + upload_file = wrap_as_temp_uploaded_file(scan_input_location) |
| 916 | + importer = ImportFromScan( |
| 917 | + self.product1, self.super_user, upload_file, create_dependencies=False |
| 918 | + ) |
| 919 | + importer.save() |
| 920 | + package = self.product1.packages.get() |
| 921 | + self.assertEqual([], package.dependencies) |
| 922 | + |
| 923 | + package.productpackages.all().delete() |
| 924 | + package.delete() |
| 925 | + |
| 926 | + upload_file = wrap_as_temp_uploaded_file(scan_input_location) |
| 927 | + importer = ImportFromScan( |
| 928 | + self.product1, self.super_user, upload_file, create_dependencies=True |
| 929 | + ) |
| 930 | + importer.save() |
| 931 | + package = self.product1.packages.get() |
| 932 | + expected_dependency = { |
| 933 | + "purl": "pkg:npm/lodash@4.17.21", |
| 934 | + "scope": "runtime", |
| 935 | + "is_runtime": True, |
| 936 | + "is_optional": False, |
| 937 | + "is_pinned": True, |
| 938 | + "for_package_uid": "pkg:npm/test-package@1?uuid=9779a0ea-ef30-4a05-b4db-0a0ba3b3507c", |
| 939 | + } |
| 940 | + self.assertEqual([expected_dependency], json.loads(package.dependencies)) |
| 941 | + |
911 | 942 | def test_product_portfolio_product_import_from_scan_view_base(self): |
912 | 943 | self.client.login(username=self.super_user.username, password="secret") |
913 | 944 | scan_input_location = self.testfiles_path / "import_from_scan.json" |
@@ -1060,6 +1091,56 @@ def test_product_portfolio_import_packages_from_scancodeio_importer( |
1060 | 1091 | importer.save() |
1061 | 1092 | mock_fetch.assert_called() |
1062 | 1093 |
|
| 1094 | + @mock.patch("dejacode_toolkit.scancodeio.ScanCodeIO.fetch_project_dependencies") |
| 1095 | + @mock.patch("dejacode_toolkit.scancodeio.ScanCodeIO.fetch_project_packages") |
| 1096 | + def test_product_portfolio_import_packages_from_scancodeio_create_dependencies( |
| 1097 | + self, mock_fetch_packages, mock_fetch_dependencies |
| 1098 | + ): |
| 1099 | + purl = "pkg:maven/abc/abc@1.0" |
| 1100 | + mock_fetch_packages.return_value = [ |
| 1101 | + { |
| 1102 | + "type": "maven", |
| 1103 | + "namespace": "abc", |
| 1104 | + "name": "abc", |
| 1105 | + "version": "1.0", |
| 1106 | + "purl": purl, |
| 1107 | + } |
| 1108 | + ] |
| 1109 | + dependency_uid = "pkg:pypi/requests@2.0?uuid=test-dep" |
| 1110 | + mock_fetch_dependencies.return_value = [ |
| 1111 | + { |
| 1112 | + "purl": "pkg:pypi/requests@2.0", |
| 1113 | + "dependency_uid": dependency_uid, |
| 1114 | + "for_package_uid": None, |
| 1115 | + "resolved_to_package_uid": None, |
| 1116 | + "scope": "install", |
| 1117 | + "is_runtime": True, |
| 1118 | + "is_optional": False, |
| 1119 | + "is_pinned": False, |
| 1120 | + "is_direct": True, |
| 1121 | + "datasource_id": "pypi_setup_cfg", |
| 1122 | + "affected_by_vulnerabilities": [], |
| 1123 | + } |
| 1124 | + ] |
| 1125 | + |
| 1126 | + importer = ImportPackageFromScanCodeIO( |
| 1127 | + user=self.super_user, |
| 1128 | + project_uuid=uuid.uuid4(), |
| 1129 | + product=self.product1, |
| 1130 | + create_dependencies=False, |
| 1131 | + ) |
| 1132 | + importer.save() |
| 1133 | + self.assertEqual(0, self.product1.dependencies.count()) |
| 1134 | + |
| 1135 | + importer = ImportPackageFromScanCodeIO( |
| 1136 | + user=self.super_user, |
| 1137 | + project_uuid=uuid.uuid4(), |
| 1138 | + product=self.product1, |
| 1139 | + create_dependencies=True, |
| 1140 | + ) |
| 1141 | + importer.save() |
| 1142 | + self.assertEqual(1, self.product1.dependencies.count()) |
| 1143 | + |
1063 | 1144 | @mock.patch("dejacode_toolkit.scancodeio.ScanCodeIO.fetch_project_dependencies") |
1064 | 1145 | @mock.patch("dejacode_toolkit.scancodeio.ScanCodeIO.fetch_project_packages") |
1065 | 1146 | def test_product_portfolio_import_packages_from_scio_importer_multiple_package_objs( |
|
0 commit comments