|
8 | 8 | # |
9 | 9 |
|
10 | 10 |
|
| 11 | +from datetime import datetime |
| 12 | +from datetime import timedelta |
11 | 13 | from unittest.mock import patch |
12 | 14 |
|
13 | 15 | from django.test import TestCase |
| 16 | +from packageurl import PackageURL |
| 17 | +from univers.version_range import VersionRange |
14 | 18 |
|
| 19 | +from vulnerabilities.importer import AdvisoryDataV2 |
| 20 | +from vulnerabilities.importer import AffectedPackageV2 |
15 | 21 | from vulnerabilities.models import AdvisoryV2 |
16 | | -from vulnerabilities.models import ImpactedPackage |
17 | 22 | from vulnerabilities.models import PackageV2 |
18 | 23 | from vulnerabilities.pipelines.v2_improvers.unfurl_version_range import UnfurlVersionRangePipeline |
| 24 | +from vulnerabilities.pipes.advisory import insert_advisory_v2 |
19 | 25 |
|
20 | 26 |
|
21 | 27 | class TestUnfurlVersionRangePipeline(TestCase): |
22 | 28 | def setUp(self): |
23 | | - self.advisory1 = AdvisoryV2.objects.create( |
24 | | - datasource_id="ghsa", |
| 29 | + advisory1 = AdvisoryDataV2( |
| 30 | + summary="Test advisory", |
| 31 | + aliases=["CVE-2025-0001"], |
| 32 | + references=[], |
| 33 | + severities=[], |
| 34 | + weaknesses=[], |
| 35 | + affected_packages=[ |
| 36 | + AffectedPackageV2( |
| 37 | + package=PackageURL.from_string("pkg:npm/foobar"), |
| 38 | + affected_version_range=VersionRange.from_string("vers:npm/>3.2.1|<4.0.0"), |
| 39 | + fixed_version_range=VersionRange.from_string("vers:npm/4.0.0"), |
| 40 | + introduced_by_commit_patches=[], |
| 41 | + fixed_by_commit_patches=[], |
| 42 | + ), |
| 43 | + ], |
| 44 | + patches=[], |
25 | 45 | advisory_id="GHSA-1234", |
26 | | - avid="ghsa/GHSA-1234", |
27 | | - unique_content_id="f" * 64, |
| 46 | + date_published=datetime.now() - timedelta(days=10), |
28 | 47 | url="https://example.com/advisory", |
29 | | - date_collected="2025-07-01T00:00:00Z", |
30 | 48 | ) |
31 | | - |
32 | | - self.impact1 = ImpactedPackage.objects.create( |
33 | | - advisory=self.advisory1, |
34 | | - base_purl="pkg:npm/foobar", |
35 | | - affecting_vers="vers:npm/>3.2.1|<4.0.0", |
36 | | - fixed_vers=None, |
| 49 | + insert_advisory_v2( |
| 50 | + advisory=advisory1, |
| 51 | + pipeline_id="test_pipeline_v2", |
37 | 52 | ) |
38 | 53 |
|
39 | 54 | @patch("vulnerabilities.pipelines.v2_improvers.unfurl_version_range.get_purl_versions") |
40 | 55 | def test_affecting_version_range_unfurl(self, mock_fetch): |
41 | | - self.assertEqual(0, PackageV2.objects.count()) |
| 56 | + self.assertEqual(1, PackageV2.objects.count()) |
42 | 57 | mock_fetch.return_value = {"3.4.1", "3.9.0", "2.1.0", "4.0.0", "4.1.0"} |
43 | 58 | pipeline = UnfurlVersionRangePipeline() |
44 | 59 | pipeline.execute() |
45 | 60 |
|
46 | | - self.assertEqual(2, PackageV2.objects.count()) |
47 | | - self.assertEqual(2, self.impact1.affecting_packages.count()) |
| 61 | + advisory = AdvisoryV2.objects.first() |
| 62 | + impact = advisory.impacted_packages.first() |
| 63 | + |
| 64 | + self.assertEqual(3, PackageV2.objects.count()) |
| 65 | + self.assertEqual(1, impact.fixed_by_packages.count()) |
| 66 | + self.assertEqual(2, impact.affecting_packages.count()) |
0 commit comments