Raise error if getting complaints page with invalid page param

If the `page` parameter passed to the `platform-admin/complaints`
pageis not an integer, we should return a `404` error page.
This commit is contained in:
Katie Smith
2018-07-04 10:38:46 +01:00
parent 6c27a17e1e
commit b27d29805b
3 changed files with 18 additions and 3 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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),