Skip to content

Commit 3a1b3da

Browse files
committed
Use new through model to bulk create package impact relation
Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent 611867e commit 3a1b3da

File tree

2 files changed

+37
-17
lines changed

2 files changed

+37
-17
lines changed

vulnerabilities/pipelines/v2_improvers/unfurl_version_range.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from univers.version_range import VersionRange
1818

1919
from vulnerabilities.models import ImpactedPackage
20+
from vulnerabilities.models import ImpactedPackageAffecting
2021
from vulnerabilities.models import PackageV2
2122
from vulnerabilities.pipelines import VulnerableCodePipeline
2223
from vulnerabilities.pipes.fetchcode_utils import get_versions
@@ -64,7 +65,7 @@ def unfurl_version_range(self):
6465
processed_affected_packages_count += bulk_create_with_m2m(
6566
purls=affected_purls,
6667
impact=impact,
67-
relation=ImpactedPackage.affecting_packages.through,
68+
relation=ImpactedPackageAffecting,
6869
logger=self.log,
6970
)
7071
processed_impacted_packages_count += 1
@@ -118,7 +119,7 @@ def bulk_create_with_m2m(purls, impact, relation, logger):
118119
affected_packages_v2 = PackageV2.objects.bulk_get_or_create_from_purls(purls=purls)
119120

120121
relations = [
121-
relation(impactedpackage=impact, packagev2=package) for package in affected_packages_v2
122+
relation(impacted_package=impact, package=package) for package in affected_packages_v2
122123
]
123124

124125
try:

vulnerabilities/tests/pipelines/v2_improvers/test_unfurl_version_range.py

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,40 +8,59 @@
88
#
99

1010

11+
from datetime import datetime
12+
from datetime import timedelta
1113
from unittest.mock import patch
1214

1315
from django.test import TestCase
16+
from packageurl import PackageURL
17+
from univers.version_range import VersionRange
1418

19+
from vulnerabilities.importer import AdvisoryDataV2
20+
from vulnerabilities.importer import AffectedPackageV2
1521
from vulnerabilities.models import AdvisoryV2
16-
from vulnerabilities.models import ImpactedPackage
1722
from vulnerabilities.models import PackageV2
1823
from vulnerabilities.pipelines.v2_improvers.unfurl_version_range import UnfurlVersionRangePipeline
24+
from vulnerabilities.pipes.advisory import insert_advisory_v2
1925

2026

2127
class TestUnfurlVersionRangePipeline(TestCase):
2228
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=[],
2545
advisory_id="GHSA-1234",
26-
avid="ghsa/GHSA-1234",
27-
unique_content_id="f" * 64,
46+
date_published=datetime.now() - timedelta(days=10),
2847
url="https://example.com/advisory",
29-
date_collected="2025-07-01T00:00:00Z",
3048
)
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",
3752
)
3853

3954
@patch("vulnerabilities.pipelines.v2_improvers.unfurl_version_range.get_purl_versions")
4055
def test_affecting_version_range_unfurl(self, mock_fetch):
41-
self.assertEqual(0, PackageV2.objects.count())
56+
self.assertEqual(1, PackageV2.objects.count())
4257
mock_fetch.return_value = {"3.4.1", "3.9.0", "2.1.0", "4.0.0", "4.1.0"}
4358
pipeline = UnfurlVersionRangePipeline()
4459
pipeline.execute()
4560

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

Comments
 (0)