diff --git a/cfgov/regulations3k/models/pages.py b/cfgov/regulations3k/models/pages.py index 93d6c199574..f115f71f541 100644 --- a/cfgov/regulations3k/models/pages.py +++ b/cfgov/regulations3k/models/pages.py @@ -6,6 +6,7 @@ from functools import partial from urllib.parse import urljoin +from django.core.exceptions import ValidationError from django.core.paginator import InvalidPage, Paginator from django.db import models from django.http import Http404, HttpResponse, JsonResponse @@ -283,11 +284,15 @@ def get_effective_version(self, request, date_str=None): if not draft_permission: query_filter['draft'] = False - effective_version = self.regulation.versions.filter( - **query_filter - ).order_by( - '-effective_date' - ).first() + try: + effective_version = self.regulation.versions.filter( + **query_filter + ).order_by( + '-effective_date' + ).first() + except ValidationError: + # This can be raised by an invalid date string + raise Http404 if effective_version is None: raise Http404 diff --git a/cfgov/regulations3k/tests/test_pages.py b/cfgov/regulations3k/tests/test_pages.py index 8ec6553f0fe..bfaf4166dee 100644 --- a/cfgov/regulations3k/tests/test_pages.py +++ b/cfgov/regulations3k/tests/test_pages.py @@ -87,3 +87,11 @@ def test_redirect_uppercase(self): self.assertEqual( response.get('location'), '/reg-landing/1002/interp-2/') + + def test_invalid_effective_date(self): + # Try to fetch a date string that's incorrectly formatted. + # It should 404. + response = self.client.get( + '/reg-landing/1002/2014-18-01/' + ) + self.assertEqual(response.status_code, 404)