diff --git a/app/main/views/jobs.py b/app/main/views/jobs.py index 2549df1f7..fe2c3bc6d 100644 --- a/app/main/views/jobs.py +++ b/app/main/views/jobs.py @@ -199,7 +199,7 @@ def get_notifications(service_id, message_type, status_override=None): # TODO get the api to return count of pages as well. page = get_page_from_request() if page is None: - abort(404, "Invalid page argument ({}) reverting to page 1.".format(request.args['page'], None)) + abort(404, "Invalid page argument ({}).".format(request.args.get('page'))) if message_type not in ['email', 'sms', 'letter']: abort(404) filter_args = parse_filter_args(request.args) diff --git a/app/main/views/platform_admin.py b/app/main/views/platform_admin.py index 30cba5208..584fdfcf8 100644 --- a/app/main/views/platform_admin.py +++ b/app/main/views/platform_admin.py @@ -1,7 +1,7 @@ import itertools from datetime import datetime -from flask import render_template, request, url_for +from flask import abort, render_template, request, url_for from flask_login import login_required from app import ( @@ -15,6 +15,7 @@ from app.statistics_utils import get_formatted_percentage from app.utils import ( generate_next_dict, generate_previous_dict, + get_page_from_request, user_is_platform_admin, ) @@ -194,7 +195,10 @@ def platform_admin_services(): @login_required @user_is_platform_admin def platform_admin_list_complaints(): - page = int(request.args.get('page', 1)) + page = get_page_from_request() + if page is None: + abort(404, "Invalid page argument ({}).".format(request.args.get('page'))) + response = complaint_api_client.get_all_complaints(page=page) prev_page = None diff --git a/tests/app/main/views/test_platform_admin.py b/tests/app/main/views/test_platform_admin.py index a4f5ba518..047affe81 100644 --- a/tests/app/main/views/test_platform_admin.py +++ b/tests/app/main/views/test_platform_admin.py @@ -706,6 +706,17 @@ def test_should_show_complaints_with_next_previous(mocker, client, platform_admi assert 'page 1' in prev_page_link.text.strip() +def test_platform_admin_list_complaints_returns_404_with_invalid_page(mocker, client, platform_admin_user): + mock_get_user(mocker, user=platform_admin_user) + client.login(platform_admin_user) + + mocker.patch('app.complaint_api_client.get_all_complaints', return_value={'complaints': [], 'links': {}}) + + response = client.get(url_for('main.platform_admin_list_complaints', page='invalid')) + + assert response.status_code == 404 + + @pytest.mark.parametrize('number, total, threshold, result', [ (0, 0, 0, False), (1, 1, 0, True),