|
8 | 8 | # |
9 | 9 |
|
10 | 10 | import os |
| 11 | +import time |
11 | 12 |
|
12 | 13 | import pytest |
13 | 14 | from django.test import Client |
14 | 15 | from django.test import TestCase |
15 | 16 | from packageurl import PackageURL |
16 | 17 | from univers import versions |
17 | 18 |
|
| 19 | +from vulnerabilities import models |
18 | 20 | from vulnerabilities.models import Alias |
19 | 21 | from vulnerabilities.models import Package |
20 | 22 | from vulnerabilities.models import Vulnerability |
@@ -273,3 +275,56 @@ class TestCustomFilters: |
273 | 275 | def test_url_quote_filter(self, input_value, expected_output): |
274 | 276 | filtered = url_quote_filter(input_value) |
275 | 277 | assert filtered == expected_output |
| 278 | + |
| 279 | + |
| 280 | +class VulnerabilitySearchTestCaseWithPackages(TestCase): |
| 281 | + def setUp(self): |
| 282 | + self.vuln1 = models.Vulnerability.objects.create( |
| 283 | + vulnerability_id="VCID-1", summary="Vuln 1" |
| 284 | + ) |
| 285 | + self.vuln2 = models.Vulnerability.objects.create( |
| 286 | + vulnerability_id="VCID-2", summary="Vuln 2" |
| 287 | + ) |
| 288 | + self.vuln3 = models.Vulnerability.objects.create( |
| 289 | + vulnerability_id="VCID-3", summary="Vuln 3" |
| 290 | + ) |
| 291 | + self.vuln4 = models.Vulnerability.objects.create( |
| 292 | + vulnerability_id="VCID-4", summary="Vuln 4" |
| 293 | + ) |
| 294 | + self.vuln5 = models.Vulnerability.objects.create( |
| 295 | + vulnerability_id="VCID-5", summary="Vuln 5" |
| 296 | + ) |
| 297 | + |
| 298 | + self.package1 = models.Package.objects.create(type="pypi", name="django", version="1.0.0") |
| 299 | + self.package2 = models.Package.objects.create(type="pypi", name="django", version="2.0.0") |
| 300 | + self.package3 = models.Package.objects.create(type="pypi", name="django", version="3.0.0") |
| 301 | + |
| 302 | + models.AffectedByPackageRelatedVulnerability.objects.create( |
| 303 | + package=self.package1, vulnerability=self.vuln1 |
| 304 | + ) |
| 305 | + |
| 306 | + models.AffectedByPackageRelatedVulnerability.objects.create( |
| 307 | + package=self.package1, vulnerability=self.vuln2 |
| 308 | + ) |
| 309 | + |
| 310 | + models.AffectedByPackageRelatedVulnerability.objects.create( |
| 311 | + package=self.package2, vulnerability=self.vuln3 |
| 312 | + ) |
| 313 | + |
| 314 | + models.AffectedByPackageRelatedVulnerability.objects.create( |
| 315 | + package=self.package2, vulnerability=self.vuln4 |
| 316 | + ) |
| 317 | + |
| 318 | + # Associate fixed_by package with vuln5 |
| 319 | + |
| 320 | + models.FixingPackageRelatedVulnerability.objects.create( |
| 321 | + package=self.package3, vulnerability=self.vuln5 |
| 322 | + ) |
| 323 | + |
| 324 | + def test_aggregate_fixed_and_affected_packages(self): |
| 325 | + with self.assertNumQueries(11): |
| 326 | + start_time = time.time() |
| 327 | + response = self.client.get(f"/vulnerabilities/{self.vuln1.vulnerability_id}") |
| 328 | + end_time = time.time() |
| 329 | + assert end_time - start_time < 0.05 |
| 330 | + self.assertEqual(response.status_code, 200) |
0 commit comments