Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion vulnerabilities/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2926,7 +2926,9 @@ def to_dict(self):

class AdvisoryV2QuerySet(BaseQuerySet):
def latest_for_avid(self, avid: str):
return self.get(avid=avid, is_latest=True)
# Return None when there is no advisory for this avid: the detail
# views rely on this to raise an Http404 instead of a server error.
return self.filter(avid=avid, is_latest=True).first()

def latest_per_avid(self):
return self.filter(is_latest=True)
Expand Down
19 changes: 19 additions & 0 deletions vulnerabilities/tests/test_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -379,3 +379,22 @@ def test_throttle_after_15_requests(self):
HTTP_USER_AGENT="test-agent",
)
assert response.status_code == 429


class AdvisoryDetailNotFoundTestCase(TestCase):
def setUp(self):
# bypass the altcha bot protection middleware
import time

session = self.client.session
session["altcha_verified_at"] = time.time()
session.save()

def test_unknown_advisory_avid_returns_404_not_500(self):
# https://github.com/aboutcode-org/vulnerablecode/issues/2396
response = self.client.get("/advisories/pysec/PYSEC-3000-0")
self.assertEqual(404, response.status_code)

def test_unknown_advisory_packages_avid_returns_404_not_500(self):
response = self.client.get("/advisories/packages/pysec/PYSEC-3000-0")
self.assertEqual(404, response.status_code)