Skip to content

Commit 6b4c6bb

Browse files
authored
Add tests for num queries for views (#1730)
* Add tests for num queries for views Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com> * Add tests for num queries for views Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com> * Add tests for num queries for views Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com> --------- Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent cebb5d6 commit 6b4c6bb

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

vulnerabilities/tests/test_view.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,21 @@
88
#
99

1010
import os
11+
import time
1112

1213
import pytest
1314
from django.test import Client
1415
from django.test import TestCase
1516
from packageurl import PackageURL
1617
from univers import versions
1718

19+
from vulnerabilities import models
20+
from vulnerabilities.models import AffectedByPackageRelatedVulnerability
1821
from vulnerabilities.models import Alias
22+
from vulnerabilities.models import FixingPackageRelatedVulnerability
1923
from vulnerabilities.models import Package
2024
from vulnerabilities.models import Vulnerability
25+
from vulnerabilities.models import VulnerabilitySeverity
2126
from vulnerabilities.templatetags.url_filters import url_quote_filter
2227
from vulnerabilities.views import PackageDetails
2328
from vulnerabilities.views import PackageSearch
@@ -273,3 +278,56 @@ class TestCustomFilters:
273278
def test_url_quote_filter(self, input_value, expected_output):
274279
filtered = url_quote_filter(input_value)
275280
assert filtered == expected_output
281+
282+
283+
class VulnerabilitySearchTestCaseWithPackages(TestCase):
284+
def setUp(self):
285+
self.vuln1 = Vulnerability.objects.create(vulnerability_id="VCID-1", summary="Vuln 1")
286+
self.vuln2 = Vulnerability.objects.create(vulnerability_id="VCID-2", summary="Vuln 2")
287+
self.vuln3 = Vulnerability.objects.create(vulnerability_id="VCID-3", summary="Vuln 3")
288+
self.vuln4 = Vulnerability.objects.create(vulnerability_id="VCID-4", summary="Vuln 4")
289+
self.vuln5 = Vulnerability.objects.create(vulnerability_id="VCID-5", summary="Vuln 5")
290+
291+
self.package1 = Package.objects.create(type="pypi", name="django", version="1.0.0")
292+
self.package2 = Package.objects.create(type="pypi", name="django", version="2.0.0")
293+
self.package3 = Package.objects.create(type="pypi", name="django", version="3.0.0")
294+
295+
AffectedByPackageRelatedVulnerability.objects.create(
296+
package=self.package1, vulnerability=self.vuln1
297+
)
298+
AffectedByPackageRelatedVulnerability.objects.create(
299+
package=self.package1, vulnerability=self.vuln2
300+
)
301+
AffectedByPackageRelatedVulnerability.objects.create(
302+
package=self.package2, vulnerability=self.vuln3
303+
)
304+
AffectedByPackageRelatedVulnerability.objects.create(
305+
package=self.package2, vulnerability=self.vuln4
306+
)
307+
308+
FixingPackageRelatedVulnerability.objects.create(
309+
package=self.package3, vulnerability=self.vuln5
310+
)
311+
312+
self.severity1 = VulnerabilitySeverity.objects.create(
313+
scoring_system="CVSSv3",
314+
value="9.8",
315+
scoring_elements="AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
316+
)
317+
self.severity2 = VulnerabilitySeverity.objects.create(
318+
scoring_system="CVSSv3",
319+
value="7.5",
320+
scoring_elements="AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
321+
)
322+
323+
self.vuln1.severities.add(self.severity1)
324+
self.vuln1.severities.add(self.severity2)
325+
self.vuln1.save()
326+
327+
def test_aggregate_fixed_and_affected_packages(self):
328+
with self.assertNumQueries(11):
329+
start_time = time.time()
330+
response = self.client.get(f"/vulnerabilities/{self.vuln1.vulnerability_id}")
331+
end_time = time.time()
332+
assert end_time - start_time < 0.05
333+
self.assertEqual(response.status_code, 200)

0 commit comments

Comments
 (0)