Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#4637 Updated logic to prevent error 500 #4691

Merged
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
68 changes: 68 additions & 0 deletions backend/dissemination/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -927,3 +927,71 @@ def test_many_results_returns_file(self, mock_prepare_workbook_for_download):
)

self.assertEqual(response.content, b"fake file content")


class PageHandlingTests(TestCase):
"""Test cases for ensuring page handling logic in AdvancedSearch and Search views"""

def setUp(self):
"""Set up test client and sample form data"""
self.client = Client()
self.advanced_search_url = reverse("dissemination:AdvancedSearch")
self.basic_search_url = reverse("dissemination:Search")

self.valid_post_data = {
"audit_year": ["2023"],
"limit": "10",
"order_by": "name",
"order_direction": "asc",
"page": "1",
}

@patch("dissemination.views.run_search")
def test_advanced_search_post_page_too_high(self, mock_run_search):
"""Ensure page resets to 1 when the requested page is greater than available pages"""
mock_run_search.return_value.count.return_value = (
5 # Mock result count (only 1 page available)
)

invalid_data = self.valid_post_data.copy()
invalid_data["page"] = "100" # Too high

response = self.client.post(self.advanced_search_url, invalid_data)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.context["page"], 1) # Should reset to 1

@patch("dissemination.views.run_search")
def test_advanced_search_post_page_zero(self, mock_run_search):
"""Ensure page resets to 1 when the requested page is zero"""
mock_run_search.return_value.count.return_value = 5

invalid_data = self.valid_post_data.copy()
invalid_data["page"] = "0"

response = self.client.post(self.advanced_search_url, invalid_data)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.context["page"], 1) # Should reset to 1

@patch("dissemination.views.run_search")
def test_advanced_search_post_page_empty(self, mock_run_search):
"""Ensure page defaults to 1 when no page is provided"""
mock_run_search.return_value.count.return_value = 5

invalid_data = self.valid_post_data.copy()
invalid_data["page"] = ""

response = self.client.post(self.advanced_search_url, invalid_data)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.context["page"], 1) # Should default to 1

@patch("dissemination.views.run_search")
def test_advanced_search_post_valid_page(self, mock_run_search):
"""Ensure valid page number remains unchanged"""
mock_run_search.return_value.count.return_value = 20 # Multiple pages exist

valid_data = self.valid_post_data.copy()
valid_data["page"] = "2" # Valid page

response = self.client.post(self.advanced_search_url, valid_data)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.context["page"], 2) # Should remain 2
4 changes: 2 additions & 2 deletions backend/dissemination/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ def post(self, request, *args, **kwargs):
# Reset page to one if the page number surpasses how many pages there actually are
page = form_data["page"]
ceiling = math.ceil(results_count / form_data["limit"])
if page > ceiling:
if not page or page > ceiling or page < 1:
page = 1

logger.info(f"TOTAL: results_count: [{results_count}]")
Expand Down Expand Up @@ -321,7 +321,7 @@ def post(self, request, *args, **kwargs):
# Reset page to one if the page number surpasses how many pages there actually are
page = form_data["page"]
ceiling = math.ceil(results_count / form_data["limit"])
if page > ceiling:
if not page or page > ceiling or page < 1:
page = 1

logger.info(f"TOTAL: results_count: [{results_count}]")
Expand Down