|
18 | 18 |
|
19 | 19 | from vulnerabilities import models |
20 | 20 | from vulnerabilities.importer import AdvisoryData |
| 21 | +from vulnerabilities.importer import AdvisoryDataV2 |
21 | 22 | from vulnerabilities.importer import AffectedPackage |
| 23 | +from vulnerabilities.importer import AffectedPackageV2 |
22 | 24 | from vulnerabilities.importer import PackageCommitPatchData |
23 | 25 | from vulnerabilities.importer import Reference |
24 | 26 | from vulnerabilities.models import AdvisoryAlias |
25 | 27 | from vulnerabilities.models import AdvisoryReference |
26 | 28 | from vulnerabilities.models import AdvisorySeverity |
| 29 | +from vulnerabilities.models import AdvisoryV2 |
27 | 30 | from vulnerabilities.models import AdvisoryWeakness |
28 | 31 | from vulnerabilities.models import PackageCommitPatch |
29 | 32 | from vulnerabilities.pipes.advisory import get_or_create_advisory_aliases |
|
33 | 36 | from vulnerabilities.pipes.advisory import get_or_create_advisory_weaknesses |
34 | 37 | from vulnerabilities.pipes.advisory import get_or_create_aliases |
35 | 38 | from vulnerabilities.pipes.advisory import import_advisory |
| 39 | +from vulnerabilities.pipes.advisory import insert_advisory_v2 |
| 40 | +from vulnerabilities.tests.pipelines import TestLogger |
36 | 41 | from vulnerabilities.utils import compute_content_id |
37 | 42 |
|
38 | 43 |
|
@@ -257,3 +262,76 @@ def test_get_or_create_advisory_commit(advisory_commit): |
257 | 262 | assert isinstance(commit, PackageCommitPatch) |
258 | 263 | assert commit.commit_hash in [c.commit_hash for c in advisory_commit] |
259 | 264 | assert commit.vcs_url in [c.vcs_url for c in advisory_commit] |
| 265 | + |
| 266 | + |
| 267 | +class TestLatestAdvisoryV2(TestCase): |
| 268 | + def setUp(self): |
| 269 | + self.logger = TestLogger() |
| 270 | + self.advisory1 = AdvisoryDataV2( |
| 271 | + summary="Test advisory old", |
| 272 | + aliases=["CVE-2025-0001"], |
| 273 | + references=[], |
| 274 | + severities=[], |
| 275 | + weaknesses=[], |
| 276 | + affected_packages=[ |
| 277 | + AffectedPackageV2( |
| 278 | + package=PackageURL.from_string("pkg:npm/foobar"), |
| 279 | + affected_version_range=VersionRange.from_string("vers:npm/>3.2.1|<4.0.0"), |
| 280 | + fixed_version_range=VersionRange.from_string("vers:npm/4.0.0"), |
| 281 | + introduced_by_commit_patches=[], |
| 282 | + fixed_by_commit_patches=[], |
| 283 | + ), |
| 284 | + ], |
| 285 | + patches=[], |
| 286 | + advisory_id="GHSA-1234", |
| 287 | + url="https://example.com/advisory", |
| 288 | + ) |
| 289 | + |
| 290 | + self.advisory2 = AdvisoryDataV2( |
| 291 | + summary="Test advisory new", |
| 292 | + aliases=["CVE-2025-0001"], |
| 293 | + references=[], |
| 294 | + severities=[], |
| 295 | + weaknesses=[], |
| 296 | + affected_packages=[ |
| 297 | + AffectedPackageV2( |
| 298 | + package=PackageURL.from_string("pkg:npm/foobar"), |
| 299 | + affected_version_range=VersionRange.from_string("vers:npm/>3.2.1|<4.0.0"), |
| 300 | + fixed_version_range=VersionRange.from_string("vers:npm/4.0.0"), |
| 301 | + introduced_by_commit_patches=[], |
| 302 | + fixed_by_commit_patches=[], |
| 303 | + ), |
| 304 | + AffectedPackageV2( |
| 305 | + package=PackageURL.from_string("pkg:npm/foobar"), |
| 306 | + affected_version_range=None, |
| 307 | + fixed_version_range=None, |
| 308 | + introduced_by_commit_patches=[], |
| 309 | + fixed_by_commit_patches=[ |
| 310 | + PackageCommitPatchData( |
| 311 | + vcs_url="https://foobar.vcs/", |
| 312 | + commit_hash="982f801f", |
| 313 | + ), |
| 314 | + ], |
| 315 | + ), |
| 316 | + ], |
| 317 | + patches=[], |
| 318 | + advisory_id="GHSA-1234", |
| 319 | + url="https://example.com/advisory", |
| 320 | + ) |
| 321 | + |
| 322 | + insert_advisory_v2( |
| 323 | + advisory=self.advisory1, |
| 324 | + pipeline_id="test_pipeline_v2", |
| 325 | + logger=self.logger.write, |
| 326 | + ) |
| 327 | + |
| 328 | + def test_latest_advisory_update_on_advisory_insert(self): |
| 329 | + adv_old = AdvisoryV2.objects.get(avid="test_pipeline_v2/GHSA-1234", is_latest=True) |
| 330 | + insert_advisory_v2( |
| 331 | + advisory=self.advisory2, |
| 332 | + pipeline_id="test_pipeline_v2", |
| 333 | + logger=self.logger.write, |
| 334 | + ) |
| 335 | + adv_new = AdvisoryV2.objects.get(avid="test_pipeline_v2/GHSA-1234", is_latest=True) |
| 336 | + self.assertEqual("Test advisory old", adv_old.summary) |
| 337 | + self.assertEqual("Test advisory new", adv_new.summary) |
0 commit comments