|
16 | 16 | from univers.version_range import PypiVersionRange |
17 | 17 |
|
18 | 18 | from vulnerabilities.importer import AdvisoryDataV2 |
| 19 | +from vulnerabilities.importer import AffectedPackageV2 |
| 20 | +from vulnerabilities.importer import PackageCommitPatchData |
| 21 | +from vulnerabilities.models import AdvisorySet |
| 22 | +from vulnerabilities.models import AdvisorySetMember |
| 23 | +from vulnerabilities.models import ImpactedPackage |
| 24 | +from vulnerabilities.models import ImpactedPackageAffecting |
19 | 25 | from vulnerabilities.models import PackageV2 |
20 | 26 | from vulnerabilities.pipes.advisory import insert_advisory_v2 |
21 | 27 | from vulnerabilities.tests.pipelines import TestLogger |
@@ -254,3 +260,84 @@ def test_get_all_vulnerable_purls(self): |
254 | 260 | results = response.data["results"] |
255 | 261 | self.assertEqual(len(results), 100) |
256 | 262 | self.assertIn("next", response.data) |
| 263 | + |
| 264 | + |
| 265 | +class PackageCommitPatchTests(APITestCase): |
| 266 | + def setUp(self): |
| 267 | + self.advisory = AdvisoryDataV2( |
| 268 | + advisory_id="AVID-123", |
| 269 | + aliases=[], |
| 270 | + affected_packages=[ |
| 271 | + AffectedPackageV2( |
| 272 | + package=PackageURL(type="pypi", name="sample"), |
| 273 | + affected_version_range=PypiVersionRange.from_string("vers:pypi/=1.0.0"), |
| 274 | + introduced_by_commit_patches=[ |
| 275 | + PackageCommitPatchData( |
| 276 | + vcs_url="https://github.com/aboutcode-org/sample", |
| 277 | + commit_hash="06580c7f99c6fde7bcf18e30bdcc61f081430957", |
| 278 | + ) |
| 279 | + ], |
| 280 | + fixed_by_commit_patches=[ |
| 281 | + PackageCommitPatchData( |
| 282 | + vcs_url="https://github.com/aboutcode-org/sample", |
| 283 | + commit_hash="98e516011d6e096e25247b82fc5f196bbeecff10", |
| 284 | + ) |
| 285 | + ], |
| 286 | + ) |
| 287 | + ], |
| 288 | + url="https://github.com/aboutcode-org/sample", |
| 289 | + ) |
| 290 | + |
| 291 | + self.advisory = insert_advisory_v2(self.advisory, "importer_1", print, 100) |
| 292 | + self.advisory.is_latest = True |
| 293 | + self.advisory._all_impacts_unfurled_at = timezone.now() |
| 294 | + self.advisory.save() |
| 295 | + self.package, _ = PackageV2.objects.get_or_create( |
| 296 | + package_url="pkg:pypi/sample@1.0.0", |
| 297 | + defaults={"name": "sample", "type": "pypi", "version": "1.0.0"}, |
| 298 | + ) |
| 299 | + |
| 300 | + impacted_package = ImpactedPackage.objects.get(advisory=self.advisory) |
| 301 | + ImpactedPackageAffecting.objects.get_or_create( |
| 302 | + package=self.package, |
| 303 | + impacted_package=impacted_package, |
| 304 | + ) |
| 305 | + adv_set = AdvisorySet.objects.create( |
| 306 | + package=self.package, primary_advisory=self.advisory, relation_type="affecting" |
| 307 | + ) |
| 308 | + AdvisorySetMember.objects.create(advisory_set=adv_set, advisory=self.advisory) |
| 309 | + |
| 310 | + self.client = APIClient(enforce_csrf_checks=True) |
| 311 | + |
| 312 | + def test_packages_commit_patch(self): |
| 313 | + url = reverse("package-v3-list") |
| 314 | + response = self.client.post( |
| 315 | + url, |
| 316 | + data={"purls": ["pkg:pypi/sample@1.0.0"], "details": True}, |
| 317 | + format="json", |
| 318 | + ) |
| 319 | + |
| 320 | + assert response.status_code == 200 |
| 321 | + results = response.data["results"] |
| 322 | + assert len(results) == 1 |
| 323 | + pkg = results[0] |
| 324 | + assert pkg["purl"] == "pkg:pypi/sample@1.0.0" |
| 325 | + |
| 326 | + vulns = pkg.get("affected_by_vulnerabilities", []) |
| 327 | + assert len(vulns) == 1 |
| 328 | + advisory_data = vulns[0] |
| 329 | + |
| 330 | + assert advisory_data["advisory_id"] == "AVID-123" |
| 331 | + assert advisory_data["introduced_in_patch"] == [ |
| 332 | + { |
| 333 | + "commit_hash": "06580c7f99c6fde7bcf18e30bdcc61f081430957", |
| 334 | + "vcs_url": "https://github.com/aboutcode-org/sample", |
| 335 | + } |
| 336 | + ] |
| 337 | + |
| 338 | + assert advisory_data["fixed_in_patch"] == [ |
| 339 | + { |
| 340 | + "commit_hash": "98e516011d6e096e25247b82fc5f196bbeecff10", |
| 341 | + "vcs_url": "https://github.com/aboutcode-org/sample", |
| 342 | + } |
| 343 | + ] |
0 commit comments