From ef335e760142ac3bc359c9606cb2a5357b0bdf06 Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Mon, 4 Nov 2019 11:07:55 +0000 Subject: [PATCH] Require IDs to be UUIDs in URLS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We mostly rely on the API returning a 404 to generate 404s for trying to get things with non-UUID IDs. This is fine, except our tests often mock these API calls. So it could look like everything is working fine, except the thing your passing in might never be a valid UUID, and thus would 404 in a non-test environment. So this commit: 1. uses the `uuid` URL converter everywhere there’s something that looks like an ID in a URL parameter 2. adds a test which automates checking for 1. --- app/main/views/api_keys.py | 18 +-- app/main/views/conversation.py | 10 +- app/main/views/dashboard.py | 20 ++-- app/main/views/email_branding.py | 4 +- app/main/views/find_users.py | 2 +- app/main/views/history.py | 2 +- app/main/views/jobs.py | 22 ++-- app/main/views/letter_branding.py | 4 +- app/main/views/manage_users.py | 18 +-- app/main/views/notifications.py | 10 +- app/main/views/organisations.py | 38 +++---- app/main/views/platform_admin.py | 2 +- app/main/views/providers.py | 4 +- app/main/views/send.py | 34 +++--- app/main/views/service_settings.py | 107 +++++++++--------- app/main/views/templates.py | 72 +++++++----- app/main/views/uploads.py | 10 +- tests/app/main/test_permissions.py | 12 +- tests/app/main/views/test_find_users.py | 25 ++-- tests/app/main/views/test_jobs.py | 2 +- tests/app/main/views/test_letter_branding.py | 14 ++- tests/app/main/views/test_providers.py | 3 +- tests/app/main/views/test_send.py | 2 +- tests/app/main/views/test_service_settings.py | 15 ++- tests/app/main/views/test_templates.py | 3 +- tests/app/main/views/test_uploads.py | 63 +++++++---- 26 files changed, 283 insertions(+), 233 deletions(-) diff --git a/app/main/views/api_keys.py b/app/main/views/api_keys.py index a716f9b22..f8fccc83e 100644 --- a/app/main/views/api_keys.py +++ b/app/main/views/api_keys.py @@ -32,7 +32,7 @@ from app.utils import email_safe, user_has_permissions dummy_bearer_token = 'bearer_token_set' -@main.route("/services//api") +@main.route("/services//api") @user_has_permissions('manage_api_keys') def api_integration(service_id): callbacks_link = ( @@ -46,13 +46,13 @@ def api_integration(service_id): ) -@main.route("/services//api/documentation") +@main.route("/services//api/documentation") @user_has_permissions('manage_api_keys') def api_documentation(service_id): return redirect(url_for('.documentation'), code=301) -@main.route("/services//api/whitelist", methods=['GET', 'POST']) +@main.route("/services//api/whitelist", methods=['GET', 'POST']) @user_has_permissions('manage_api_keys') def whitelist(service_id): form = Whitelist() @@ -71,7 +71,7 @@ def whitelist(service_id): ) -@main.route("/services//api/keys") +@main.route("/services//api/keys") @user_has_permissions('manage_api_keys') def api_keys(service_id): return render_template( @@ -79,7 +79,7 @@ def api_keys(service_id): ) -@main.route("/services//api/keys/create", methods=['GET', 'POST']) +@main.route("/services//api/keys/create", methods=['GET', 'POST']) @user_has_permissions('manage_api_keys', restrict_admin_usage=True) def create_api_key(service_id): form = CreateKeyForm(current_service.api_keys) @@ -119,7 +119,7 @@ def create_api_key(service_id): ) -@main.route("/services//api/keys/revoke/", methods=['GET', 'POST']) +@main.route("/services//api/keys/revoke/", methods=['GET', 'POST']) @user_has_permissions('manage_api_keys') def revoke_api_key(service_id, key_id): key_name = current_service.get_api_key(key_id)['name'] @@ -161,7 +161,7 @@ def check_token_against_dummy_bearer(token): return '' -@main.route("/services//api/callbacks", methods=['GET']) +@main.route("/services//api/callbacks", methods=['GET']) @user_has_permissions('manage_api_keys') def api_callbacks(service_id): if not current_service.has_permission('inbound_sms'): @@ -185,7 +185,7 @@ def get_delivery_status_callback_details(): ) -@main.route("/services//api/callbacks/delivery-status-callback", methods=['GET', 'POST']) +@main.route("/services//api/callbacks/delivery-status-callback", methods=['GET', 'POST']) @user_has_permissions('manage_api_keys') def delivery_status_callback(service_id): delivery_status_callback = get_delivery_status_callback_details() @@ -247,7 +247,7 @@ def get_received_text_messages_callback(): ) -@main.route("/services//api/callbacks/received-text-messages-callback", methods=['GET', 'POST']) +@main.route("/services//api/callbacks/received-text-messages-callback", methods=['GET', 'POST']) @user_has_permissions('manage_api_keys') def received_text_messages_callback(service_id): if not current_service.has_permission('inbound_sms'): diff --git a/app/main/views/conversation.py b/app/main/views/conversation.py index e4558dac9..e33c04029 100644 --- a/app/main/views/conversation.py +++ b/app/main/views/conversation.py @@ -11,7 +11,7 @@ from app.models.template_list import TemplateList from app.utils import user_has_permissions -@main.route("/services//conversation/") +@main.route("/services//conversation/") @user_has_permissions('view_activity') def conversation(service_id, notification_id): @@ -26,7 +26,7 @@ def conversation(service_id, notification_id): ) -@main.route("/services//conversation/.json") +@main.route("/services//conversation/.json") @user_has_permissions('view_activity') def conversation_updates(service_id, notification_id): @@ -36,8 +36,8 @@ def conversation_updates(service_id, notification_id): )) -@main.route("/services//conversation//reply-with") -@main.route("/services//conversation//reply-with/from-folder/") +@main.route("/services//conversation//reply-with") +@main.route("/services//conversation//reply-with/from-folder/") @user_has_permissions('send_messages') def conversation_reply( service_id, @@ -59,7 +59,7 @@ def conversation_reply( ) -@main.route("/services//conversation//reply-with/") +@main.route("/services//conversation//reply-with/") @user_has_permissions('send_messages') def conversation_reply_with_template( service_id, diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index 950c2cc01..639abbc1a 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -38,13 +38,13 @@ from app.utils import ( ) -@main.route("/services//dashboard") +@main.route("/services//dashboard") @user_has_permissions('view_activity', 'send_messages') def old_service_dashboard(service_id): return redirect(url_for('.service_dashboard', service_id=service_id)) -@main.route("/services/") +@main.route("/services/") @user_has_permissions() def service_dashboard(service_id): @@ -62,20 +62,20 @@ def service_dashboard(service_id): ) -@main.route("/services//dashboard.json") +@main.route("/services//dashboard.json") @user_has_permissions('view_activity') def service_dashboard_updates(service_id): return jsonify(**get_dashboard_partials(service_id)) -@main.route("/services//template-activity") +@main.route("/services//template-activity") @user_has_permissions('view_activity') def template_history(service_id): return redirect(url_for('main.template_usage', service_id=service_id), code=301) -@main.route("/services//template-usage") +@main.route("/services//template-usage") @user_has_permissions('view_activity') def template_usage(service_id): @@ -124,7 +124,7 @@ def template_usage(service_id): ) -@main.route("/services//usage") +@main.route("/services//usage") @user_has_permissions('manage_service', allow_org_user=True) def usage(service_id): year, current_financial_year = requested_and_current_financial_year(request) @@ -151,7 +151,7 @@ def usage(service_id): ) -@main.route("/services//monthly") +@main.route("/services//monthly") @user_has_permissions('view_activity') def monthly(service_id): year, current_financial_year = requested_and_current_financial_year(request) @@ -169,7 +169,7 @@ def monthly(service_id): ) -@main.route("/services//inbox") +@main.route("/services//inbox") @user_has_permissions('view_activity') def inbox(service_id): @@ -180,14 +180,14 @@ def inbox(service_id): ) -@main.route("/services//inbox.json") +@main.route("/services//inbox.json") @user_has_permissions('view_activity') def inbox_updates(service_id): return jsonify(get_inbox_partials(service_id)) -@main.route("/services//inbox.csv") +@main.route("/services//inbox.csv") @user_has_permissions('view_activity') def inbox_download(service_id): return Response( diff --git a/app/main/views/email_branding.py b/app/main/views/email_branding.py index 50d7aa70c..c32227242 100644 --- a/app/main/views/email_branding.py +++ b/app/main/views/email_branding.py @@ -26,8 +26,8 @@ def email_branding(): ) -@main.route("/email-branding//edit", methods=['GET', 'POST']) -@main.route("/email-branding//edit/", methods=['GET', 'POST']) +@main.route("/email-branding//edit", methods=['GET', 'POST']) +@main.route("/email-branding//edit/", methods=['GET', 'POST']) @user_is_platform_admin def update_email_branding(branding_id, logo=None): email_branding = email_branding_client.get_email_branding(branding_id)['email_branding'] diff --git a/app/main/views/find_users.py b/app/main/views/find_users.py index fa42b5a19..5f7fd57b7 100644 --- a/app/main/views/find_users.py +++ b/app/main/views/find_users.py @@ -23,7 +23,7 @@ def find_users_by_email(): ) -@main.route("/users/", methods=['GET']) +@main.route("/users/", methods=['GET']) @user_is_platform_admin def user_information(user_id): return render_template( diff --git a/app/main/views/history.py b/app/main/views/history.py index ca6dd60fb..1be4f1386 100644 --- a/app/main/views/history.py +++ b/app/main/views/history.py @@ -9,7 +9,7 @@ from app.models.event import APIKeyEvent, APIKeyEvents, ServiceEvents from app.utils import user_has_permissions -@main.route("/services//history") +@main.route("/services//history") @user_has_permissions('manage_service') def history(service_id): diff --git a/app/main/views/jobs.py b/app/main/views/jobs.py index fb5ffe367..06f225e90 100644 --- a/app/main/views/jobs.py +++ b/app/main/views/jobs.py @@ -47,7 +47,7 @@ from app.utils import ( ) -@main.route("/services//jobs") +@main.route("/services//jobs") @user_has_permissions() def view_jobs(service_id): page = int(request.args.get('page', 1)) @@ -81,7 +81,7 @@ def view_jobs(service_id): ) -@main.route("/services//jobs/") +@main.route("/services//jobs/") @user_has_permissions() def view_job(service_id, job_id): job = job_api_client.get_job(service_id, job_id)['data'] @@ -130,7 +130,7 @@ def view_job(service_id, job_id): ) -@main.route("/services//jobs/.csv") +@main.route("/services//jobs/.csv") @user_has_permissions('view_activity') def view_job_csv(service_id, job_id): job = job_api_client.get_job(service_id, job_id)['data'] @@ -164,14 +164,14 @@ def view_job_csv(service_id, job_id): ) -@main.route("/services//jobs/", methods=['POST']) +@main.route("/services//jobs/", methods=['POST']) @user_has_permissions('send_messages') def cancel_job(service_id, job_id): job_api_client.cancel_job(service_id, job_id) return redirect(url_for('main.service_dashboard', service_id=service_id)) -@main.route("/services//jobs//cancel", methods=['GET', 'POST']) +@main.route("/services//jobs//cancel", methods=['GET', 'POST']) @user_has_permissions() def cancel_letter_job(service_id, job_id): if request.method == 'POST': @@ -196,7 +196,7 @@ def cancel_letter_job(service_id, job_id): return view_job(service_id, job_id) -@main.route("/services//jobs/.json") +@main.route("/services//jobs/.json") @user_has_permissions() def view_job_updates(service_id, job_id): @@ -212,8 +212,8 @@ def view_job_updates(service_id, job_id): )) -@main.route('/services//notifications', methods=['GET', 'POST']) -@main.route('/services//notifications/', methods=['GET', 'POST']) +@main.route('/services//notifications', methods=['GET', 'POST']) +@main.route('/services//notifications/', methods=['GET', 'POST']) @user_has_permissions() def view_notifications(service_id, message_type=None): return render_template( @@ -236,8 +236,8 @@ def view_notifications(service_id, message_type=None): ) -@main.route('/services//notifications.json', methods=['GET', 'POST']) -@main.route('/services//notifications/.json', methods=['GET', 'POST']) +@main.route('/services//notifications.json', methods=['GET', 'POST']) +@main.route('/services//notifications/.json', methods=['GET', 'POST']) @user_has_permissions() def get_notifications_as_json(service_id, message_type=None): return jsonify(get_notifications( @@ -245,7 +245,7 @@ def get_notifications_as_json(service_id, message_type=None): )) -@main.route('/services//notifications/.csv', endpoint="view_notifications_csv") +@main.route('/services//notifications/.csv', endpoint="view_notifications_csv") @user_has_permissions() def get_notifications(service_id, message_type, status_override=None): # TODO get the api to return count of pages as well. diff --git a/app/main/views/letter_branding.py b/app/main/views/letter_branding.py index 97b01c9f4..76edbc08a 100644 --- a/app/main/views/letter_branding.py +++ b/app/main/views/letter_branding.py @@ -44,8 +44,8 @@ def letter_branding(): ) -@main.route("/letter-branding//edit", methods=['GET', 'POST']) -@main.route("/letter-branding//edit/", methods=['GET', 'POST']) +@main.route("/letter-branding//edit", methods=['GET', 'POST']) +@main.route("/letter-branding//edit/", methods=['GET', 'POST']) @user_is_platform_admin def update_letter_branding(branding_id, logo=None): letter_branding = letter_branding_client.get_letter_branding(branding_id) diff --git a/app/main/views/manage_users.py b/app/main/views/manage_users.py index d74ffd36e..5499e0907 100644 --- a/app/main/views/manage_users.py +++ b/app/main/views/manage_users.py @@ -29,7 +29,7 @@ from app.models.user import InvitedUser, User from app.utils import is_gov_user, redact_mobile_number, user_has_permissions -@main.route("/services//users") +@main.route("/services//users") @user_has_permissions(allow_org_user=True) def manage_users(service_id): return render_template( @@ -42,7 +42,7 @@ def manage_users(service_id): ) -@main.route("/services//users/invite", methods=['GET', 'POST']) +@main.route("/services//users/invite", methods=['GET', 'POST']) @user_has_permissions('manage_service') def invite_user(service_id): @@ -78,7 +78,7 @@ def invite_user(service_id): ) -@main.route("/services//users/", methods=['GET', 'POST']) +@main.route("/services//users/", methods=['GET', 'POST']) @user_has_permissions('manage_service') def edit_user_permissions(service_id, user_id): service_has_email_auth = current_service.has_permission('email_auth') @@ -118,7 +118,7 @@ def edit_user_permissions(service_id, user_id): ) -@main.route("/services//users//delete", methods=['POST']) +@main.route("/services//users//delete", methods=['POST']) @user_has_permissions('manage_service') def remove_user_from_service(service_id, user_id): try: @@ -139,7 +139,7 @@ def remove_user_from_service(service_id, user_id): )) -@main.route("/services//users//edit-email", methods=['GET', 'POST']) +@main.route("/services//users//edit-email", methods=['GET', 'POST']) @user_has_permissions('manage_service') def edit_user_email(service_id, user_id): user = current_service.get_team_member(user_id) @@ -166,7 +166,7 @@ def edit_user_email(service_id, user_id): ) -@main.route("/services//users//edit-email/confirm", methods=['GET', 'POST']) +@main.route("/services//users//edit-email/confirm", methods=['GET', 'POST']) @user_has_permissions('manage_service') def confirm_edit_user_email(service_id, user_id): user = current_service.get_team_member(user_id) @@ -200,7 +200,7 @@ def confirm_edit_user_email(service_id, user_id): ) -@main.route("/services//users//edit-mobile-number", methods=['GET', 'POST']) +@main.route("/services//users//edit-mobile-number", methods=['GET', 'POST']) @user_has_permissions('manage_service') def edit_user_mobile_number(service_id, user_id): user = current_service.get_team_member(user_id) @@ -224,7 +224,7 @@ def edit_user_mobile_number(service_id, user_id): ) -@main.route("/services//users//edit-mobile-number/confirm", methods=['GET', 'POST']) +@main.route("/services//users//edit-mobile-number/confirm", methods=['GET', 'POST']) @user_has_permissions('manage_service') def confirm_edit_user_mobile_number(service_id, user_id): user = current_service.get_team_member(user_id) @@ -259,7 +259,7 @@ def confirm_edit_user_mobile_number(service_id, user_id): ) -@main.route("/services//cancel-invited-user/", methods=['GET']) +@main.route("/services//cancel-invited-user/", methods=['GET']) @user_has_permissions('manage_service') def cancel_invited_user(service_id, invited_user_id): current_service.cancel_invite(invited_user_id) diff --git a/app/main/views/notifications.py b/app/main/views/notifications.py index d0f2f7622..f02db4dfd 100644 --- a/app/main/views/notifications.py +++ b/app/main/views/notifications.py @@ -48,7 +48,7 @@ from app.utils import ( ) -@main.route("/services//notification/") +@main.route("/services//notification/") @user_has_permissions('view_activity', 'send_messages') def view_notification(service_id, notification_id): notification = notification_api_client.get_notification(service_id, str(notification_id)) @@ -162,7 +162,7 @@ def view_notification(service_id, notification_id): ) -@main.route("/services//notification//cancel", methods=['GET', 'POST']) +@main.route("/services//notification//cancel", methods=['GET', 'POST']) @user_has_permissions('view_activity', 'send_messages') def cancel_letter(service_id, notification_id): @@ -180,7 +180,7 @@ def get_preview_error_image(): return file.read() -@main.route("/services//notification/.") +@main.route("/services//notification/.") @user_has_permissions('view_activity') def view_letter_notification_as_preview( service_id, notification_id, filetype, with_metadata=False @@ -207,7 +207,7 @@ def view_letter_notification_as_preview( return display_file -@main.route("/services//notification/.json") +@main.route("/services//notification/.json") @user_has_permissions('view_activity', 'send_messages') def view_notification_updates(service_id, notification_id): return jsonify(**get_single_notification_partials( @@ -241,7 +241,7 @@ def get_all_personalisation_from_notification(notification): return notification['personalisation'] -@main.route("/services//download-notifications.csv") +@main.route("/services//download-notifications.csv") @user_has_permissions('view_activity') def download_notifications_csv(service_id): filter_args = parse_filter_args(request.args) diff --git a/app/main/views/organisations.py b/app/main/views/organisations.py index 587dbccf8..68ae4995d 100644 --- a/app/main/views/organisations.py +++ b/app/main/views/organisations.py @@ -122,7 +122,7 @@ def add_organisation_from_nhs_local_service(service_id): ) -@main.route("/organisations/", methods=['GET']) +@main.route("/organisations/", methods=['GET']) @user_has_permissions() def organisation_dashboard(org_id): return render_template( @@ -130,7 +130,7 @@ def organisation_dashboard(org_id): ) -@main.route("/organisations//trial-services", methods=['GET']) +@main.route("/organisations//trial-services", methods=['GET']) @user_is_platform_admin def organisation_trial_mode_services(org_id): return render_template( @@ -139,7 +139,7 @@ def organisation_trial_mode_services(org_id): ) -@main.route("/organisations//users", methods=['GET']) +@main.route("/organisations//users", methods=['GET']) @user_has_permissions() def manage_org_users(org_id): return render_template( @@ -150,7 +150,7 @@ def manage_org_users(org_id): ) -@main.route("/organisations//users/invite", methods=['GET', 'POST']) +@main.route("/organisations//users/invite", methods=['GET', 'POST']) @user_has_permissions() def invite_org_user(org_id): form = InviteOrgUserForm( @@ -173,7 +173,7 @@ def invite_org_user(org_id): ) -@main.route("/organisations//users/", methods=['GET', 'POST']) +@main.route("/organisations//users/", methods=['GET', 'POST']) @user_has_permissions() def edit_user_org_permissions(org_id, user_id): return render_template( @@ -182,7 +182,7 @@ def edit_user_org_permissions(org_id, user_id): ) -@main.route("/organisations//users//delete", methods=['GET', 'POST']) +@main.route("/organisations//users//delete", methods=['GET', 'POST']) @user_has_permissions() def remove_user_from_organisation(org_id, user_id): user = User.from_id(user_id) @@ -211,7 +211,7 @@ def remove_user_from_organisation(org_id, user_id): ) -@main.route("/organisations//cancel-invited-user/", methods=['GET']) +@main.route("/organisations//cancel-invited-user/", methods=['GET']) @user_has_permissions() def cancel_invited_org_user(org_id, invited_user_id): org_invite_api_client.cancel_invited_user(org_id=org_id, invited_user_id=invited_user_id) @@ -219,7 +219,7 @@ def cancel_invited_org_user(org_id, invited_user_id): return redirect(url_for('main.manage_org_users', org_id=org_id)) -@main.route("/organisations//settings/", methods=['GET']) +@main.route("/organisations//settings/", methods=['GET']) @user_is_platform_admin def organisation_settings(org_id): return render_template( @@ -227,7 +227,7 @@ def organisation_settings(org_id): ) -@main.route("/organisations//settings/edit-name", methods=['GET', 'POST']) +@main.route("/organisations//settings/edit-name", methods=['GET', 'POST']) @user_is_platform_admin def edit_organisation_name(org_id): form = RenameOrganisationForm() @@ -249,7 +249,7 @@ def edit_organisation_name(org_id): ) -@main.route("/organisations//settings/edit-type", methods=['GET', 'POST']) +@main.route("/organisations//settings/edit-type", methods=['GET', 'POST']) @user_is_platform_admin def edit_organisation_type(org_id): @@ -270,7 +270,7 @@ def edit_organisation_type(org_id): ) -@main.route("/organisations//settings/edit-crown-status", methods=['GET', 'POST']) +@main.route("/organisations//settings/edit-crown-status", methods=['GET', 'POST']) @user_is_platform_admin def edit_organisation_crown_status(org_id): @@ -299,7 +299,7 @@ def edit_organisation_crown_status(org_id): ) -@main.route("/organisations//settings/edit-agreement", methods=['GET', 'POST']) +@main.route("/organisations//settings/edit-agreement", methods=['GET', 'POST']) @user_is_platform_admin def edit_organisation_agreement(org_id): @@ -328,7 +328,7 @@ def edit_organisation_agreement(org_id): ) -@main.route("/organisations//settings/set-email-branding", methods=['GET', 'POST']) +@main.route("/organisations//settings/set-email-branding", methods=['GET', 'POST']) @user_is_platform_admin def edit_organisation_email_branding(org_id): @@ -353,7 +353,7 @@ def edit_organisation_email_branding(org_id): ) -@main.route("/organisations//settings/preview-email-branding", methods=['GET', 'POST']) +@main.route("/organisations//settings/preview-email-branding", methods=['GET', 'POST']) @user_is_platform_admin def organisation_preview_email_branding(org_id): @@ -375,7 +375,7 @@ def organisation_preview_email_branding(org_id): ) -@main.route("/organisations//settings/set-letter-branding", methods=['GET', 'POST']) +@main.route("/organisations//settings/set-letter-branding", methods=['GET', 'POST']) @user_is_platform_admin def edit_organisation_letter_branding(org_id): letter_branding = letter_branding_client.get_all_letter_branding() @@ -399,7 +399,7 @@ def edit_organisation_letter_branding(org_id): ) -@main.route("/organisations//settings/preview-letter-branding", methods=['GET', 'POST']) +@main.route("/organisations//settings/preview-letter-branding", methods=['GET', 'POST']) @user_is_platform_admin def organisation_preview_letter_branding(org_id): branding_style = request.args.get('branding_style') @@ -420,7 +420,7 @@ def organisation_preview_letter_branding(org_id): ) -@main.route("/organisations//settings/edit-organisation-domains", methods=['GET', 'POST']) +@main.route("/organisations//settings/edit-organisation-domains", methods=['GET', 'POST']) @user_is_platform_admin def edit_organisation_domains(org_id): @@ -444,7 +444,7 @@ def edit_organisation_domains(org_id): ) -@main.route("/organisations//settings/edit-name/confirm", methods=['GET', 'POST']) +@main.route("/organisations//settings/edit-name/confirm", methods=['GET', 'POST']) @user_has_permissions() def confirm_edit_organisation_name(org_id): # Validate password for form @@ -476,7 +476,7 @@ def confirm_edit_organisation_name(org_id): form=form) -@main.route("/organisations//settings/edit-go-live-notes", methods=['GET', 'POST']) +@main.route("/organisations//settings/edit-go-live-notes", methods=['GET', 'POST']) @user_is_platform_admin def edit_organisation_go_live_notes(org_id): diff --git a/app/main/views/platform_admin.py b/app/main/views/platform_admin.py index fcc8e5e91..f9dc48910 100644 --- a/app/main/views/platform_admin.py +++ b/app/main/views/platform_admin.py @@ -392,7 +392,7 @@ def platform_admin_letter_validation_preview(): return letter_validation_preview(from_platform_admin=True) -@main.route("/services//letter-validation-preview", methods=["GET", "POST"]) +@main.route("/services//letter-validation-preview", methods=["GET", "POST"]) @user_has_permissions() def service_letter_validation_preview(service_id): return letter_validation_preview(from_platform_admin=False) diff --git a/app/main/views/providers.py b/app/main/views/providers.py index fd1ea684f..003f054ff 100644 --- a/app/main/views/providers.py +++ b/app/main/views/providers.py @@ -38,7 +38,7 @@ def add_monthly_traffic(domestic_sms_providers): provider['monthly_traffic'] = round(percentage) -@main.route("/provider//edit", methods=['GET', 'POST']) +@main.route("/provider//edit", methods=['GET', 'POST']) @user_is_platform_admin def edit_provider(provider_id): provider = provider_client.get_provider_by_id(provider_id)['provider_details'] @@ -51,7 +51,7 @@ def edit_provider(provider_id): return render_template('views/providers/edit-provider.html', form=form, provider=provider) -@main.route("/provider/") +@main.route("/provider/") @user_is_platform_admin def view_provider(provider_id): versions = provider_client.get_provider_versions(provider_id) diff --git a/app/main/views/send.py b/app/main/views/send.py index a4caac031..ea55a50eb 100644 --- a/app/main/views/send.py +++ b/app/main/views/send.py @@ -100,7 +100,7 @@ def get_example_letter_address(key): }.get(key, '') -@main.route("/services//send//csv", methods=['GET', 'POST']) +@main.route("/services//send//csv", methods=['GET', 'POST']) @user_has_permissions('send_messages', restrict_admin_usage=True) def send_messages(service_id, template_id): # if there's lots of data in the session, lets log it for debugging purposes @@ -183,7 +183,7 @@ def send_messages(service_id, template_id): ) -@main.route("/services//send/.csv", methods=['GET']) +@main.route("/services//send/.csv", methods=['GET']) @user_has_permissions('send_messages', 'manage_templates') def get_example_csv(service_id, template_id): template = get_template( @@ -198,7 +198,7 @@ def get_example_csv(service_id, template_id): } -@main.route("/services//send//set-sender", methods=['GET', 'POST']) +@main.route("/services//send//set-sender", methods=['GET', 'POST']) @user_has_permissions('send_messages', restrict_admin_usage=True) def set_sender(service_id, template_id): session['sender_id'] = None @@ -285,8 +285,8 @@ def get_sender_details(service_id, template_type): return api_call(service_id) -@main.route("/services//send//test", endpoint='send_test') -@main.route("/services//send//one-off", endpoint='send_one_off') +@main.route("/services//send//test", endpoint='send_test') +@main.route("/services//send//one-off", endpoint='send_one_off') @user_has_permissions('send_messages', restrict_admin_usage=True) def send_test(service_id, template_id): session['recipient'] = None @@ -328,12 +328,12 @@ def get_notification_check_endpoint(service_id, template): @main.route( - "/services//send//test/step-", + "/services//send//test/step-", methods=['GET', 'POST'], endpoint='send_test_step', ) @main.route( - "/services//send//one-off/step-", + "/services//send//one-off/step-", methods=['GET', 'POST'], endpoint='send_one_off_step', ) @@ -465,7 +465,7 @@ def send_test_step(service_id, template_id, step_index): ) -@main.route("/services//send//test.", methods=['GET']) +@main.route("/services//send//test.", methods=['GET']) @user_has_permissions('send_messages') def send_test_preview(service_id, template_id, filetype): @@ -600,8 +600,8 @@ def _check_messages(service_id, template_id, upload_id, preview_row, letters_as_ ) -@main.route("/services///check/", methods=['GET']) -@main.route("/services///check//row-", methods=['GET']) +@main.route("/services///check/", methods=['GET']) +@main.route("/services///check//row-", methods=['GET']) @user_has_permissions('send_messages', restrict_admin_usage=True) def check_messages(service_id, template_id, upload_id, row_index=2): @@ -647,11 +647,11 @@ def check_messages(service_id, template_id, upload_id, row_index=2): @main.route( - "/services///check/.", + "/services///check/.", methods=['GET'], ) @main.route( - "/services///check//row-.", + "/services///check//row-.", methods=['GET'], ) @user_has_permissions('send_messages') @@ -670,7 +670,7 @@ def check_messages_preview(service_id, template_id, upload_id, filetype, row_ind @main.route( - "/services///check.", + "/services///check.", methods=['GET'], ) @user_has_permissions('send_messages') @@ -688,7 +688,7 @@ def check_notification_preview(service_id, template_id, filetype): return TemplatePreview.from_utils_template(template, filetype, page=page) -@main.route("/services//start-job/", methods=['POST']) +@main.route("/services//start-job/", methods=['POST']) @user_has_permissions('send_messages', restrict_admin_usage=True) def start_job(service_id, upload_id): @@ -711,7 +711,7 @@ def start_job(service_id, upload_id): ) -@main.route("/services//end-tour/") +@main.route("/services//end-tour/") @user_has_permissions('manage_templates') def go_to_dashboard_after_tour(service_id, example_template_id): @@ -840,7 +840,7 @@ def get_back_link(service_id, template, step_index): ) -@main.route("/services//template//notification/check", methods=['GET']) +@main.route("/services//template//notification/check", methods=['GET']) @user_has_permissions('send_messages', restrict_admin_usage=True) def check_notification(service_id, template_id): return render_template( @@ -917,7 +917,7 @@ def get_template_error_dict(exception): } -@main.route("/services//template//notification/check", methods=['POST']) +@main.route("/services//template//notification/check", methods=['POST']) @user_has_permissions('send_messages', restrict_admin_usage=True) def send_notification(service_id, template_id): if {'recipient', 'placeholders'} - set(session.keys()): diff --git a/app/main/views/service_settings.py b/app/main/views/service_settings.py index a1b165869..6304647b3 100644 --- a/app/main/views/service_settings.py +++ b/app/main/views/service_settings.py @@ -71,7 +71,7 @@ PLATFORM_ADMIN_SERVICE_PERMISSIONS = OrderedDict([ ]) -@main.route("/services//service-settings") +@main.route("/services//service-settings") @user_has_permissions('manage_service', 'manage_api_keys') def service_settings(service_id): return render_template( @@ -80,7 +80,7 @@ def service_settings(service_id): ) -@main.route("/services//service-settings/name", methods=['GET', 'POST']) +@main.route("/services//service-settings/name", methods=['GET', 'POST']) @user_has_permissions('manage_service') def service_name_change(service_id): form = RenameServiceForm() @@ -108,7 +108,7 @@ def service_name_change(service_id): ) -@main.route("/services//service-settings/name/confirm", methods=['GET', 'POST']) +@main.route("/services//service-settings/name/confirm", methods=['GET', 'POST']) @user_has_permissions('manage_service') def service_name_change_confirm(service_id): # Validate password for form @@ -140,7 +140,7 @@ def service_name_change_confirm(service_id): form=form) -@main.route("/services//service-settings/request-to-go-live/estimate-usage", methods=['GET', 'POST']) +@main.route("/services//service-settings/request-to-go-live/estimate-usage", methods=['GET', 'POST']) @user_has_permissions('manage_service') def estimate_usage(service_id): @@ -172,7 +172,7 @@ def estimate_usage(service_id): ) -@main.route("/services//service-settings/request-to-go-live", methods=['GET']) +@main.route("/services//service-settings/request-to-go-live", methods=['GET']) @user_has_permissions('manage_service') def request_to_go_live(service_id): return render_template( @@ -180,7 +180,7 @@ def request_to_go_live(service_id): ) -@main.route("/services//service-settings/request-to-go-live", methods=['POST']) +@main.route("/services//service-settings/request-to-go-live", methods=['POST']) @user_has_permissions('manage_service') @user_is_gov_user def submit_request_to_go_live(service_id): @@ -228,7 +228,7 @@ def submit_request_to_go_live(service_id): return redirect(url_for('.service_settings', service_id=service_id)) -@main.route("/services//service-settings/switch-live", methods=["GET", "POST"]) +@main.route("/services//service-settings/switch-live", methods=["GET", "POST"]) @user_is_platform_admin def service_switch_live(service_id): form = ServiceOnOffSettingForm( @@ -247,7 +247,7 @@ def service_switch_live(service_id): ) -@main.route("/services//service-settings/switch-count-as-live", methods=["GET", "POST"]) +@main.route("/services//service-settings/switch-count-as-live", methods=["GET", "POST"]) @user_is_platform_admin def service_switch_count_as_live(service_id): @@ -269,7 +269,7 @@ def service_switch_count_as_live(service_id): ) -@main.route("/services//service-settings/permissions/", methods=["GET", "POST"]) +@main.route("/services//service-settings/permissions/", methods=["GET", "POST"]) @user_is_platform_admin def service_set_permission(service_id, permission): if permission not in PLATFORM_ADMIN_SERVICE_PERMISSIONS: @@ -293,7 +293,7 @@ def service_set_permission(service_id, permission): ) -@main.route("/services//service-settings/can-upload-document", methods=['GET', 'POST']) +@main.route("/services//service-settings/can-upload-document", methods=['GET', 'POST']) @user_is_platform_admin def service_switch_can_upload_document(service_id): if current_service.contact_link: @@ -313,7 +313,7 @@ def service_switch_can_upload_document(service_id): return render_template('views/service-settings/contact_link.html', form=form) -@main.route("/services//service-settings/archive", methods=['GET', 'POST']) +@main.route("/services//service-settings/archive", methods=['GET', 'POST']) @user_has_permissions('manage_service') def archive_service(service_id): if not current_service.active and ( @@ -335,7 +335,7 @@ def archive_service(service_id): return service_settings(service_id) -@main.route("/services//service-settings/suspend", methods=["GET", "POST"]) +@main.route("/services//service-settings/suspend", methods=["GET", "POST"]) @user_has_permissions('manage_service') def suspend_service(service_id): if request.method == 'POST': @@ -347,7 +347,7 @@ def suspend_service(service_id): return service_settings(service_id) -@main.route("/services//service-settings/resume", methods=["GET", "POST"]) +@main.route("/services//service-settings/resume", methods=["GET", "POST"]) @user_has_permissions('manage_service') def resume_service(service_id): if request.method == 'POST': @@ -358,7 +358,7 @@ def resume_service(service_id): return service_settings(service_id) -@main.route("/services//service-settings/contact-link", methods=['GET', 'POST']) +@main.route("/services//service-settings/contact-link", methods=['GET', 'POST']) @user_has_permissions('manage_service') def service_set_contact_link(service_id): form = ServiceContactDetailsForm() @@ -382,19 +382,19 @@ def service_set_contact_link(service_id): return render_template('views/service-settings/contact_link.html', form=form) -@main.route("/services//service-settings/set-reply-to-email", methods=['GET']) +@main.route("/services//service-settings/set-reply-to-email", methods=['GET']) @user_has_permissions('manage_service') def service_set_reply_to_email(service_id): return redirect(url_for('.service_email_reply_to', service_id=service_id)) -@main.route("/services//service-settings/email-reply-to", methods=['GET']) +@main.route("/services//service-settings/email-reply-to", methods=['GET']) @user_has_permissions('manage_service', 'manage_api_keys') def service_email_reply_to(service_id): return render_template('views/service-settings/email_reply_to.html') -@main.route("/services//service-settings/email-reply-to/add", methods=['GET', 'POST']) +@main.route("/services//service-settings/email-reply-to/add", methods=['GET', 'POST']) @user_has_permissions('manage_service') def service_add_email_reply_to(service_id): form = ServiceReplyToEmailForm() @@ -425,7 +425,7 @@ def service_add_email_reply_to(service_id): first_email_address=first_email_address) -@main.route("/services//service-settings/email-reply-to//verify", methods=['GET', 'POST']) +@main.route("/services//service-settings/email-reply-to//verify", methods=['GET', 'POST']) @user_has_permissions('manage_service') def service_verify_reply_to_address(service_id, notification_id): replace = request.args.get('replace', False) @@ -441,7 +441,7 @@ def service_verify_reply_to_address(service_id, notification_id): ) -@main.route("/services//service-settings/email-reply-to//verify.json") +@main.route("/services//service-settings/email-reply-to//verify.json") @user_has_permissions('manage_service') def service_verify_reply_to_address_updates(service_id, notification_id): return jsonify(**get_service_verify_reply_to_address_partials(service_id, notification_id)) @@ -498,12 +498,12 @@ def get_service_verify_reply_to_address_partials(service_id, notification_id): @main.route( - "/services//service-settings/email-reply-to//edit", + "/services//service-settings/email-reply-to//edit", methods=['GET', 'POST'], endpoint="service_edit_email_reply_to" ) @main.route( - "/services//service-settings/email-reply-to//delete", + "/services//service-settings/email-reply-to//delete", methods=['GET'], endpoint="service_confirm_delete_email_reply_to" ) @@ -551,7 +551,10 @@ def service_edit_email_reply_to(service_id, reply_to_email_id): ) -@main.route("/services//service-settings/email-reply-to//delete", methods=['POST']) +@main.route( + "/services//service-settings/email-reply-to//delete", + methods=['POST'] +) @user_has_permissions('manage_service') def service_delete_email_reply_to(service_id, reply_to_email_id): service_api_client.delete_reply_to_email_address( @@ -561,7 +564,7 @@ def service_delete_email_reply_to(service_id, reply_to_email_id): return redirect(url_for('.service_email_reply_to', service_id=service_id)) -@main.route("/services//service-settings/set-inbound-number", methods=['GET', 'POST']) +@main.route("/services//service-settings/set-inbound-number", methods=['GET', 'POST']) @user_has_permissions('manage_service') def service_set_inbound_number(service_id): available_inbound_numbers = inbound_number_client.get_available_inbound_sms_numbers() @@ -590,7 +593,7 @@ def service_set_inbound_number(service_id): ) -@main.route("/services//service-settings/sms-prefix", methods=['GET', 'POST']) +@main.route("/services//service-settings/sms-prefix", methods=['GET', 'POST']) @user_has_permissions('manage_service') def service_set_sms_prefix(service_id): @@ -612,7 +615,7 @@ def service_set_sms_prefix(service_id): ) -@main.route("/services//service-settings/set-international-sms", methods=['GET', 'POST']) +@main.route("/services//service-settings/set-international-sms", methods=['GET', 'POST']) @user_has_permissions('manage_service') def service_set_international_sms(service_id): form = InternationalSMSForm( @@ -632,7 +635,7 @@ def service_set_international_sms(service_id): ) -@main.route("/services//service-settings/set-inbound-sms", methods=['GET']) +@main.route("/services//service-settings/set-inbound-sms", methods=['GET']) @user_has_permissions('manage_service') def service_set_inbound_sms(service_id): return render_template( @@ -640,7 +643,7 @@ def service_set_inbound_sms(service_id): ) -@main.route("/services//service-settings/set-letters", methods=['GET']) +@main.route("/services//service-settings/set-letters", methods=['GET']) @user_has_permissions('manage_service') def service_set_letters(service_id): return redirect( @@ -653,7 +656,7 @@ def service_set_letters(service_id): ) -@main.route("/services//service-settings/set-", methods=['GET', 'POST']) +@main.route("/services//service-settings/set-", methods=['GET', 'POST']) @user_has_permissions('manage_service') def service_set_channel(service_id, channel): @@ -680,7 +683,7 @@ def service_set_channel(service_id, channel): ) -@main.route("/services//service-settings/set-auth-type", methods=['GET']) +@main.route("/services//service-settings/set-auth-type", methods=['GET']) @user_has_permissions('manage_service') def service_set_auth_type(service_id): return render_template( @@ -688,7 +691,7 @@ def service_set_auth_type(service_id): ) -@main.route("/services//service-settings/letter-contacts", methods=['GET']) +@main.route("/services//service-settings/letter-contacts", methods=['GET']) @user_has_permissions('manage_service', 'manage_api_keys') def service_letter_contact_details(service_id): letter_contact_details = service_api_client.get_letter_contacts(service_id) @@ -697,7 +700,7 @@ def service_letter_contact_details(service_id): letter_contact_details=letter_contact_details) -@main.route("/services//service-settings/letter-contact/add", methods=['GET', 'POST']) +@main.route("/services//service-settings/letter-contact/add", methods=['GET', 'POST']) @user_has_permissions('manage_service') def service_add_letter_contact(service_id): form = ServiceLetterContactBlockForm() @@ -732,12 +735,12 @@ def service_add_letter_contact(service_id): @main.route( - "/services//service-settings/letter-contact//edit", + "/services//service-settings/letter-contact//edit", methods=['GET', 'POST'], endpoint="service_edit_letter_contact", ) @main.route( - "/services//service-settings/letter-contact//delete", + "/services//service-settings/letter-contact//delete", methods=['GET'], endpoint="service_confirm_delete_letter_contact", ) @@ -765,7 +768,7 @@ def service_edit_letter_contact(service_id, letter_contact_id): letter_contact_id=letter_contact_block['id']) -@main.route("/services//service-settings/letter-contact/make-blank-default") +@main.route("/services//service-settings/letter-contact/make-blank-default") @user_has_permissions('manage_service') def service_make_blank_default_letter_contact(service_id): current_service.remove_default_letter_contact_block() @@ -773,7 +776,7 @@ def service_make_blank_default_letter_contact(service_id): @main.route( - "/services//service-settings/letter-contact//delete", + "/services//service-settings/letter-contact//delete", methods=['POST'], ) @user_has_permissions('manage_service') @@ -785,7 +788,7 @@ def service_delete_letter_contact(service_id, letter_contact_id): return redirect(url_for('.service_letter_contact_details', service_id=current_service.id)) -@main.route("/services//service-settings/sms-sender", methods=['GET']) +@main.route("/services//service-settings/sms-sender", methods=['GET']) @user_has_permissions('manage_service', 'manage_api_keys') def service_sms_senders(service_id): return render_template( @@ -793,7 +796,7 @@ def service_sms_senders(service_id): ) -@main.route("/services//service-settings/sms-sender/add", methods=['GET', 'POST']) +@main.route("/services//service-settings/sms-sender/add", methods=['GET', 'POST']) @user_has_permissions('manage_service') def service_add_sms_sender(service_id): form = ServiceSmsSenderForm() @@ -812,12 +815,12 @@ def service_add_sms_sender(service_id): @main.route( - "/services//service-settings/sms-sender//edit", + "/services//service-settings/sms-sender//edit", methods=['GET', 'POST'], endpoint="service_edit_sms_sender" ) @main.route( - "/services//service-settings/sms-sender//delete", + "/services//service-settings/sms-sender//delete", methods=['GET'], endpoint="service_confirm_delete_sms_sender" ) @@ -852,7 +855,7 @@ def service_edit_sms_sender(service_id, sms_sender_id): @main.route( - "/services//service-settings/sms-sender//delete", + "/services//service-settings/sms-sender//delete", methods=['POST'], ) @user_has_permissions('manage_service') @@ -864,7 +867,7 @@ def service_delete_sms_sender(service_id, sms_sender_id): return redirect(url_for('.service_sms_senders', service_id=service_id)) -@main.route("/services//service-settings/set-letter-contact-block", methods=['GET', 'POST']) +@main.route("/services//service-settings/set-letter-contact-block", methods=['GET', 'POST']) @user_has_permissions('manage_service') def service_set_letter_contact_block(service_id): @@ -887,7 +890,7 @@ def service_set_letter_contact_block(service_id): ) -@main.route("/services//service-settings/set-free-sms-allowance", methods=['GET', 'POST']) +@main.route("/services//service-settings/set-free-sms-allowance", methods=['GET', 'POST']) @user_is_platform_admin def set_free_sms_allowance(service_id): @@ -904,7 +907,7 @@ def set_free_sms_allowance(service_id): ) -@main.route("/services//service-settings/set-email-branding", methods=['GET', 'POST']) +@main.route("/services//service-settings/set-email-branding", methods=['GET', 'POST']) @user_is_platform_admin def service_set_email_branding(service_id): email_branding = email_branding_client.get_all_email_branding() @@ -928,7 +931,7 @@ def service_set_email_branding(service_id): ) -@main.route("/services//service-settings/preview-email-branding", methods=['GET', 'POST']) +@main.route("/services//service-settings/preview-email-branding", methods=['GET', 'POST']) @user_is_platform_admin def service_preview_email_branding(service_id): branding_style = request.args.get('branding_style', None) @@ -949,7 +952,7 @@ def service_preview_email_branding(service_id): ) -@main.route("/services//service-settings/set-letter-branding", methods=['GET', 'POST']) +@main.route("/services//service-settings/set-letter-branding", methods=['GET', 'POST']) @user_is_platform_admin def service_set_letter_branding(service_id): letter_branding = letter_branding_client.get_all_letter_branding() @@ -973,7 +976,7 @@ def service_set_letter_branding(service_id): ) -@main.route("/services//service-settings/preview-letter-branding", methods=['GET', 'POST']) +@main.route("/services//service-settings/preview-letter-branding", methods=['GET', 'POST']) @user_is_platform_admin def service_preview_letter_branding(service_id): branding_style = request.args.get('branding_style') @@ -994,7 +997,7 @@ def service_preview_letter_branding(service_id): ) -@main.route("/services//service-settings/request-letter-branding", methods=['GET', 'POST']) +@main.route("/services//service-settings/request-letter-branding", methods=['GET', 'POST']) @user_has_permissions('manage_service', 'manage_templates') def request_letter_branding(service_id): return render_template( @@ -1003,7 +1006,7 @@ def request_letter_branding(service_id): ) -@main.route("/services//service-settings/link-service-to-organisation", methods=['GET', 'POST']) +@main.route("/services//service-settings/link-service-to-organisation", methods=['GET', 'POST']) @user_is_platform_admin def link_service_to_organisation(service_id): @@ -1031,7 +1034,7 @@ def link_service_to_organisation(service_id): ) -@main.route("/services//branding-request/email", methods=['GET', 'POST']) +@main.route("/services//branding-request/email", methods=['GET', 'POST']) @user_has_permissions('manage_service') def branding_request(service_id): @@ -1077,7 +1080,7 @@ def branding_request(service_id): ) -@main.route("/services//data-retention", methods=['GET']) +@main.route("/services//data-retention", methods=['GET']) @user_is_platform_admin def data_retention(service_id): return render_template( @@ -1085,7 +1088,7 @@ def data_retention(service_id): ) -@main.route("/services//data-retention/add", methods=['GET', 'POST']) +@main.route("/services//data-retention/add", methods=['GET', 'POST']) @user_is_platform_admin def add_data_retention(service_id): form = ServiceDataRetentionForm() @@ -1100,7 +1103,7 @@ def add_data_retention(service_id): ) -@main.route("/services//data-retention//edit", methods=['GET', 'POST']) +@main.route("/services//data-retention//edit", methods=['GET', 'POST']) @user_is_platform_admin def edit_data_retention(service_id, data_retention_id): data_retention_item = current_service.get_data_retention_item(data_retention_id) diff --git a/app/main/views/templates.py b/app/main/views/templates.py index 3728e0330..49ca6cfd2 100644 --- a/app/main/views/templates.py +++ b/app/main/views/templates.py @@ -47,7 +47,7 @@ form_objects = { } -@main.route("/services//templates/") +@main.route("/services//templates/") @user_has_permissions() def view_template(service_id, template_id): template = current_service.get_template(template_id) @@ -84,7 +84,7 @@ def view_template(service_id, template_id): ) -@main.route("/services//start-tour/") +@main.route("/services//start-tour/") @user_has_permissions('view_activity') def start_tour(service_id, template_id): @@ -104,10 +104,10 @@ def start_tour(service_id, template_id): ) -@main.route("/services//templates", methods=['GET', 'POST']) -@main.route("/services//templates/folders/", methods=['GET', 'POST']) -@main.route("/services//templates/", methods=['GET', 'POST']) -@main.route("/services//templates//folders/", methods=['GET', 'POST']) +@main.route("/services//templates", methods=['GET', 'POST']) +@main.route("/services//templates/folders/", methods=['GET', 'POST']) +@main.route("/services//templates/", methods=['GET', 'POST']) +@main.route("/services//templates//folders/", methods=['GET', 'POST']) @user_has_permissions() def choose_template(service_id, template_type='all', template_folder_id=None): template_folder = current_service.get_template_folder(template_folder_id) @@ -215,7 +215,7 @@ def get_template_nav_items(template_folder_id): ] -@main.route("/services//templates/.") +@main.route("/services//templates/.") @user_has_permissions() def view_letter_template_preview(service_id, template_id, filetype): if filetype not in ('pdf', 'png'): @@ -267,7 +267,7 @@ def _view_template_version(service_id, template_id, version, letters_as_pdf=Fals )) -@main.route("/services//templates//version/") +@main.route("/services//templates//version/") @user_has_permissions() def view_template_version(service_id, template_id, version): return render_template( @@ -276,7 +276,7 @@ def view_template_version(service_id, template_id, version): ) -@main.route("/services//templates//version/.") +@main.route("/services//templates//version/.") @user_has_permissions() def view_template_version_preview(service_id, template_id, version, filetype): db_template = current_service.get_template(template_id, version=version) @@ -313,7 +313,6 @@ def _add_template_by_type(template_type, template_folder_id): service_id=current_service.id, notification_type=template_type, return_to='add_new_template', - template_id='0' )) else: return redirect(url_for( @@ -324,10 +323,10 @@ def _add_template_by_type(template_type, template_folder_id): )) -@main.route("/services//templates/copy") -@main.route("/services//templates/copy/from-folder/") -@main.route("/services//templates/copy/from-service/") -@main.route("/services//templates/copy/from-service//from-folder/") +@main.route("/services//templates/copy") +@main.route("/services//templates/copy/from-folder/") +@main.route("/services//templates/copy/from-service/") +@main.route("/services//templates/copy/from-service//from-folder/") @user_has_permissions('manage_templates') def choose_template_to_copy( service_id, @@ -362,7 +361,7 @@ def choose_template_to_copy( ) -@main.route("/services//templates/copy/", methods=['GET', 'POST']) +@main.route("/services//templates/copy/", methods=['GET', 'POST']) @user_has_permissions('manage_templates') def copy_template(service_id, template_id): from_service = request.args.get('from_service') @@ -405,9 +404,16 @@ def _get_template_copy_name(template, existing_templates): return '{} (copy)'.format(template['name']) -@main.route("/services//templates/action-blocked///") +@main.route(( + '/services//templates/action-blocked/' + '' +)) +@main.route(( + '/services//templates/action-blocked/' + '//' +)) @user_has_permissions('manage_templates') -def action_blocked(service_id, notification_type, return_to, template_id): +def action_blocked(service_id, notification_type, return_to='add_new_template', template_id=None): if notification_type == 'sms': notification_type = 'text messages' elif notification_type == 'email': @@ -418,11 +424,11 @@ def action_blocked(service_id, notification_type, return_to, template_id): service_id=service_id, notification_type=notification_type, return_to=return_to, - template_id=template_id + template_id=template_id, ) -@main.route("/services//templates/folders//manage", methods=['GET', 'POST']) +@main.route("/services//templates/folders//manage", methods=['GET', 'POST']) @user_has_permissions('manage_templates') def manage_template_folder(service_id, template_folder_id): template_folder = current_service.get_template_folder_with_user_permission_or_403(template_folder_id, current_user) @@ -456,7 +462,7 @@ def manage_template_folder(service_id, template_folder_id): ) -@main.route("/services//templates/folders//delete", methods=['GET', 'POST']) +@main.route("/services//templates/folders//delete", methods=['GET', 'POST']) @user_has_permissions('manage_templates') def delete_template_folder(service_id, template_folder_id): template_folder = current_service.get_template_folder_with_user_permission_or_403(template_folder_id, current_user) @@ -498,9 +504,14 @@ def delete_template_folder(service_id, template_folder_id): return manage_template_folder(service_id, template_folder_id) -@main.route("/services//templates/add-", methods=['GET', 'POST']) -@main.route("/services//templates/folders//add-", - methods=['GET', 'POST']) +@main.route( + "/services//templates/add-", + methods=['GET', 'POST'], +) +@main.route( + "/services//templates/folders//add-", + methods=['GET', 'POST'], +) @user_has_permissions('manage_templates') def add_service_template(service_id, template_type, template_folder_id=None): @@ -544,7 +555,6 @@ def add_service_template(service_id, template_type, template_folder_id=None): notification_type=template_type, template_folder_id=template_folder_id, return_to='templates', - template_id='0' )) else: return render_template( @@ -561,7 +571,7 @@ def abort_403_if_not_admin_user(): abort(403) -@main.route("/services//templates//edit", methods=['GET', 'POST']) +@main.route("/services//templates//edit", methods=['GET', 'POST']) @user_has_permissions('manage_templates') def edit_service_template(service_id, template_id): template = current_service.get_template_with_user_permission_or_403(template_id, current_user) @@ -643,7 +653,7 @@ def edit_service_template(service_id, template_id): ) -@main.route("/services//templates//delete", methods=['GET', 'POST']) +@main.route("/services//templates//delete", methods=['GET', 'POST']) @user_has_permissions('manage_templates') def delete_service_template(service_id, template_id): template = current_service.get_template_with_user_permission_or_403(template_id, current_user) @@ -691,7 +701,7 @@ def delete_service_template(service_id, template_id): ) -@main.route("/services//templates//redact", methods=['GET']) +@main.route("/services//templates//redact", methods=['GET']) @user_has_permissions('manage_templates') def confirm_redact_template(service_id, template_id): template = current_service.get_template_with_user_permission_or_403(template_id, current_user) @@ -714,7 +724,7 @@ def confirm_redact_template(service_id, template_id): ) -@main.route("/services//templates//redact", methods=['POST']) +@main.route("/services//templates//redact", methods=['POST']) @user_has_permissions('manage_templates') def redact_template(service_id, template_id): @@ -732,7 +742,7 @@ def redact_template(service_id, template_id): )) -@main.route('/services//templates//versions') +@main.route('/services//templates//versions') @user_has_permissions('view_activity') def view_template_versions(service_id, template_id): return render_template( @@ -754,7 +764,7 @@ def view_template_versions(service_id, template_id): ) -@main.route('/services//templates//set-template-sender', methods=['GET', 'POST']) +@main.route('/services//templates//set-template-sender', methods=['GET', 'POST']) @user_has_permissions('manage_templates') def set_template_sender(service_id, template_id): template = current_service.get_template_with_user_permission_or_403(template_id, current_user) @@ -784,7 +794,7 @@ def set_template_sender(service_id, template_id): ) -@main.route('/services//templates//edit-postage', methods=['GET', 'POST']) +@main.route('/services//templates//edit-postage', methods=['GET', 'POST']) @user_has_permissions('manage_templates') def edit_template_postage(service_id, template_id): template = current_service.get_template_with_user_permission_or_403(template_id, current_user) diff --git a/app/main/views/uploads.py b/app/main/views/uploads.py index c97919062..7ba7d684e 100644 --- a/app/main/views/uploads.py +++ b/app/main/views/uploads.py @@ -36,13 +36,13 @@ from app.utils import ( MAX_FILE_UPLOAD_SIZE = 2 * 1024 * 1024 # 2MB -@main.route("/services//uploads") +@main.route("/services//uploads") @user_has_permissions() def uploads(service_id): return view_jobs(service_id) -@main.route("/services//upload-letter", methods=['GET', 'POST']) +@main.route("/services//upload-letter", methods=['GET', 'POST']) @user_has_permissions('send_messages') def upload_letter(service_id): form = PDFUploadForm() @@ -138,7 +138,7 @@ def _get_error_from_upload_form(form_errors): return error -@main.route("/services//preview-letter/") +@main.route("/services//preview-letter/") @user_has_permissions('send_messages') def uploaded_letter_preview(service_id, file_id): metadata = get_letter_metadata(service_id, file_id) @@ -183,7 +183,7 @@ def uploaded_letter_preview(service_id, file_id): ) -@main.route("/services//preview-letter-image/") +@main.route("/services//preview-letter-image/") @user_has_permissions('send_messages') def view_letter_upload_as_preview(service_id, file_id): pdf_file, metadata = get_letter_pdf_and_metadata(service_id, file_id) @@ -196,7 +196,7 @@ def view_letter_upload_as_preview(service_id, file_id): return TemplatePreview.from_valid_pdf_file(pdf_file, page) -@main.route("/services//upload-letter/send", methods=['POST']) +@main.route("/services//upload-letter/send", methods=['POST']) @user_has_permissions('send_messages', restrict_admin_usage=True) def send_uploaded_letter(service_id): if not (current_service.has_permission('letter') and current_service.has_permission('upload_letters')): diff --git a/tests/app/main/test_permissions.py b/tests/app/main/test_permissions.py index a84d38d1d..a98617722 100644 --- a/tests/app/main/test_permissions.py +++ b/tests/app/main/test_permissions.py @@ -1,8 +1,9 @@ import ast import inspect +import re import pytest -from flask import request +from flask import current_app, request from werkzeug.exceptions import Forbidden, Unauthorized from app.main.views.index import index @@ -481,3 +482,12 @@ def test_routes_have_permissions_decorators(): 'Use @user_is_platform_admin only\n' 'app/main/views/{}.py::{}\n' ).format(file, function) + + +def test_routes_require_uuids(client_request): + for rule in current_app.url_map.iter_rules(): + for param in re.findall('<([^>]*)>', rule.rule): + if '_id' in param and not param.startswith('uuid:'): + pytest.fail(( + 'Should be in {}' + ).format(param, rule.rule)) diff --git a/tests/app/main/views/test_find_users.py b/tests/app/main/views/test_find_users.py index 99e331465..ffa2d2415 100644 --- a/tests/app/main/views/test_find_users.py +++ b/tests/app/main/views/test_find_users.py @@ -1,3 +1,5 @@ +import uuid + import pytest from bs4 import BeautifulSoup from flask import url_for @@ -91,23 +93,26 @@ def test_find_users_by_email_validates_against_empty_search_submission( def test_user_information_page_shows_information_about_user( client, platform_admin_user, - mocker + mocker, + fake_uuid, ): + user_service_one = uuid.uuid4() + user_service_two = uuid.uuid4() mocker.patch('app.user_api_client.get_user', side_effect=[ platform_admin_user, - user_json(name="Apple Bloom", services=[1, 2]) + user_json(name="Apple Bloom", services=[user_service_one, user_service_two]) ], autospec=True) mocker.patch( 'app.user_api_client.get_organisations_and_services_for_user', return_value={'organisations': [], 'services': [ - {"id": 1, "name": "Fresh Orchard Juice", "restricted": True}, - {"id": 2, "name": "Nature Therapy", "restricted": False}, + {"id": user_service_one, "name": "Fresh Orchard Juice", "restricted": True}, + {"id": user_service_two, "name": "Nature Therapy", "restricted": False}, ]}, autospec=True ) client.login(platform_admin_user) - response = client.get(url_for('main.user_information', user_id=345)) + response = client.get(url_for('main.user_information', user_id=fake_uuid)) assert response.status_code == 200 document = html.fromstring(response.get_data(as_text=True)) @@ -129,7 +134,8 @@ def test_user_information_page_shows_information_about_user( def test_user_information_page_displays_if_there_are_failed_login_attempts( client, platform_admin_user, - mocker + mocker, + fake_uuid, ): mocker.patch('app.user_api_client.get_user', side_effect=[ platform_admin_user, @@ -138,14 +144,11 @@ def test_user_information_page_displays_if_there_are_failed_login_attempts( mocker.patch( 'app.user_api_client.get_organisations_and_services_for_user', - return_value={'organisations': [], 'services': [ - {"id": 1, "name": "Fresh Orchard Juice", "restricted": True}, - {"id": 2, "name": "Nature Therapy", "restricted": True}, - ]}, + return_value={'organisations': [], 'services': []}, autospec=True ) client.login(platform_admin_user) - response = client.get(url_for('main.user_information', user_id=345)) + response = client.get(url_for('main.user_information', user_id=fake_uuid)) assert response.status_code == 200 document = html.fromstring(response.get_data(as_text=True)) diff --git a/tests/app/main/views/test_jobs.py b/tests/app/main/views/test_jobs.py index 695e27ae2..6199c0a89 100644 --- a/tests/app/main/views/test_jobs.py +++ b/tests/app/main/views/test_jobs.py @@ -493,7 +493,7 @@ def test_should_cancel_letter_job( mocker, active_user_with_permissions ): - job_id = uuid.uuid4() + job_id = str(uuid.uuid4()) job = job_json( SERVICE_ONE_ID, active_user_with_permissions, diff --git a/tests/app/main/views/test_letter_branding.py b/tests/app/main/views/test_letter_branding.py index 98313eec3..6e70b3057 100644 --- a/tests/app/main/views/test_letter_branding.py +++ b/tests/app/main/views/test_letter_branding.py @@ -51,9 +51,10 @@ def test_letter_branding_page_shows_full_branding_list( def test_update_letter_branding_shows_the_current_letter_brand( platform_admin_client, mock_get_letter_branding_by_id, + fake_uuid, ): response = platform_admin_client.get( - url_for('.update_letter_branding', branding_id='abc') + url_for('.update_letter_branding', branding_id=fake_uuid) ) assert response.status_code == 200 @@ -81,7 +82,7 @@ def test_update_letter_branding_with_new_valid_file( mock_delete_temp_files = mocker.patch('app.main.views.letter_branding.delete_letter_temp_file') response = platform_admin_client.post( - url_for('.update_letter_branding', branding_id='abc'), + url_for('.update_letter_branding', branding_id=fake_uuid), data={'file': (BytesIO(''.encode('utf-8')), filename)}, follow_redirects=True ) @@ -97,10 +98,11 @@ def test_update_letter_branding_with_new_valid_file( def test_update_letter_branding_when_uploading_invalid_file( platform_admin_client, - mock_get_letter_branding_by_id + mock_get_letter_branding_by_id, + fake_uuid, ): response = platform_admin_client.post( - url_for('.update_letter_branding', branding_id='abc'), + url_for('.update_letter_branding', branding_id=fake_uuid), data={'file': (BytesIO(''.encode('utf-8')), 'test.png')}, follow_redirects=True ) @@ -127,7 +129,7 @@ def test_update_letter_branding_deletes_any_temp_files_when_uploading_a_file( mock_delete_temp_files = mocker.patch('app.main.views.letter_branding.delete_letter_temp_file') response = platform_admin_client.post( - url_for('.update_letter_branding', branding_id='abc', logo=temp_logo), + url_for('.update_letter_branding', branding_id=fake_uuid, logo=temp_logo), data={'file': (BytesIO(''.encode('utf-8')), 'new_uploaded_file.svg')}, follow_redirects=True ) @@ -223,7 +225,7 @@ def test_update_letter_branding_shows_database_errors_on_name_field( )) response = platform_admin_client.post( - url_for('.update_letter_branding', branding_id='abc'), + url_for('.update_letter_branding', branding_id=fake_uuid), data={ 'name': 'my brand', 'operation': 'branding-details' diff --git a/tests/app/main/views/test_providers.py b/tests/app/main/views/test_providers.py index ded40c2b2..9bf47f2ac 100644 --- a/tests/app/main/views/test_providers.py +++ b/tests/app/main/views/test_providers.py @@ -260,11 +260,12 @@ def test_should_show_edit_provider_form( client, platform_admin_user, mocker, + fake_uuid, ): mocker.patch('app.provider_client.get_provider_by_id', return_value=copy.deepcopy(stub_provider)) client.login(platform_admin_user, mocker) - response = client.get(url_for('main.edit_provider', provider_id='12345')) + response = client.get(url_for('main.edit_provider', provider_id=fake_uuid)) page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') diff --git a/tests/app/main/views/test_send.py b/tests/app/main/views/test_send.py index 6e24aff06..913299f14 100644 --- a/tests/app/main/views/test_send.py +++ b/tests/app/main/views/test_send.py @@ -34,7 +34,6 @@ from tests.conftest import ( SERVICE_ONE_ID, active_caseworking_user, active_user_with_permissions, - fake_uuid, mock_get_international_service, mock_get_live_service, mock_get_service, @@ -358,6 +357,7 @@ def test_shows_error_if_parsing_exception( mock_get_service_template, exception, expected_error_message, + fake_uuid, ): def _raise_exception_or_partial_exception(file_content, filename): diff --git a/tests/app/main/views/test_service_settings.py b/tests/app/main/views/test_service_settings.py index 61074fb13..fec7e2c82 100644 --- a/tests/app/main/views/test_service_settings.py +++ b/tests/app/main/views/test_service_settings.py @@ -2786,7 +2786,7 @@ def test_inbound_sms_sender_is_not_deleteable( page = client_request.get( '.service_edit_sms_sender', service_id=SERVICE_ONE_ID, - sms_sender_id='1234', + sms_sender_id=fake_uuid, ) back_link = page.select_one('.govuk-back-link') @@ -2810,19 +2810,19 @@ def test_delete_sms_sender( client_request.post( '.service_delete_sms_sender', service_id=SERVICE_ONE_ID, - sms_sender_id='1234', + sms_sender_id=fake_uuid, _expected_redirect=url_for( 'main.service_sms_senders', service_id=SERVICE_ONE_ID, _external=True, ) ) - mock_delete.assert_called_once_with(service_id=SERVICE_ONE_ID, sms_sender_id='1234') + mock_delete.assert_called_once_with(service_id=SERVICE_ONE_ID, sms_sender_id=fake_uuid) -@pytest.mark.parametrize('fixture, hide_textbox, fixture_sender_id', [ - (get_inbound_number_sms_sender, True, '1234'), - (get_default_sms_sender, False, '1234'), +@pytest.mark.parametrize('fixture, hide_textbox', [ + (get_inbound_number_sms_sender, True), + (get_default_sms_sender, False), ]) def test_inbound_sms_sender_is_not_editable( client_request, @@ -2830,7 +2830,6 @@ def test_inbound_sms_sender_is_not_editable( fake_uuid, fixture, hide_textbox, - fixture_sender_id, mocker ): fixture(mocker) @@ -2838,7 +2837,7 @@ def test_inbound_sms_sender_is_not_editable( page = client_request.get( '.service_edit_sms_sender', service_id=SERVICE_ONE_ID, - sms_sender_id=fixture_sender_id, + sms_sender_id=fake_uuid, ) assert bool(page.find('input', attrs={'name': "sms_sender"})) != hide_textbox diff --git a/tests/app/main/views/test_templates.py b/tests/app/main/views/test_templates.py index 12adf9287..90f4cdfd0 100644 --- a/tests/app/main/views/test_templates.py +++ b/tests/app/main/views/test_templates.py @@ -1260,6 +1260,7 @@ def test_should_not_allow_creation_of_template_through_form_without_correct_perm endpoint, data, expected_error, + fake_uuid, ): service_one['permissions'] = [] page = client_request.post( @@ -1273,7 +1274,6 @@ def test_should_not_allow_creation_of_template_through_form_without_correct_perm assert page.select(".govuk-back-link")[0]['href'] == url_for( '.choose_template', service_id=SERVICE_ONE_ID, - template_id='0', ) @@ -1299,7 +1299,6 @@ def test_should_not_allow_creation_of_a_template_without_correct_permission( assert page.select(".govuk-back-link")[0]['href'] == url_for( '.choose_template', service_id=service_one['id'], - template_id='0', ) diff --git a/tests/app/main/views/test_uploads.py b/tests/app/main/views/test_uploads.py index 6882c0f43..eb7e17657 100644 --- a/tests/app/main/views/test_uploads.py +++ b/tests/app/main/views/test_uploads.py @@ -50,8 +50,14 @@ def test_get_upload_letter(client_request): assert normalize_spaces(page.find('label', class_='file-upload-button').text) == 'Choose file' -def test_post_upload_letter_redirects_for_valid_file(mocker, active_user_with_permissions, service_one, client_request): - mocker.patch('uuid.uuid4', return_value='fake-uuid') +def test_post_upload_letter_redirects_for_valid_file( + mocker, + active_user_with_permissions, + service_one, + client_request, + fake_uuid, +): + mocker.patch('uuid.uuid4', return_value=fake_uuid) antivirus_mock = mocker.patch('app.main.views.uploads.antivirus_client.scan', return_value=True) mocker.patch( 'app.main.views.uploads.sanitise_letter', @@ -76,7 +82,7 @@ def test_post_upload_letter_redirects_for_valid_file(mocker, active_user_with_pe mock_s3.assert_called_once_with( b'The sanitised content', - file_location='service-{}/fake-uuid.pdf'.format(SERVICE_ONE_ID), + file_location='service-{}/{}.pdf'.format(SERVICE_ONE_ID, fake_uuid), status='valid', page_count=1, filename='tests/test_pdf_files/one_page_pdf.pdf' @@ -85,7 +91,7 @@ def test_post_upload_letter_redirects_for_valid_file(mocker, active_user_with_pe assert page.find('h1').text == 'tests/test_pdf_files/one_page_pdf.pdf' assert not page.find(id='validation-error-message') - assert page.find('input', {'type': 'hidden', 'name': 'file_id', 'value': 'fake-uuid'}) + assert page.find('input', {'type': 'hidden', 'name': 'file_id', 'value': fake_uuid}) assert page.find('button', {'type': 'submit'}).text == 'Send 1 letter' @@ -94,6 +100,7 @@ def test_post_upload_letter_shows_letter_preview_for_valid_file( active_user_with_permissions, service_one, client_request, + fake_uuid, ): letter_template = {'template_type': 'letter', 'reply_to_text': '', @@ -101,7 +108,7 @@ def test_post_upload_letter_shows_letter_preview_for_valid_file( 'subject': 'hi', 'content': 'my letter'} - mocker.patch('uuid.uuid4', return_value='fake-uuid') + mocker.patch('uuid.uuid4', return_value=fake_uuid) mocker.patch('app.main.views.uploads.antivirus_client.scan', return_value=True) mocker.patch( 'app.main.views.uploads.sanitise_letter', @@ -137,7 +144,7 @@ def test_post_upload_letter_shows_letter_preview_for_valid_file( assert img['src'] == url_for( '.view_letter_upload_as_preview', service_id=SERVICE_ONE_ID, - file_id='fake-uuid', + file_id=fake_uuid, page=page_no) @@ -211,8 +218,8 @@ def test_post_choose_upload_file_when_file_is_malformed(mocker, client_request): assert normalize_spaces(page.find('label', class_='file-upload-button').text) == 'Upload your file again' -def test_post_upload_letter_with_invalid_file(mocker, client_request): - mocker.patch('uuid.uuid4', return_value='fake-uuid') +def test_post_upload_letter_with_invalid_file(mocker, client_request, fake_uuid): + mocker.patch('uuid.uuid4', return_value=fake_uuid) mocker.patch('app.main.views.uploads.antivirus_client.scan', return_value=True) mock_s3 = mocker.patch('app.main.views.uploads.upload_letter_to_s3') @@ -241,7 +248,7 @@ def test_post_upload_letter_with_invalid_file(mocker, client_request): mock_s3.assert_called_once_with( file_contents, - file_location='service-{}/fake-uuid.pdf'.format(SERVICE_ONE_ID), + file_location='service-{}/{}.pdf'.format(SERVICE_ONE_ID, fake_uuid), status='invalid', page_count=1, filename='tests/test_pdf_files/one_page_pdf.pdf', @@ -253,14 +260,14 @@ def test_post_upload_letter_with_invalid_file(mocker, client_request): assert not page.find('button', {'type': 'submit'}) -def test_post_upload_letter_shows_letter_preview_for_invalid_file(mocker, client_request): +def test_post_upload_letter_shows_letter_preview_for_invalid_file(mocker, client_request, fake_uuid): letter_template = {'template_type': 'letter', 'reply_to_text': '', 'postage': 'first', 'subject': 'hi', 'content': 'my letter'} - mocker.patch('uuid.uuid4', return_value='fake-uuid') + mocker.patch('uuid.uuid4', return_value=fake_uuid) mocker.patch('app.main.views.uploads.antivirus_client.scan', return_value=True) mocker.patch('app.main.views.uploads.upload_letter_to_s3') mock_sanitise_response = Mock() @@ -287,13 +294,17 @@ def test_post_upload_letter_shows_letter_preview_for_invalid_file(mocker, client assert letter_images[0]['src'] == url_for( '.view_letter_upload_as_preview', service_id=SERVICE_ONE_ID, - file_id='fake-uuid', + file_id=fake_uuid, page=1 ) -def test_post_upload_letter_does_not_upload_to_s3_if_template_preview_raises_unknown_error(mocker, client_request): - mocker.patch('uuid.uuid4', return_value='fake-uuid') +def test_post_upload_letter_does_not_upload_to_s3_if_template_preview_raises_unknown_error( + mocker, + client_request, + fake_uuid, +): + mocker.patch('uuid.uuid4', return_value=fake_uuid) mocker.patch('app.main.views.uploads.antivirus_client.scan', return_value=True) mock_s3 = mocker.patch('app.main.views.uploads.upload_letter_to_s3') @@ -311,7 +322,13 @@ def test_post_upload_letter_does_not_upload_to_s3_if_template_preview_raises_unk assert not mock_s3.called -def test_uploaded_letter_preview(mocker, active_user_with_permissions, service_one, client_request): +def test_uploaded_letter_preview( + mocker, + active_user_with_permissions, + service_one, + client_request, + fake_uuid, +): mocker.patch('app.main.views.uploads.service_api_client') mocker.patch('app.main.views.uploads.get_letter_metadata', return_value={ 'filename': 'my_letter.pdf', 'page_count': '1', 'status': 'valid'}) @@ -322,7 +339,7 @@ def test_uploaded_letter_preview(mocker, active_user_with_permissions, service_o page = client_request.get( 'main.uploaded_letter_preview', service_id=SERVICE_ONE_ID, - file_id='fake-uuid', + file_id=fake_uuid, original_filename='my_letter.pdf', page_count=1, status='valid', @@ -333,7 +350,11 @@ def test_uploaded_letter_preview(mocker, active_user_with_permissions, service_o assert page.find('div', class_='letter-sent') -def test_uploaded_letter_preview_does_not_show_send_button_if_service_in_trial_mode(mocker, client_request): +def test_uploaded_letter_preview_does_not_show_send_button_if_service_in_trial_mode( + mocker, + client_request, + fake_uuid, +): mocker.patch('app.main.views.uploads.service_api_client') mocker.patch('app.main.views.uploads.get_letter_metadata', return_value={ 'filename': 'my_letter.pdf', 'page_count': '1', 'status': 'valid'}) @@ -342,7 +363,7 @@ def test_uploaded_letter_preview_does_not_show_send_button_if_service_in_trial_m page = client_request.get( 'main.uploaded_letter_preview', service_id=SERVICE_ONE_ID, - file_id='fake-uuid', + file_id=fake_uuid, original_filename='my_letter.pdf', page_count=1, status='valid', @@ -359,6 +380,7 @@ def test_uploaded_letter_preview_image_shows_overlay_when_content_outside_printa mocker, logged_in_client, mock_get_service, + fake_uuid, ): mocker.patch( 'app.main.views.uploads.get_letter_pdf_and_metadata', @@ -369,7 +391,7 @@ def test_uploaded_letter_preview_image_shows_overlay_when_content_outside_printa return_value=make_response('page.html', 200)) logged_in_client.get( - url_for('main.view_letter_upload_as_preview', file_id='fake-uuid', service_id=SERVICE_ONE_ID, page=1) + url_for('main.view_letter_upload_as_preview', file_id=fake_uuid, service_id=SERVICE_ONE_ID, page=1) ) template_preview_mock.assert_called_once_with('pdf_file', '1') @@ -387,6 +409,7 @@ def test_uploaded_letter_preview_image_does_not_show_overlay_if_no_content_outsi logged_in_client, mock_get_service, metadata, + fake_uuid, ): mocker.patch( 'app.main.views.uploads.get_letter_pdf_and_metadata', @@ -397,7 +420,7 @@ def test_uploaded_letter_preview_image_does_not_show_overlay_if_no_content_outsi return_value=make_response('page.html', 200)) logged_in_client.get( - url_for('main.view_letter_upload_as_preview', file_id='fake-uuid', service_id=SERVICE_ONE_ID, page=1) + url_for('main.view_letter_upload_as_preview', file_id=fake_uuid, service_id=SERVICE_ONE_ID, page=1) ) template_preview_mock.assert_called_once_with('pdf_file', '1')