Skip to content

Commit 9d1df7c

Browse files
committed
Add tests for num queries for views
Signed-off-by: Tushar Goel <tushar.goel.dav@gmail.com>
1 parent 3cee771 commit 9d1df7c

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

vulnerabilities/tests/test_view.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
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
1820
from vulnerabilities.models import Alias
1921
from vulnerabilities.models import Package
2022
from vulnerabilities.models import Vulnerability
@@ -273,3 +275,56 @@ class TestCustomFilters:
273275
def test_url_quote_filter(self, input_value, expected_output):
274276
filtered = url_quote_filter(input_value)
275277
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

Comments
 (0)