diff --git a/app/main/views/platform_admin.py b/app/main/views/platform_admin.py
index 962c1c3b4..70078c045 100644
--- a/app/main/views/platform_admin.py
+++ b/app/main/views/platform_admin.py
@@ -8,6 +8,7 @@ from notifications_python_client.errors import HTTPError
from requests import RequestException
from app import (
+ billing_api_client,
complaint_api_client,
format_date_numeric,
letter_jobs_client,
@@ -292,6 +293,37 @@ def notifications_sent_by_service():
return render_template('views/platform-admin/notifications_by_service.html', form=form)
+@main.route("/platform-admin/reports/usage-for-all-services", methods=['GET', 'POST'])
+@user_is_platform_admin
+def usage_for_all_services():
+ form = RequiredDateFilterForm()
+
+ if form.validate_on_submit():
+ start_date = form.start_date.data
+ end_date = form.end_date.data
+ headers = ["organisation_id", "organisation_name", "service_id", "service_name",
+ "sms_cost", "sms_fragments", "letter_cost", "letter_breakdown"]
+
+ result = billing_api_client.get_usage_for_all_services(start_date, end_date)
+ rows = [
+ [
+ r['organisation_id'], r["organisation_name"], r["service_id"], r["service_name"],
+ r["sms_cost"], r['sms_fragments'], r["letter_cost"], r["letter_breakdown"].strip()
+ ]
+ for r in result
+ ]
+ if rows:
+ return Spreadsheet.from_rows([headers] + rows).as_csv_data, 200, {
+ 'Content-Type': 'text/csv; charset=utf-8',
+ 'Content-Disposition': 'attachment; filename="Usage for all services from {} to {}.csv"'.format(
+ start_date, end_date
+ )
+ }
+ else:
+ flash('No results for dates')
+ return render_template('views/platform-admin/usage_for_all_services.html', form=form)
+
+
@main.route("/platform-admin/complaints")
@user_is_platform_admin
def platform_admin_list_complaints():
diff --git a/app/navigation.py b/app/navigation.py
index ed7d7c87f..d04a43998 100644
--- a/app/navigation.py
+++ b/app/navigation.py
@@ -92,6 +92,7 @@ class HeaderNavigation(Navigation):
'live_services_csv',
'notifications_sent_by_service',
'performance_platform_xlsx',
+ 'usage_for_all_services',
'platform_admin',
'platform_admin_letter_validation_preview',
'platform_admin_list_complaints',
@@ -578,6 +579,7 @@ class MainNavigation(Navigation):
'two_factor_email_sent',
'update_email_branding',
'update_letter_branding',
+ 'usage_for_all_services',
'user_information',
'user_profile',
'user_profile_email',
@@ -853,6 +855,7 @@ class CaseworkNavigation(Navigation):
'update_letter_branding',
'uploads',
'usage',
+ 'usage_for_all_services',
'user_information',
'user_profile',
'user_profile_email',
@@ -1129,6 +1132,7 @@ class OrgNavigation(Navigation):
'update_letter_branding',
'uploads',
'usage',
+ 'usage_for_all_services',
'user_information',
'user_profile',
'user_profile_email',
diff --git a/app/notify_client/billing_api_client.py b/app/notify_client/billing_api_client.py
index 204588430..849716b55 100644
--- a/app/notify_client/billing_api_client.py
+++ b/app/notify_client/billing_api_client.py
@@ -34,5 +34,12 @@ class BillingAPIClient(NotifyAdminAPIClient):
data=data
)
+ def get_usage_for_all_services(self, start_date, end_date):
+ return self.get(url='/platform-stats/usage-for-all-services',
+ params={
+ 'start_date': str(start_date),
+ 'end_date': str(end_date),
+ })
+
billing_api_client = BillingAPIClient()
diff --git a/app/templates/views/platform-admin/reports.html b/app/templates/views/platform-admin/reports.html
index 702651b8d..8f5c90f19 100644
--- a/app/templates/views/platform-admin/reports.html
+++ b/app/templates/views/platform-admin/reports.html
@@ -21,4 +21,7 @@
Monthly notification statuses for live services
+
+ Usage for all services
+
{% endblock %}
diff --git a/app/templates/views/platform-admin/usage_for_all_services.html b/app/templates/views/platform-admin/usage_for_all_services.html
new file mode 100644
index 000000000..d0ad090b9
--- /dev/null
+++ b/app/templates/views/platform-admin/usage_for_all_services.html
@@ -0,0 +1,20 @@
+{% extends "views/platform-admin/_base_template.html" %}
+{% from "components/form.html" import form_wrapper %}
+
+{% block per_page_title %}
+ Usage for all services
+{% endblock %}
+
+{% block platform_admin_content %}
+
+
+ Usage for all services
+
+
+ {% call form_wrapper() %}
+ {{ textbox(form.start_date, hint="Enter start date in format YYYY-MM-DD") }}
+ {{ textbox(form.end_date, hint="Enter end date in format YYYY-MM-DD") }}
+ {{ page_footer('Download report') }}
+ {% endcall %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/tests/app/main/views/organisations/test_organisation.py b/tests/app/main/views/organisations/test_organisation.py
index 9a9817783..7e3ae2de9 100644
--- a/tests/app/main/views/organisations/test_organisation.py
+++ b/tests/app/main/views/organisations/test_organisation.py
@@ -17,7 +17,7 @@ from tests.conftest import (
def test_organisation_page_shows_all_organisations(
- logged_in_platform_admin_client,
+ platform_admin_client,
mocker
):
orgs = [
@@ -29,7 +29,7 @@ def test_organisation_page_shows_all_organisations(
get_organisations = mocker.patch(
'app.models.organisation.Organisations.client', return_value=orgs
)
- response = logged_in_platform_admin_client.get(
+ response = platform_admin_client.get(
url_for('.organisations')
)
@@ -594,12 +594,12 @@ def test_update_organisation_domains(
def test_update_organisation_name(
- logged_in_platform_admin_client,
+ platform_admin_client,
organisation_one,
mock_get_organisation,
mock_organisation_name_is_unique
):
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.edit_organisation_name', org_id=organisation_one['id']),
data={'name': 'TestNewOrgName'}
)
@@ -614,11 +614,11 @@ def test_update_organisation_name(
def test_update_organisation_with_incorrect_input(
- logged_in_platform_admin_client,
+ platform_admin_client,
organisation_one,
mock_get_organisation,
):
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.edit_organisation_name', org_id=organisation_one['id']),
data={'name': ''}
)
@@ -632,12 +632,12 @@ def test_update_organisation_with_incorrect_input(
def test_update_organisation_with_non_unique_name(
- logged_in_platform_admin_client,
+ platform_admin_client,
organisation_one,
mock_get_organisation,
mock_organisation_name_is_not_unique
):
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.edit_organisation_name', org_id=organisation_one['id']),
data={'name': 'TestNewOrgName'}
)
@@ -653,17 +653,17 @@ def test_update_organisation_with_non_unique_name(
def test_confirm_update_organisation(
- logged_in_platform_admin_client,
+ platform_admin_client,
organisation_one,
mock_get_organisation,
mock_verify_password,
mock_update_organisation,
mocker
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
session['organisation_name_change'] = 'newName'
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for(
'.confirm_edit_organisation_name',
org_id=organisation_one['id'],
@@ -681,17 +681,17 @@ def test_confirm_update_organisation(
def test_confirm_update_organisation_with_incorrect_password(
- logged_in_platform_admin_client,
+ platform_admin_client,
organisation_one,
mock_get_organisation,
mocker
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
session['organisation_name_change'] = 'newName'
mocker.patch('app.user_api_client.verify_password', return_value=False)
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for(
'.confirm_edit_organisation_name',
org_id=organisation_one['id']
@@ -707,13 +707,13 @@ def test_confirm_update_organisation_with_incorrect_password(
def test_confirm_update_organisation_with_name_already_in_use(
- logged_in_platform_admin_client,
+ platform_admin_client,
organisation_one,
mock_get_organisation,
mock_verify_password,
mocker
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
session['organisation_name_change'] = 'newName'
mocker.patch(
@@ -727,7 +727,7 @@ def test_confirm_update_organisation_with_name_already_in_use(
)
)
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for(
'.confirm_edit_organisation_name',
org_id=organisation_one['id']
@@ -739,11 +739,11 @@ def test_confirm_update_organisation_with_name_already_in_use(
def test_get_edit_organisation_go_live_notes_page(
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_organisation,
organisation_one,
):
- response = logged_in_platform_admin_client.get(
+ response = platform_admin_client.get(
url_for(
'.edit_organisation_go_live_notes',
org_id=organisation_one['id']
@@ -761,14 +761,14 @@ def test_get_edit_organisation_go_live_notes_page(
(' ', None)
])
def test_post_edit_organisation_go_live_notes_updates_go_live_notes(
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_organisation,
mock_update_organisation,
organisation_one,
input_note,
saved_note,
):
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for(
'.edit_organisation_go_live_notes',
org_id=organisation_one['id'],
diff --git a/tests/app/main/views/service_settings/test_service_setting_permissions.py b/tests/app/main/views/service_settings/test_service_setting_permissions.py
index 98b3d0767..9dc34903c 100644
--- a/tests/app/main/views/service_settings/test_service_setting_permissions.py
+++ b/tests/app/main/views/service_settings/test_service_setting_permissions.py
@@ -47,7 +47,7 @@ def test_service_set_permission_requires_platform_admin(
])
def test_service_set_permission(
mocker,
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
mock_get_inbound_number_for_service,
permission,
@@ -55,7 +55,7 @@ def test_service_set_permission(
on
):
force_permission = mocker.patch('app.models.service.Service.force_permission')
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('main.service_set_permission', service_id=service_one['id'], permission=permission),
data={'enabled': form_data}
)
diff --git a/tests/app/main/views/test_dashboard.py b/tests/app/main/views/test_dashboard.py
index 2bd6a68dc..82bcbdc2a 100644
--- a/tests/app/main/views/test_dashboard.py
+++ b/tests/app/main/views/test_dashboard.py
@@ -1452,7 +1452,7 @@ def test_org_breadcrumbs_show_if_user_is_platform_admin(
mock_get_service_templates_when_no_templates_exist,
mock_get_jobs,
platform_admin_user,
- logged_in_platform_admin_client,
+ platform_admin_client,
):
service_one_json = service_json(SERVICE_ONE_ID,
users=[platform_admin_user['id']],
@@ -1461,7 +1461,7 @@ def test_org_breadcrumbs_show_if_user_is_platform_admin(
mocker.patch('app.service_api_client.get_service', return_value={'data': service_one_json})
mocker.patch('app.models.service.Organisation')
- response = logged_in_platform_admin_client.get(url_for('main.service_dashboard', service_id=SERVICE_ONE_ID))
+ response = platform_admin_client.get(url_for('main.service_dashboard', service_id=SERVICE_ONE_ID))
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
assert page.select_one('.navigation-organisation-link')['href'] == url_for(
diff --git a/tests/app/main/views/test_email_branding.py b/tests/app/main/views/test_email_branding.py
index a91b2b6b4..ac59ab1e2 100644
--- a/tests/app/main/views/test_email_branding.py
+++ b/tests/app/main/views/test_email_branding.py
@@ -15,11 +15,11 @@ from tests.conftest import (
def test_email_branding_page_shows_full_branding_list(
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_all_email_branding
):
- response = logged_in_platform_admin_client.get(
+ response = platform_admin_client.get(
url_for('.email_branding')
)
@@ -52,11 +52,11 @@ def test_email_branding_page_shows_full_branding_list(
def test_edit_email_branding_shows_the_correct_branding_info(
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_email_branding,
fake_uuid
):
- response = logged_in_platform_admin_client.get(
+ response = platform_admin_client.get(
url_for('.update_email_branding', branding_id=fake_uuid)
)
@@ -70,11 +70,11 @@ def test_edit_email_branding_shows_the_correct_branding_info(
def test_create_email_branding_does_not_show_any_branding_info(
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_no_email_branding
):
- response = logged_in_platform_admin_client.get(
+ response = platform_admin_client.get(
url_for('.create_email_branding')
)
@@ -88,7 +88,7 @@ def test_create_email_branding_does_not_show_any_branding_info(
def test_create_new_email_branding_without_logo(
- logged_in_platform_admin_client,
+ platform_admin_client,
mocker,
fake_uuid,
mock_create_email_branding,
@@ -104,7 +104,7 @@ def test_create_new_email_branding_without_logo(
mock_persist = mocker.patch('app.main.views.email_branding.persist_logo')
mocker.patch('app.main.views.email_branding.delete_email_temp_files_created_by')
- logged_in_platform_admin_client.post(
+ platform_admin_client.post(
url_for('.create_email_branding'),
content_type='multipart/form-data',
data=data
@@ -174,12 +174,12 @@ def test_create_email_branding_does_not_require_a_name_when_uploading_a_file(
def test_create_new_email_branding_when_branding_saved(
- logged_in_platform_admin_client,
+ platform_admin_client,
mocker,
mock_create_email_branding,
fake_uuid
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
user_id = session["user_id"]
data = {
@@ -199,7 +199,7 @@ def test_create_new_email_branding_when_branding_saved(
mocker.patch('app.main.views.email_branding.persist_logo')
mocker.patch('app.main.views.email_branding.delete_email_temp_files_created_by')
- logged_in_platform_admin_client.post(
+ platform_admin_client.post(
url_for('.create_email_branding', logo=temp_filename),
content_type='multipart/form-data',
data={
@@ -228,7 +228,7 @@ def test_create_new_email_branding_when_branding_saved(
('main.update_email_branding', True),
])
def test_deletes_previous_temp_logo_after_uploading_logo(
- logged_in_platform_admin_client,
+ platform_admin_client,
mocker,
endpoint,
has_data,
@@ -237,7 +237,7 @@ def test_deletes_previous_temp_logo_after_uploading_logo(
if has_data:
mock_get_email_branding(mocker, fake_uuid)
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
user_id = session["user_id"]
temp_old_filename = EMAIL_LOGO_LOCATION_STRUCTURE.format(
@@ -259,7 +259,7 @@ def test_deletes_previous_temp_logo_after_uploading_logo(
mocked_delete_email_temp_file = mocker.patch('app.main.views.email_branding.delete_email_temp_file')
- logged_in_platform_admin_client.post(
+ platform_admin_client.post(
url_for('main.create_email_branding', logo=temp_old_filename, branding_id=fake_uuid),
data={'file': (BytesIO(''.encode('utf-8')), 'test.png')},
content_type='multipart/form-data'
@@ -271,13 +271,13 @@ def test_deletes_previous_temp_logo_after_uploading_logo(
def test_update_existing_branding(
- logged_in_platform_admin_client,
+ platform_admin_client,
mocker,
fake_uuid,
mock_get_email_branding,
mock_update_email_branding
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
user_id = session["user_id"]
data = {
@@ -297,7 +297,7 @@ def test_update_existing_branding(
mocker.patch('app.main.views.email_branding.persist_logo')
mocker.patch('app.main.views.email_branding.delete_email_temp_files_created_by')
- logged_in_platform_admin_client.post(
+ platform_admin_client.post(
url_for('.update_email_branding', logo=temp_filename, branding_id=fake_uuid),
content_type='multipart/form-data',
data={'colour': data['colour'], 'name': data['name'], 'text': data['text'],
@@ -320,11 +320,11 @@ def test_update_existing_branding(
def test_temp_logo_is_shown_after_uploading_logo(
- logged_in_platform_admin_client,
+ platform_admin_client,
mocker,
fake_uuid,
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
user_id = session["user_id"]
temp_filename = EMAIL_LOGO_LOCATION_STRUCTURE.format(
@@ -336,7 +336,7 @@ def test_temp_logo_is_shown_after_uploading_logo(
mocker.patch('app.main.views.email_branding.upload_email_logo', return_value=temp_filename)
mocker.patch('app.main.views.email_branding.delete_email_temp_file')
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('main.create_email_branding'),
data={'file': (BytesIO(''.encode('utf-8')), 'test.png')},
content_type='multipart/form-data',
@@ -351,12 +351,12 @@ def test_temp_logo_is_shown_after_uploading_logo(
def test_logo_persisted_when_organisation_saved(
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_create_email_branding,
mocker,
fake_uuid
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
user_id = session["user_id"]
temp_filename = EMAIL_LOGO_LOCATION_STRUCTURE.format(
@@ -366,7 +366,7 @@ def test_logo_persisted_when_organisation_saved(
mocked_persist_logo = mocker.patch('app.main.views.email_branding.persist_logo')
mocked_delete_email_temp_files_by = mocker.patch('app.main.views.email_branding.delete_email_temp_files_created_by')
- resp = logged_in_platform_admin_client.post(
+ resp = platform_admin_client.post(
url_for('.create_email_branding', logo=temp_filename),
content_type='multipart/form-data'
)
@@ -380,12 +380,12 @@ def test_logo_persisted_when_organisation_saved(
def test_logo_does_not_get_persisted_if_updating_email_branding_client_throws_an_error(
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_create_email_branding,
mocker,
fake_uuid
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
user_id = session["user_id"]
temp_filename = EMAIL_LOGO_LOCATION_STRUCTURE.format(
@@ -395,7 +395,7 @@ def test_logo_does_not_get_persisted_if_updating_email_branding_client_throws_an
mocked_delete_email_temp_files_by = mocker.patch('app.main.views.email_branding.delete_email_temp_files_created_by')
mocker.patch('app.main.views.email_branding.email_branding_client.create_email_branding', side_effect=HTTPError())
- logged_in_platform_admin_client.post(
+ platform_admin_client.post(
url_for('.create_email_branding', logo=temp_filename),
content_type='multipart/form-data'
)
@@ -410,7 +410,7 @@ def test_logo_does_not_get_persisted_if_updating_email_branding_client_throws_an
('', 302),
])
def test_colour_regex_validation(
- logged_in_platform_admin_client,
+ platform_admin_client,
mocker,
fake_uuid,
colour_hex,
@@ -427,7 +427,7 @@ def test_colour_regex_validation(
mocker.patch('app.main.views.email_branding.delete_email_temp_files_created_by')
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.create_email_branding'),
content_type='multipart/form-data',
data=data
diff --git a/tests/app/main/views/test_find_users.py b/tests/app/main/views/test_find_users.py
index 5c64e8dd9..99e331465 100644
--- a/tests/app/main/views/test_find_users.py
+++ b/tests/app/main/views/test_find_users.py
@@ -153,11 +153,11 @@ def test_user_information_page_displays_if_there_are_failed_login_attempts(
def test_user_information_page_shows_archive_link_for_active_users(
- logged_in_platform_admin_client,
+ platform_admin_client,
api_user_active,
mock_get_organisations_and_services_for_user,
):
- response = logged_in_platform_admin_client.get(
+ response = platform_admin_client.get(
url_for('main.user_information', user_id=api_user_active['id'])
)
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
@@ -186,11 +186,11 @@ def test_user_information_page_does_not_show_archive_link_for_inactive_users(
def test_archive_user_prompts_for_confirmation(
- logged_in_platform_admin_client,
+ platform_admin_client,
api_user_active,
mock_get_organisations_and_services_for_user,
):
- response = logged_in_platform_admin_client.get(
+ response = platform_admin_client.get(
url_for('main.archive_user', user_id=api_user_active['id'])
)
@@ -200,14 +200,14 @@ def test_archive_user_prompts_for_confirmation(
def test_archive_user_posts_to_user_client(
- logged_in_platform_admin_client,
+ platform_admin_client,
api_user_active,
mocker,
mock_events,
):
mock_user_client = mocker.patch('app.user_api_client.post')
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('main.archive_user', user_id=api_user_active['id'])
)
@@ -219,7 +219,7 @@ def test_archive_user_posts_to_user_client(
def test_archive_user_does_not_create_event_if_user_client_raises_exception(
- logged_in_platform_admin_client,
+ platform_admin_client,
api_user_active,
mocker,
mock_events,
@@ -227,7 +227,7 @@ def test_archive_user_does_not_create_event_if_user_client_raises_exception(
mock_user_client = mocker.patch('app.user_api_client.post', side_effect=Exception())
with pytest.raises(Exception):
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('main.archive_user', user_id=api_user_active.id)
)
diff --git a/tests/app/main/views/test_inbound_sms_admin.py b/tests/app/main/views/test_inbound_sms_admin.py
index df11144ee..323cc8697 100644
--- a/tests/app/main/views/test_inbound_sms_admin.py
+++ b/tests/app/main/views/test_inbound_sms_admin.py
@@ -25,9 +25,9 @@ sample_inbound_sms = {'data': [{"id": "activated",
]}
-def test_inbound_sms_admin(logged_in_platform_admin_client, mocker):
+def test_inbound_sms_admin(platform_admin_client, mocker):
mocker.patch("app.inbound_number_client.get_all_inbound_sms_number_service", return_value=sample_inbound_sms)
- response = logged_in_platform_admin_client.get(url_for("main.inbound_sms_admin"))
+ response = platform_admin_client.get(url_for("main.inbound_sms_admin"))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
diff --git a/tests/app/main/views/test_letter_branding.py b/tests/app/main/views/test_letter_branding.py
index d9c463727..98313eec3 100644
--- a/tests/app/main/views/test_letter_branding.py
+++ b/tests/app/main/views/test_letter_branding.py
@@ -16,10 +16,10 @@ from tests.conftest import normalize_spaces
def test_letter_branding_page_shows_full_branding_list(
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_all_letter_branding
):
- response = logged_in_platform_admin_client.get(
+ response = platform_admin_client.get(
url_for('.letter_branding')
)
@@ -49,10 +49,10 @@ def test_letter_branding_page_shows_full_branding_list(
def test_update_letter_branding_shows_the_current_letter_brand(
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_letter_branding_by_id,
):
- response = logged_in_platform_admin_client.get(
+ response = platform_admin_client.get(
url_for('.update_letter_branding', branding_id='abc')
)
@@ -66,11 +66,11 @@ def test_update_letter_branding_shows_the_current_letter_brand(
def test_update_letter_branding_with_new_valid_file(
mocker,
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_letter_branding_by_id,
fake_uuid
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
user_id = session["user_id"]
filename = 'new_file.svg'
@@ -80,7 +80,7 @@ def test_update_letter_branding_with_new_valid_file(
mocker.patch('app.s3_client.s3_logo_client.uuid.uuid4', return_value=fake_uuid)
mock_delete_temp_files = mocker.patch('app.main.views.letter_branding.delete_letter_temp_file')
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.update_letter_branding', branding_id='abc'),
data={'file': (BytesIO(''.encode('utf-8')), filename)},
follow_redirects=True
@@ -96,10 +96,10 @@ def test_update_letter_branding_with_new_valid_file(
def test_update_letter_branding_when_uploading_invalid_file(
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_letter_branding_by_id
):
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.update_letter_branding', branding_id='abc'),
data={'file': (BytesIO(''.encode('utf-8')), 'test.png')},
follow_redirects=True
@@ -114,11 +114,11 @@ def test_update_letter_branding_when_uploading_invalid_file(
def test_update_letter_branding_deletes_any_temp_files_when_uploading_a_file(
mocker,
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_letter_branding_by_id,
fake_uuid,
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
user_id = session["user_id"]
temp_logo = LETTER_TEMP_LOGO_LOCATION.format(user_id=user_id, unique_id=fake_uuid, filename='temp.svg')
@@ -126,7 +126,7 @@ def test_update_letter_branding_deletes_any_temp_files_when_uploading_a_file(
mock_s3_upload = mocker.patch('app.s3_client.s3_logo_client.utils_s3upload')
mock_delete_temp_files = mocker.patch('app.main.views.letter_branding.delete_letter_temp_file')
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.update_letter_branding', branding_id='abc', logo=temp_logo),
data={'file': (BytesIO(''.encode('utf-8')), 'new_uploaded_file.svg')},
follow_redirects=True
@@ -142,7 +142,7 @@ def test_update_letter_branding_deletes_any_temp_files_when_uploading_a_file(
def test_update_letter_branding_with_original_file_and_new_details(
mocker,
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_all_letter_branding,
mock_get_letter_branding_by_id,
fake_uuid
@@ -151,7 +151,7 @@ def test_update_letter_branding_with_original_file_and_new_details(
mock_template_preview = mocker.patch('app.main.views.letter_branding.get_png_file_from_svg')
mock_upload_logos = mocker.patch('app.main.views.letter_branding.upload_letter_logos')
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.update_letter_branding', branding_id=fake_uuid),
data={
'name': 'Updated name',
@@ -175,7 +175,7 @@ def test_update_letter_branding_with_original_file_and_new_details(
def test_update_letter_branding_shows_form_errors_on_name_fields(
mocker,
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_letter_branding_by_id,
fake_uuid
):
@@ -183,7 +183,7 @@ def test_update_letter_branding_shows_form_errors_on_name_fields(
logo = permanent_letter_logo_name('hm-government', 'svg')
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.update_letter_branding', branding_id=fake_uuid, logo=logo),
data={
'name': '',
@@ -202,7 +202,7 @@ def test_update_letter_branding_shows_form_errors_on_name_fields(
def test_update_letter_branding_shows_database_errors_on_name_field(
mocker,
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_letter_branding_by_id,
fake_uuid,
):
@@ -222,7 +222,7 @@ def test_update_letter_branding_shows_database_errors_on_name_field(
message={'name': ['name already in use']}
))
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.update_letter_branding', branding_id='abc'),
data={
'name': 'my brand',
@@ -239,7 +239,7 @@ def test_update_letter_branding_shows_database_errors_on_name_field(
def test_update_letter_branding_with_new_file_and_new_details(
mocker,
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_all_letter_branding,
mock_get_letter_branding_by_id,
fake_uuid
@@ -254,7 +254,7 @@ def test_update_letter_branding_with_new_file_and_new_details(
mock_upload_png = mocker.patch('app.main.views.letter_branding.upload_letter_png_logo')
mock_delete_temp_files = mocker.patch('app.main.views.letter_branding.delete_letter_temp_files_created_by')
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.update_letter_branding', branding_id=fake_uuid, logo=temp_logo),
data={
'name': 'Updated name',
@@ -286,7 +286,7 @@ def test_update_letter_branding_with_new_file_and_new_details(
def test_update_letter_branding_rolls_back_db_changes_and_shows_error_if_saving_to_s3_fails(
mocker,
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_letter_branding_by_id,
fake_uuid
):
@@ -295,7 +295,7 @@ def test_update_letter_branding_rolls_back_db_changes_and_shows_error_if_saving_
mocker.patch('app.main.views.letter_branding.upload_letter_logos', side_effect=BotoClientError({}, 'error'))
temp_logo = LETTER_TEMP_LOGO_LOCATION.format(user_id=fake_uuid, unique_id=fake_uuid, filename='new_file.svg')
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.update_letter_branding', branding_id=fake_uuid, logo=temp_logo),
data={
'name': 'Updated name',
@@ -315,8 +315,8 @@ def test_update_letter_branding_rolls_back_db_changes_and_shows_error_if_saving_
]
-def test_create_letter_branding_does_not_show_branding_info(logged_in_platform_admin_client):
- response = logged_in_platform_admin_client.get(
+def test_create_letter_branding_does_not_show_branding_info(platform_admin_client):
+ response = platform_admin_client.get(
url_for('.create_letter_branding')
)
@@ -329,10 +329,10 @@ def test_create_letter_branding_does_not_show_branding_info(logged_in_platform_a
def test_create_letter_branding_when_uploading_valid_file(
mocker,
- logged_in_platform_admin_client,
+ platform_admin_client,
fake_uuid
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
user_id = session["user_id"]
filename = 'test.svg'
@@ -342,7 +342,7 @@ def test_create_letter_branding_when_uploading_valid_file(
mocker.patch('app.s3_client.s3_logo_client.uuid.uuid4', return_value=fake_uuid)
mock_delete_temp_files = mocker.patch('app.main.views.letter_branding.delete_letter_temp_file')
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.create_letter_branding'),
data={'file': (BytesIO(''.encode('utf-8')), filename)},
follow_redirects=True
@@ -356,8 +356,8 @@ def test_create_letter_branding_when_uploading_valid_file(
mock_delete_temp_files.assert_not_called()
-def test_create_letter_branding_when_uploading_invalid_file(logged_in_platform_admin_client):
- response = logged_in_platform_admin_client.post(
+def test_create_letter_branding_when_uploading_invalid_file(platform_admin_client):
+ response = platform_admin_client.post(
url_for('.create_letter_branding'),
data={'file': (BytesIO(''.encode('utf-8')), 'test.png')},
follow_redirects=True
@@ -372,10 +372,10 @@ def test_create_letter_branding_when_uploading_invalid_file(logged_in_platform_a
def test_create_letter_branding_deletes_temp_files_when_uploading_a_new_file(
mocker,
- logged_in_platform_admin_client,
+ platform_admin_client,
fake_uuid,
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
user_id = session["user_id"]
temp_logo = LETTER_TEMP_LOGO_LOCATION.format(user_id=user_id, unique_id=fake_uuid, filename='temp.svg')
@@ -383,7 +383,7 @@ def test_create_letter_branding_deletes_temp_files_when_uploading_a_new_file(
mock_s3_upload = mocker.patch('app.s3_client.s3_logo_client.utils_s3upload')
mock_delete_temp_files = mocker.patch('app.main.views.letter_branding.delete_letter_temp_file')
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.create_letter_branding', logo=temp_logo),
data={'file': (BytesIO(''.encode('utf-8')), 'new.svg')},
follow_redirects=True
@@ -399,15 +399,15 @@ def test_create_letter_branding_deletes_temp_files_when_uploading_a_new_file(
def test_create_new_letter_branding_shows_preview_of_logo(
mocker,
- logged_in_platform_admin_client,
+ platform_admin_client,
fake_uuid
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
user_id = session["user_id"]
temp_logo = LETTER_TEMP_LOGO_LOCATION.format(user_id=user_id, unique_id=fake_uuid, filename='temp.svg')
- response = logged_in_platform_admin_client.get(
+ response = platform_admin_client.get(
url_for('.create_letter_branding', logo=temp_logo)
)
@@ -419,10 +419,10 @@ def test_create_new_letter_branding_shows_preview_of_logo(
def test_create_letter_branding_shows_an_error_when_submitting_details_with_no_logo(
- logged_in_platform_admin_client,
+ platform_admin_client,
fake_uuid
):
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.create_letter_branding'),
data={
'name': 'Test brand',
@@ -439,10 +439,10 @@ def test_create_letter_branding_shows_an_error_when_submitting_details_with_no_l
def test_create_letter_branding_persists_logo_when_all_data_is_valid(
mocker,
- logged_in_platform_admin_client,
+ platform_admin_client,
fake_uuid,
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
user_id = session["user_id"]
temp_logo = LETTER_TEMP_LOGO_LOCATION.format(user_id=user_id, unique_id=fake_uuid, filename='test.svg')
@@ -455,7 +455,7 @@ def test_create_letter_branding_persists_logo_when_all_data_is_valid(
mock_upload_png = mocker.patch('app.main.views.letter_branding.upload_letter_png_logo')
mock_delete_temp_files = mocker.patch('app.main.views.letter_branding.delete_letter_temp_files_created_by')
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.create_letter_branding', logo=temp_logo),
data={
'name': 'Test brand',
@@ -485,15 +485,15 @@ def test_create_letter_branding_persists_logo_when_all_data_is_valid(
def test_create_letter_branding_shows_form_errors_on_name_field(
- logged_in_platform_admin_client,
+ platform_admin_client,
fake_uuid
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
user_id = session["user_id"]
temp_logo = LETTER_TEMP_LOGO_LOCATION.format(user_id=user_id, unique_id=fake_uuid, filename='test.svg')
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.create_letter_branding', logo=temp_logo),
data={
'name': '',
@@ -511,10 +511,10 @@ def test_create_letter_branding_shows_form_errors_on_name_field(
def test_create_letter_branding_shows_database_errors_on_name_fields(
mocker,
- logged_in_platform_admin_client,
+ platform_admin_client,
fake_uuid,
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
user_id = session["user_id"]
mocker.patch('app.main.views.letter_branding.get_png_file_from_svg')
@@ -535,7 +535,7 @@ def test_create_letter_branding_shows_database_errors_on_name_fields(
temp_logo = LETTER_TEMP_LOGO_LOCATION.format(user_id=user_id, unique_id=fake_uuid, filename='test.svg')
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.create_letter_branding', logo=temp_logo),
data={
'name': 'my brand',
diff --git a/tests/app/main/views/test_letters.py b/tests/app/main/views/test_letters.py
index 9c49360cb..b5edfe596 100644
--- a/tests/app/main/views/test_letters.py
+++ b/tests/app/main/views/test_letters.py
@@ -14,7 +14,7 @@ letters_urls = [
([], 403)
])
def test_letters_access_restricted(
- logged_in_platform_admin_client,
+ platform_admin_client,
mocker,
permissions,
response_code,
@@ -26,7 +26,7 @@ def test_letters_access_restricted(
mocker.patch('app.service_api_client.get_service', return_value={"data": service_one})
- response = logged_in_platform_admin_client.get(url(service_id=service_one['id']))
+ response = platform_admin_client.get(url(service_id=service_one['id']))
assert response.status_code == response_code
diff --git a/tests/app/main/views/test_platform_admin.py b/tests/app/main/views/test_platform_admin.py
index d3c475456..4f72fe549 100644
--- a/tests/app/main/views/test_platform_admin.py
+++ b/tests/app/main/views/test_platform_admin.py
@@ -19,12 +19,7 @@ from app.main.views.platform_admin import (
sum_service_usage,
)
from tests import service_json
-from tests.conftest import (
- SERVICE_ONE_ID,
- SERVICE_TWO_ID,
- mock_get_user,
- normalize_spaces,
-)
+from tests.conftest import SERVICE_ONE_ID, SERVICE_TWO_ID, normalize_spaces
@pytest.mark.parametrize('endpoint', [
@@ -47,16 +42,10 @@ def test_should_redirect_if_not_logged_in(
'main.trial_services',
])
def test_should_403_if_not_platform_admin(
- client,
- active_user_with_permissions,
- mocker,
+ client_request,
endpoint,
):
- mock_get_user(mocker, user=active_user_with_permissions)
- client.login(active_user_with_permissions)
- response = client.get(url_for(endpoint))
-
- assert response.status_code == 403
+ client_request.get(endpoint, _expected_status=403)
@pytest.mark.parametrize('endpoint, restricted, research_mode, displayed', [
@@ -70,9 +59,7 @@ def test_should_show_research_and_restricted_mode(
restricted,
research_mode,
displayed,
- client,
- platform_admin_user,
- mocker,
+ platform_admin_client,
mock_get_detailed_services,
fake_uuid,
):
@@ -80,9 +67,8 @@ def test_should_show_research_and_restricted_mode(
services[0]['statistics'] = create_stats()
mock_get_detailed_services.return_value = {'data': services}
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
- response = client.get(url_for(endpoint))
+
+ response = platform_admin_client.get(url_for(endpoint))
assert response.status_code == 200
mock_get_detailed_services.assert_called_once_with({'detailed': True,
@@ -100,16 +86,12 @@ def test_should_show_research_and_restricted_mode(
('main.trial_services', 1),
])
def test_should_render_platform_admin_page(
- client,
- platform_admin_user,
- mocker,
+ platform_admin_client,
mock_get_detailed_services,
endpoint,
expected_services_shown
):
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
- response = client.get(url_for(endpoint))
+ response = platform_admin_client.get(url_for(endpoint))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
assert len(page.select('tbody tr')) == expected_services_shown * 3 # one row for SMS, one for email, one for letter
@@ -129,16 +111,12 @@ def test_should_render_platform_admin_page(
])
def test_live_trial_services_toggle_including_from_test_key(
partial_url_for,
- client,
- platform_admin_user,
- mocker,
+ platform_admin_client,
mock_get_detailed_services,
endpoint,
inc
):
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
- response = client.get(partial_url_for(endpoint))
+ response = platform_admin_client.get(partial_url_for(endpoint))
assert response.status_code == 200
mock_get_detailed_services.assert_called_once_with({
@@ -153,15 +131,11 @@ def test_live_trial_services_toggle_including_from_test_key(
'main.trial_services'
])
def test_live_trial_services_with_date_filter(
- client,
- platform_admin_user,
- mocker,
+ platform_admin_client,
mock_get_detailed_services,
endpoint
):
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
- response = client.get(url_for(endpoint, start_date='2016-12-20', end_date='2016-12-28'))
+ response = platform_admin_client.get(url_for(endpoint, start_date='2016-12-20', end_date='2016-12-28'))
assert response.status_code == 200
resp_data = response.get_data(as_text=True)
@@ -192,9 +166,7 @@ def test_live_trial_services_with_date_filter(
),
])
def test_should_show_total_on_live_trial_services_pages(
- client,
- platform_admin_user,
- mocker,
+ platform_admin_client,
mock_get_detailed_services,
endpoint,
fake_uuid,
@@ -230,9 +202,7 @@ def test_should_show_total_on_live_trial_services_pages(
mock_get_detailed_services.return_value = {'data': services}
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
- response = client.get(url_for(endpoint))
+ response = platform_admin_client.get(url_for(endpoint))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
assert (
@@ -349,9 +319,7 @@ def test_should_show_email_and_sms_stats_for_all_service_types(
endpoint,
restricted,
research_mode,
- client,
- platform_admin_user,
- mocker,
+ platform_admin_client,
mock_get_detailed_services,
fake_uuid,
):
@@ -366,9 +334,7 @@ def test_should_show_email_and_sms_stats_for_all_service_types(
)
mock_get_detailed_services.return_value = {'data': services}
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
- response = client.get(url_for(endpoint))
+ response = platform_admin_client.get(url_for(endpoint))
assert response.status_code == 200
mock_get_detailed_services.assert_called_once_with({'detailed': True,
@@ -397,9 +363,7 @@ def test_should_show_email_and_sms_stats_for_all_service_types(
], ids=['live', 'trial'])
def test_should_show_archived_services_last(
endpoint,
- client,
- platform_admin_user,
- mocker,
+ platform_admin_client,
mock_get_detailed_services,
restricted,
):
@@ -413,9 +377,7 @@ def test_should_show_archived_services_last(
services[2]['statistics'] = create_stats()
mock_get_detailed_services.return_value = {'data': services}
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
- response = client.get(url_for(endpoint))
+ response = platform_admin_client.get(url_for(endpoint))
assert response.status_code == 200
mock_get_detailed_services.assert_called_once_with({'detailed': True,
@@ -433,9 +395,7 @@ def test_should_show_archived_services_last(
@pytest.mark.parametrize('research_mode', (True, False))
def test_shows_archived_label_instead_of_live_or_research_mode_label(
- client,
- platform_admin_user,
- mocker,
+ platform_admin_client,
mock_get_detailed_services,
research_mode,
):
@@ -445,9 +405,7 @@ def test_shows_archived_label_instead_of_live_or_research_mode_label(
services[0]['statistics'] = create_stats()
mock_get_detailed_services.return_value = {'data': services}
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
- response = client.get(url_for('main.live_services'))
+ response = platform_admin_client.get(url_for('main.live_services'))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
@@ -466,9 +424,7 @@ def test_should_order_services_by_usage_with_inactive_last(
endpoint,
restricted,
research_mode,
- client,
- platform_admin_user,
- mocker,
+ platform_admin_client,
mock_get_detailed_services,
fake_uuid,
):
@@ -505,9 +461,7 @@ def test_should_order_services_by_usage_with_inactive_last(
)
mock_get_detailed_services.return_value = {'data': services}
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
- response = client.get(url_for(endpoint))
+ response = platform_admin_client.get(url_for(endpoint))
assert response.status_code == 200
mock_get_detailed_services.assert_called_once_with({'detailed': True,
@@ -550,12 +504,9 @@ def test_sum_service_usage_with_zeros(fake_uuid):
def test_platform_admin_list_complaints(
- client,
- platform_admin_user,
- mocker
+ platform_admin_client,
+ mocker
):
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
complaint = {
'id': str(uuid.uuid4()),
'notification_id': str(uuid.uuid4()),
@@ -569,8 +520,7 @@ def test_platform_admin_list_complaints(
mock = mocker.patch('app.complaint_api_client.get_all_complaints',
return_value={'complaints': [complaint], 'links': {}})
- client.login(platform_admin_user)
- response = client.get(url_for('main.platform_admin_list_complaints'))
+ response = platform_admin_client.get(url_for('main.platform_admin_list_complaints'))
assert response.status_code == 200
resp_data = response.get_data(as_text=True)
@@ -578,9 +528,7 @@ def test_platform_admin_list_complaints(
assert mock.called
-def test_should_show_complaints_with_next_previous(mocker, client, platform_admin_user, service_one, fake_uuid):
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
+def test_should_show_complaints_with_next_previous(platform_admin_client, mocker, service_one, fake_uuid):
api_response = {
'complaints': [{'complaint_date': None,
@@ -596,7 +544,7 @@ def test_should_show_complaints_with_next_previous(mocker, client, platform_admi
mocker.patch('app.complaint_api_client.get_all_complaints', return_value=api_response)
- response = client.get(url_for('main.platform_admin_list_complaints', page=2))
+ response = platform_admin_client.get(url_for('main.platform_admin_list_complaints', page=2))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
@@ -611,13 +559,11 @@ 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)
+def test_platform_admin_list_complaints_returns_404_with_invalid_page(platform_admin_client, mocker):
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'))
+ response = platform_admin_client.get(url_for('main.platform_admin_list_complaints', page='invalid'))
assert response.status_code == 404
@@ -644,7 +590,7 @@ def test_get_tech_failure_status_box_data_removes_percentage_data():
assert 'percentage' not in tech_failure_data
-def test_platform_admin_with_start_and_end_dates_provided(mocker, logged_in_platform_admin_client):
+def test_platform_admin_with_start_and_end_dates_provided(mocker, platform_admin_client):
start_date = '2018-01-01'
end_date = '2018-06-01'
api_args = {'start_date': datetime.date(2018, 1, 1), 'end_date': datetime.date(2018, 6, 1)}
@@ -654,7 +600,7 @@ def test_platform_admin_with_start_and_end_dates_provided(mocker, logged_in_plat
'app.main.views.platform_admin.platform_stats_api_client.get_aggregate_platform_stats')
complaint_count_mock = mocker.patch('app.main.views.platform_admin.complaint_api_client.get_complaint_count')
- logged_in_platform_admin_client.get(
+ platform_admin_client.get(
url_for('main.platform_admin', start_date=start_date, end_date=end_date)
)
@@ -663,7 +609,7 @@ def test_platform_admin_with_start_and_end_dates_provided(mocker, logged_in_plat
@freeze_time('2018-6-11')
-def test_platform_admin_with_only_a_start_date_provided(mocker, logged_in_platform_admin_client):
+def test_platform_admin_with_only_a_start_date_provided(mocker, platform_admin_client):
start_date = '2018-01-01'
api_args = {'start_date': datetime.date(2018, 1, 1), 'end_date': datetime.datetime.utcnow().date()}
@@ -672,13 +618,13 @@ def test_platform_admin_with_only_a_start_date_provided(mocker, logged_in_platfo
'app.main.views.platform_admin.platform_stats_api_client.get_aggregate_platform_stats')
complaint_count_mock = mocker.patch('app.main.views.platform_admin.complaint_api_client.get_complaint_count')
- logged_in_platform_admin_client.get(url_for('main.platform_admin', start_date=start_date))
+ platform_admin_client.get(url_for('main.platform_admin', start_date=start_date))
aggregate_stats_mock.assert_called_with(api_args)
complaint_count_mock.assert_called_with(api_args)
-def test_platform_admin_without_dates_provided(mocker, logged_in_platform_admin_client):
+def test_platform_admin_without_dates_provided(mocker, platform_admin_client):
api_args = {}
mocker.patch('app.main.views.platform_admin.make_columns')
@@ -686,7 +632,7 @@ def test_platform_admin_without_dates_provided(mocker, logged_in_platform_admin_
'app.main.views.platform_admin.platform_stats_api_client.get_aggregate_platform_stats')
complaint_count_mock = mocker.patch('app.main.views.platform_admin.complaint_api_client.get_complaint_count')
- logged_in_platform_admin_client.get(url_for('main.platform_admin'))
+ platform_admin_client.get(url_for('main.platform_admin'))
aggregate_stats_mock.assert_called_with(api_args)
complaint_count_mock.assert_called_with(api_args)
@@ -694,7 +640,7 @@ def test_platform_admin_without_dates_provided(mocker, logged_in_platform_admin_
def test_platform_admin_displays_stats_in_right_boxes_and_with_correct_styling(
mocker,
- logged_in_platform_admin_client,
+ platform_admin_client,
):
platform_stats = {
'email': {'failures':
@@ -714,7 +660,7 @@ def test_platform_admin_displays_stats_in_right_boxes_and_with_correct_styling(
return_value=platform_stats)
mocker.patch('app.main.views.platform_admin.complaint_api_client.get_complaint_count', return_value=15)
- response = logged_in_platform_admin_client.get(url_for('main.platform_admin'))
+ response = platform_admin_client.get(url_for('main.platform_admin'))
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
# Email permanent failure status box - number is correct
@@ -733,13 +679,11 @@ def test_platform_admin_displays_stats_in_right_boxes_and_with_correct_styling(
'div', class_='big-number-status-failing').text
-def test_platform_admin_submit_returned_letters(mocker, client, platform_admin_user):
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
+def test_platform_admin_submit_returned_letters(mocker, platform_admin_client):
mock_client = mocker.patch('app.letter_jobs_client.submit_returned_letters')
- response = client.post(
+ response = platform_admin_client.post(
url_for('main.platform_admin_returned_letters'),
data={'references': ' NOTIFY000REF1 \n NOTIFY002REF2 '}
)
@@ -750,13 +694,11 @@ def test_platform_admin_submit_returned_letters(mocker, client, platform_admin_u
assert response.location == url_for('main.platform_admin_returned_letters', _external=True)
-def test_platform_admin_submit_empty_returned_letters(mocker, client, platform_admin_user):
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
+def test_platform_admin_submit_empty_returned_letters(mocker, platform_admin_client):
mock_client = mocker.patch('app.letter_jobs_client.submit_returned_letters')
- response = client.post(
+ response = platform_admin_client.post(
url_for('main.platform_admin_returned_letters'),
data={'references': ' \n '}
)
@@ -797,10 +739,8 @@ def test_service_letter_validation_preview_returns_400_if_file_is_too_big(
page.find('span', class_='error-message').text.strip() == "File must be less than 2MB"
-def test_letter_validation_preview_renders_correctly(mocker, client, platform_admin_user):
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
- response = client.get(url_for('main.platform_admin_letter_validation_preview'))
+def test_letter_validation_preview_renders_correctly(mocker, platform_admin_client):
+ response = platform_admin_client.get(url_for('main.platform_admin_letter_validation_preview'))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
@@ -810,10 +750,8 @@ def test_letter_validation_preview_renders_correctly(mocker, client, platform_ad
@pytest.mark.parametrize("result,expected_class", [(True, 'banner-with-tick'), (False, "banner-dangerous")])
def test_letter_validation_preview_calls_template_preview_when_data_correct_and_displays_correct_message(
- mocker, client, platform_admin_user, result, expected_class
+ mocker, platform_admin_client, result, expected_class
):
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
endpoint = '{}/precompiled/validate?include_preview=true'.format(current_app.config['TEMPLATE_PREVIEW_API_HOST'])
mocker.patch('app.main.views.platform_admin.antivirus_client.scan', return_value=True)
@@ -825,7 +763,7 @@ def test_letter_validation_preview_calls_template_preview_when_data_correct_and_
status_code=200
)
with open('tests/test_pdf_files/multi_page_pdf.pdf', 'rb') as file:
- response = client.post(
+ response = platform_admin_client.post(
url_for('main.platform_admin_letter_validation_preview'),
data={"file": file},
content_type='multipart/form-data'
@@ -838,12 +776,10 @@ def test_letter_validation_preview_calls_template_preview_when_data_correct_and_
assert page.find('div', class_=expected_class).text.strip() == "bazinga!"
-def test_letter_validation_preview_doesnt_call_template_preview_when_no_file(mocker, client, platform_admin_user):
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
+def test_letter_validation_preview_doesnt_call_template_preview_when_no_file(mocker, platform_admin_client):
antivirus_scan = mocker.patch('app.main.views.platform_admin.antivirus_client.scan')
validate_letter = mocker.patch('app.main.views.platform_admin.validate_letter')
- response = client.post(
+ response = platform_admin_client.post(
url_for('main.platform_admin_letter_validation_preview'),
data={"file": ""},
content_type='multipart/form-data'
@@ -856,13 +792,11 @@ def test_letter_validation_preview_doesnt_call_template_preview_when_no_file(moc
assert page.find('span', class_='error-message').text.strip() == "You need to upload a file to submit"
-def test_letter_validation_preview_doesnt_call_template_preview_when_file_not_pdf(mocker, client, platform_admin_user):
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
+def test_letter_validation_preview_doesnt_call_template_preview_when_file_not_pdf(mocker, platform_admin_client):
antivirus_scan = mocker.patch('app.main.views.platform_admin.antivirus_client.scan')
validate_letter = mocker.patch('app.main.views.platform_admin.validate_letter')
with open('tests/non_spreadsheet_files/actually_a_png.csv', 'rb') as file:
- response = client.post(
+ response = platform_admin_client.post(
url_for('main.platform_admin_letter_validation_preview'),
data={"file": file},
content_type='multipart/form-data'
@@ -875,15 +809,14 @@ def test_letter_validation_preview_doesnt_call_template_preview_when_file_not_pd
def test_letter_validation_preview_doesnt_call_template_preview_when_file_doesnt_pass_virus_scan(
- mocker, client, platform_admin_user
+ mocker,
+ platform_admin_client
):
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
antivirus_scan = mocker.patch('app.main.views.platform_admin.antivirus_client.scan', return_value=False)
validate_letter = mocker.patch('app.main.views.platform_admin.validate_letter')
with open('tests/test_pdf_files/multi_page_pdf.pdf', 'rb') as file:
- response = client.post(
+ response = platform_admin_client.post(
url_for('main.platform_admin_letter_validation_preview'),
data={"file": file},
content_type='multipart/form-data'
@@ -954,14 +887,10 @@ def test_clear_cache_requires_option(client_request, platform_admin_user, mocker
def test_reports_page(
- client,
- platform_admin_user,
- mocker
+ platform_admin_client
):
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
- response = client.get(url_for('main.platform_admin_reports'))
+ response = platform_admin_client.get(url_for('main.platform_admin_reports'))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
@@ -978,9 +907,7 @@ def test_reports_page(
).attrs['href'] == url_for('main.notifications_sent_by_service')
-def test_get_live_services_report(client, platform_admin_user, mocker):
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
+def test_get_live_services_report(platform_admin_client, mocker):
mocker.patch(
'app.service_api_client.get_live_services_data',
@@ -999,7 +926,7 @@ def test_get_live_services_report(client, platform_admin_user, mocker):
'free_sms_fragment_limit': 200},
]}
)
- response = client.get(url_for('main.live_services_csv'))
+ response = platform_admin_client.get(url_for('main.live_services_csv'))
assert response.status_code == 200
report = response.get_data(as_text=True)
assert report.strip() == (
@@ -1014,9 +941,7 @@ def test_get_live_services_report(client, platform_admin_user, mocker):
)
-def test_get_performance_platform_report(client, platform_admin_user, mocker):
- mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
+def test_get_performance_platform_report(platform_admin_client, mocker):
mocker.patch(
'app.service_api_client.get_live_services_data',
@@ -1033,7 +958,7 @@ def test_get_performance_platform_report(client, platform_admin_user, mocker):
'letter_volume_intent': 0, 'sms_totals': 0, 'email_totals': 0, 'letter_totals': 0},
]}
)
- response = client.get(url_for('main.performance_platform_xlsx'))
+ response = platform_admin_client.get(url_for('main.performance_platform_xlsx'))
assert response.status_code == 200
assert pyexcel.get_array(
file_type='xlsx',
@@ -1079,14 +1004,67 @@ def test_get_notifications_sent_by_service_validates_form(mocker, client_request
mock_get_stats_from_api.assert_not_called()
+def test_usage_for_all_services_when_no_results_for_date(client_request, platform_admin_user, mocker):
+ client_request.login(platform_admin_user)
+
+ mocker.patch("app.main.views.platform_admin.billing_api_client.get_usage_for_all_services",
+ return_value=[])
+
+ page = client_request.post('main.usage_for_all_services',
+ _expected_status=200,
+ _data={'start_date': '2019-01-01', 'end_date': '2019-03-31'})
+
+ error = page.select_one('.banner-dangerous')
+ assert normalize_spaces(error.text) == 'No results for dates'
+
+
+def test_usage_for_all_services_when_calls_api_and_download_data(platform_admin_client, mocker):
+ mocker.patch("app.main.views.platform_admin.billing_api_client.get_usage_for_all_services",
+ return_value=[{'letter_breakdown': '6 second class letters at 45p\n2 first class letters at 35p\n',
+ 'letter_cost': 3.4,
+ 'organisation_id': '7832a1be-a1f0-4f2a-982f-05adfd3d6354',
+ 'organisation_name': 'Org for a - with sms and letter',
+ 'service_id': '48e82ac0-c8c4-4e46-8712-c83c35a94006',
+ 'service_name': 'a - with sms and letter',
+ 'sms_cost': 0, 'sms_fragments': 0
+ }])
+
+ response = platform_admin_client.post(url_for('main.usage_for_all_services'),
+ data={'start_date': '2019-01-01', 'end_date': '2019-03-31'})
+
+ assert response.status_code == 200
+ assert response.content_type == 'text/csv; charset=utf-8'
+ assert response.headers['Content-Disposition'] == (
+ 'attachment; filename="Usage for all services from {} to {}.csv"'.format('2019-01-01', '2019-03-31')
+ )
+
+ assert response.get_data(as_text=True) == (
+ 'organisation_id,organisation_name,service_id,service_name,' +
+ 'sms_cost,sms_fragments,letter_cost,letter_breakdown' +
+
+ '\r\n' +
+
+ '7832a1be-a1f0-4f2a-982f-05adfd3d6354,' +
+ 'Org for a - with sms and letter,' +
+ '48e82ac0-c8c4-4e46-8712-c83c35a94006,' +
+ 'a - with sms and letter,' +
+ '0,' +
+ '0,' +
+ '3.4,' +
+ '"6 second class letters at 45p' +
+ '\n' +
+ '2 first class letters at 35p"' +
+
+ '\r\n'
+ )
+
+
def test_get_notifications_sent_by_service_calls_api_and_downloads_data(
mocker,
- client,
- platform_admin_user,
+ platform_admin_client,
service_one,
service_two,
):
- mock_get_user(mocker, user=platform_admin_user)
api_data = [
['Tue, 01 Jan 2019 00:00:00 GMT', SERVICE_ONE_ID, service_one['name'], 'email', 191, 0, 0, 14, 0, 0],
['Tue, 01 Jan 2019 00:00:00 GMT', SERVICE_ONE_ID, service_one['name'], 'sms', 42, 0, 0, 8, 0, 0],
@@ -1097,9 +1075,7 @@ def test_get_notifications_sent_by_service_calls_api_and_downloads_data(
start_date = datetime.date(2019, 1, 1)
end_date = datetime.date(2019, 1, 31)
- client.login(platform_admin_user)
-
- response = client.post(
+ response = platform_admin_client.post(
url_for('main.notifications_sent_by_service'),
data={'start_date': start_date, 'end_date': end_date}
)
diff --git a/tests/app/main/views/test_send.py b/tests/app/main/views/test_send.py
index 313a7e44d..87e2a8f89 100644
--- a/tests/app/main/views/test_send.py
+++ b/tests/app/main/views/test_send.py
@@ -1455,7 +1455,7 @@ def test_send_test_redirects_to_end_if_step_out_of_bounds(
('main.send_one_off_step', 'main.send_one_off'),
])
def test_send_test_redirects_to_start_if_you_skip_steps(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
fake_uuid,
mock_get_service_letter_template,
@@ -1470,11 +1470,11 @@ def test_send_test_redirects_to_start_if_you_skip_steps(
):
mocker.patch('app.user_api_client.get_user', return_value=user(fake_uuid))
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
session['send_test_letter_page_count'] = 1
session['placeholders'] = {'address_line_1': 'foo'}
- response = logged_in_platform_admin_client.get(url_for(
+ response = platform_admin_client.get(url_for(
endpoint,
service_id=service_one['id'],
template_id=fake_uuid,
@@ -1722,7 +1722,7 @@ def test_send_test_sms_message_back_link_in_tour(
def test_send_test_letter_clears_previous_page_cache(
- logged_in_platform_admin_client,
+ platform_admin_client,
mocker,
service_one,
mock_login,
@@ -1731,22 +1731,22 @@ def test_send_test_letter_clears_previous_page_cache(
fake_uuid,
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
session['send_test_letter_page_count'] = 'WRONG'
- response = logged_in_platform_admin_client.get(url_for(
+ response = platform_admin_client.get(url_for(
'main.send_test',
service_id=service_one['id'],
template_id=fake_uuid,
))
assert response.status_code == 302
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
assert session['send_test_letter_page_count'] is None
def test_send_test_letter_redirects_to_right_url(
- logged_in_platform_admin_client,
+ platform_admin_client,
fake_uuid,
mock_get_service_letter_template,
mock_s3_upload,
@@ -1755,7 +1755,7 @@ def test_send_test_letter_redirects_to_right_url(
mocker,
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
session['send_test_letter_page_count'] = 1
session['recipient'] = ''
session['placeholders'] = {
@@ -1768,7 +1768,7 @@ def test_send_test_letter_redirects_to_right_url(
'postcode': 'SW1 1AA',
}
- response = logged_in_platform_admin_client.get(url_for(
+ response = platform_admin_client.get(url_for(
'main.send_one_off_step',
service_id=SERVICE_ONE_ID,
template_id=fake_uuid,
@@ -1930,7 +1930,7 @@ def test_send_test_sms_message_puts_submitted_data_in_session(
@pytest.mark.parametrize('filetype', ['pdf', 'png'])
def test_send_test_works_as_letter_preview(
filetype,
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_service_letter_template,
mock_get_users_by_service,
mock_get_service_statistics,
@@ -1948,9 +1948,9 @@ def test_send_test_works_as_letter_preview(
service_id = service_one['id']
template_id = fake_uuid
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
session['placeholders'] = {'address_line_1': 'Jo Lastname'}
- response = logged_in_platform_admin_client.get(
+ response = platform_admin_client.get(
url_for(
'main.send_test_preview',
service_id=service_id,
@@ -2208,12 +2208,12 @@ def test_create_job_should_call_api(
def test_can_start_letters_job(
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_create_job,
service_one,
fake_uuid
):
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
session['file_uploads'] = {
fake_uuid: {
'template_id': fake_uuid,
@@ -2222,7 +2222,7 @@ def test_can_start_letters_job(
}
}
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('main.start_job', service_id=service_one['id'], upload_id=fake_uuid),
data={}
)
@@ -2271,7 +2271,7 @@ def test_can_start_letters_job(
])
def test_should_show_preview_letter_message(
filetype,
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_service_letter_template,
mock_get_users_by_service,
mock_get_service_statistics,
@@ -2303,7 +2303,7 @@ def test_should_show_preview_letter_message(
service_id = service_one['id']
template_id = fake_uuid
- with logged_in_platform_admin_client.session_transaction() as session:
+ with platform_admin_client.session_transaction() as session:
session['file_uploads'] = {
fake_uuid: {
'template_id': fake_uuid,
@@ -2312,7 +2312,7 @@ def test_should_show_preview_letter_message(
}
}
- response = logged_in_platform_admin_client.get(
+ response = platform_admin_client.get(
url_for(
'main.check_messages_preview',
service_id=service_id,
diff --git a/tests/app/main/views/test_service_settings.py b/tests/app/main/views/test_service_settings.py
index 6e821bfa7..3d024e4a2 100644
--- a/tests/app/main/views/test_service_settings.py
+++ b/tests/app/main/views/test_service_settings.py
@@ -3411,10 +3411,10 @@ def test_organisation_type_pages_are_platform_admin_only(
def test_should_show_page_to_set_sms_allowance(
- logged_in_platform_admin_client,
+ platform_admin_client,
mock_get_free_sms_fragment_limit
):
- response = logged_in_platform_admin_client.get(url_for(
+ response = platform_admin_client.get(url_for(
'main.set_free_sms_allowance',
service_id=SERVICE_ONE_ID
))
@@ -3432,14 +3432,14 @@ def test_should_show_page_to_set_sms_allowance(
pytest.param('foo', 'foo', marks=pytest.mark.xfail),
])
def test_should_set_sms_allowance(
- logged_in_platform_admin_client,
+ platform_admin_client,
given_allowance,
expected_api_argument,
mock_get_free_sms_fragment_limit,
mock_create_or_update_free_sms_fragment_limit,
):
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for(
'main.set_free_sms_allowance',
service_id=SERVICE_ONE_ID,
@@ -3635,7 +3635,7 @@ def test_switch_service_enable_international_sms(
([], '0207 123 4567', ['upload_document']),
])
def test_service_switch_can_upload_document_shows_permission_page_if_service_contact_details_exist(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
mock_update_service,
mock_get_service_settings_page_common,
@@ -3650,7 +3650,7 @@ def test_service_switch_can_upload_document_shows_permission_page_if_service_con
service_one['permissions'] = start_permissions
service_one['contact_link'] = contact_details
- response = logged_in_platform_admin_client.get(
+ response = platform_admin_client.get(
url_for('main.service_switch_can_upload_document', service_id=SERVICE_ONE_ID),
follow_redirects=True
)
@@ -3659,7 +3659,7 @@ def test_service_switch_can_upload_document_shows_permission_page_if_service_con
def test_service_switch_can_upload_document_turning_permission_on_with_no_contact_details_shows_form(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
mock_get_service_settings_page_common,
mock_get_service_organisation,
@@ -3667,7 +3667,7 @@ def test_service_switch_can_upload_document_turning_permission_on_with_no_contac
no_letter_contact_blocks,
single_sms_sender,
):
- response = logged_in_platform_admin_client.get(
+ response = platform_admin_client.get(
url_for('main.service_switch_can_upload_document', service_id=SERVICE_ONE_ID),
follow_redirects=True
)
@@ -3683,7 +3683,7 @@ def test_service_switch_can_upload_document_turning_permission_on_with_no_contac
('phone_number', '0207 12345'),
])
def test_service_switch_can_upload_document_lets_contact_details_be_added_and_shows_permission_page(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
mock_update_service,
mock_get_service_settings_page_common,
@@ -3696,7 +3696,7 @@ def test_service_switch_can_upload_document_lets_contact_details_be_added_and_sh
):
data = {'contact_details_type': contact_details_type, contact_details_type: contact_details_value}
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('main.service_switch_can_upload_document', service_id=SERVICE_ONE_ID),
data=data,
follow_redirects=True
@@ -3778,7 +3778,7 @@ def test_archive_service_prompts_user(
def test_cant_archive_inactive_service(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
single_reply_to_email_address,
single_letter_contact_block,
@@ -3788,7 +3788,7 @@ def test_cant_archive_inactive_service(
):
service_one['active'] = False
- response = logged_in_platform_admin_client.get(url_for('main.service_settings', service_id=service_one['id']))
+ response = platform_admin_client.get(url_for('main.service_settings', service_id=service_one['id']))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
@@ -3796,14 +3796,14 @@ def test_cant_archive_inactive_service(
def test_suspend_service_after_confirm(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
mocker,
mock_get_inbound_number_for_service,
):
mocked_fn = mocker.patch('app.service_api_client.post', return_value=service_one)
- response = logged_in_platform_admin_client.post(url_for('main.suspend_service', service_id=service_one['id']))
+ response = platform_admin_client.post(url_for('main.suspend_service', service_id=service_one['id']))
assert response.status_code == 302
assert response.location == url_for('main.service_settings', service_id=service_one['id'], _external=True)
@@ -3811,7 +3811,7 @@ def test_suspend_service_after_confirm(
def test_suspend_service_prompts_user(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
mocker,
single_reply_to_email_address,
@@ -3822,7 +3822,7 @@ def test_suspend_service_prompts_user(
):
mocked_fn = mocker.patch('app.service_api_client.post')
- response = logged_in_platform_admin_client.get(url_for('main.suspend_service', service_id=service_one['id']))
+ response = platform_admin_client.get(url_for('main.suspend_service', service_id=service_one['id']))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
@@ -3832,7 +3832,7 @@ def test_suspend_service_prompts_user(
def test_cant_suspend_inactive_service(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
single_reply_to_email_address,
single_letter_contact_block,
@@ -3842,7 +3842,7 @@ def test_cant_suspend_inactive_service(
):
service_one['active'] = False
- response = logged_in_platform_admin_client.get(url_for('main.service_settings', service_id=service_one['id']))
+ response = platform_admin_client.get(url_for('main.service_settings', service_id=service_one['id']))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
@@ -3850,7 +3850,7 @@ def test_cant_suspend_inactive_service(
def test_resume_service_after_confirm(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
single_reply_to_email_address,
single_letter_contact_block,
@@ -3861,7 +3861,7 @@ def test_resume_service_after_confirm(
service_one['active'] = False
mocked_fn = mocker.patch('app.service_api_client.post', return_value=service_one)
- response = logged_in_platform_admin_client.post(url_for('main.resume_service', service_id=service_one['id']))
+ response = platform_admin_client.post(url_for('main.resume_service', service_id=service_one['id']))
assert response.status_code == 302
assert response.location == url_for('main.service_settings', service_id=service_one['id'], _external=True)
@@ -3869,7 +3869,7 @@ def test_resume_service_after_confirm(
def test_resume_service_prompts_user(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
single_reply_to_email_address,
single_letter_contact_block,
@@ -3881,7 +3881,7 @@ def test_resume_service_prompts_user(
service_one['active'] = False
mocked_fn = mocker.patch('app.service_api_client.post')
- response = logged_in_platform_admin_client.get(url_for('main.resume_service', service_id=service_one['id']))
+ response = platform_admin_client.get(url_for('main.resume_service', service_id=service_one['id']))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
@@ -3891,7 +3891,7 @@ def test_resume_service_prompts_user(
def test_cant_resume_active_service(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
single_reply_to_email_address,
single_letter_contact_block,
@@ -3899,7 +3899,7 @@ def test_cant_resume_active_service(
single_sms_sender,
mock_get_service_settings_page_common
):
- response = logged_in_platform_admin_client.get(url_for('main.service_settings', service_id=service_one['id']))
+ response = platform_admin_client.get(url_for('main.service_settings', service_id=service_one['id']))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
@@ -4251,12 +4251,12 @@ def test_updates_sms_prefixing(
def test_select_organisation(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
mock_get_service_organisation,
mock_get_organisations
):
- response = logged_in_platform_admin_client.get(
+ response = platform_admin_client.get(
url_for('.link_service_to_organisation', service_id=service_one['id']),
)
@@ -4271,14 +4271,14 @@ def test_select_organisation(
def test_select_organisation_shows_message_if_no_orgs(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
mock_get_service_organisation,
mocker
):
mocker.patch('app.organisations_client.get_organisations', return_value=[])
- response = logged_in_platform_admin_client.get(
+ response = platform_admin_client.get(
url_for('.link_service_to_organisation', service_id=service_one['id']),
)
@@ -4290,13 +4290,13 @@ def test_select_organisation_shows_message_if_no_orgs(
def test_update_service_organisation(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
mock_get_service_organisation,
mock_get_organisations,
mock_update_service_organisation,
):
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.link_service_to_organisation', service_id=service_one['id']),
data={'organisations': '7aa5d4e9-4385-4488-a489-07812ba13384'},
)
@@ -4309,13 +4309,13 @@ def test_update_service_organisation(
def test_update_service_organisation_does_not_update_if_same_value(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
mock_get_service_organisation,
mock_get_organisations,
mock_update_service_organisation,
):
- response = logged_in_platform_admin_client.post(
+ response = platform_admin_client.post(
url_for('.link_service_to_organisation', service_id=service_one['id']),
data={'organisations': '7aa5d4e9-4385-4488-a489-07812ba13383'},
)
@@ -4440,7 +4440,7 @@ def test_submit_email_branding_request(
def test_show_service_data_retention(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
mock_get_service_data_retention,
@@ -4448,7 +4448,7 @@ def test_show_service_data_retention(
mock_get_service_data_retention.return_value[0]['days_of_retention'] = 5
- response = logged_in_platform_admin_client.get(url_for('main.data_retention', service_id=service_one['id']))
+ response = platform_admin_client.get(url_for('main.data_retention', service_id=service_one['id']))
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
rows = page.select('tbody tr')
assert len(rows) == 1
@@ -4456,26 +4456,26 @@ def test_show_service_data_retention(
def test_view_add_service_data_retention(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
):
- response = logged_in_platform_admin_client.get(url_for('main.add_data_retention', service_id=service_one['id']))
+ response = platform_admin_client.get(url_for('main.add_data_retention', service_id=service_one['id']))
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
assert normalize_spaces(page.select_one('input')['value']) == "email"
assert page.find('input', attrs={'name': 'days_of_retention'})
def test_add_service_data_retention(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
mock_create_service_data_retention
):
- response = logged_in_platform_admin_client.post(url_for('main.add_data_retention', service_id=service_one['id']),
- data={'notification_type': "email",
- 'days_of_retention': 5
- }
- )
+ response = platform_admin_client.post(url_for(
+ 'main.add_data_retention',
+ service_id=service_one['id']),
+ data={'notification_type': "email", 'days_of_retention': 5}
+ )
assert response.status_code == 302
settings_url = url_for(
'main.data_retention', service_id=service_one['id'], _external=True)
@@ -4484,17 +4484,19 @@ def test_add_service_data_retention(
def test_update_service_data_retention(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
fake_uuid,
mock_get_service_data_retention,
mock_update_service_data_retention,
):
- response = logged_in_platform_admin_client.post(url_for('main.edit_data_retention',
- service_id=service_one['id'],
- data_retention_id=str(fake_uuid)),
- data={'days_of_retention': 5}
- )
+ response = platform_admin_client.post(
+ url_for(
+ 'main.edit_data_retention',
+ service_id=service_one['id'],
+ data_retention_id=str(fake_uuid)),
+ data={'days_of_retention': 5}
+ )
assert response.status_code == 302
settings_url = url_for(
'main.data_retention', service_id=service_one['id'], _external=True)
@@ -4503,17 +4505,20 @@ def test_update_service_data_retention(
def test_update_service_data_retention_return_validation_error_for_negative_days_of_retention(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
fake_uuid,
mock_get_service_data_retention,
mock_update_service_data_retention,
):
- response = logged_in_platform_admin_client.post(url_for('main.edit_data_retention',
- service_id=service_one['id'],
- data_retention_id=fake_uuid),
- data={'days_of_retention': -5}
- )
+ response = platform_admin_client.post(
+ url_for(
+ 'main.edit_data_retention',
+ service_id=service_one['id'],
+ data_retention_id=fake_uuid
+ ),
+ data={'days_of_retention': -5}
+ )
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
error_message = page.find('span', class_='error-message').text.strip()
@@ -4523,17 +4528,18 @@ def test_update_service_data_retention_return_validation_error_for_negative_days
def test_update_service_data_retention_populates_form(
- logged_in_platform_admin_client,
+ platform_admin_client,
service_one,
fake_uuid,
mock_get_service_data_retention,
):
mock_get_service_data_retention.return_value[0]['days_of_retention'] = 5
- response = logged_in_platform_admin_client.get(url_for('main.edit_data_retention',
- service_id=service_one['id'],
- data_retention_id=fake_uuid)
- )
+ response = platform_admin_client.get(url_for(
+ 'main.edit_data_retention',
+ service_id=service_one['id'],
+ data_retention_id=fake_uuid
+ ))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
assert page.find('input', attrs={'name': 'days_of_retention'})['value'] == '5'
diff --git a/tests/app/main/views/test_templates.py b/tests/app/main/views/test_templates.py
index 76ffda615..a708d4dd5 100644
--- a/tests/app/main/views/test_templates.py
+++ b/tests/app/main/views/test_templates.py
@@ -722,7 +722,7 @@ def test_should_let_letter_contact_block_be_changed_for_the_template(
def test_should_show_page_template_with_priority_select_if_platform_admin(
- logged_in_platform_admin_client,
+ platform_admin_client,
platform_admin_user,
mocker,
mock_get_service_template,
@@ -731,7 +731,7 @@ def test_should_show_page_template_with_priority_select_if_platform_admin(
):
mocker.patch('app.user_api_client.get_users_for_service', return_value=[platform_admin_user])
template_id = fake_uuid
- response = logged_in_platform_admin_client.get(url_for(
+ response = platform_admin_client.get(url_for(
'.edit_service_template',
service_id=service_one['id'],
template_id=template_id,
@@ -806,7 +806,7 @@ def test_dont_show_preview_letter_templates_for_bad_filetype(
])
def test_letter_branding_preview_image(
mocker,
- logged_in_platform_admin_client,
+ platform_admin_client,
original_filename,
new_filename,
):
@@ -814,7 +814,7 @@ def test_letter_branding_preview_image(
'app.main.views.templates.TemplatePreview.from_example_template',
return_value='foo'
)
- resp = logged_in_platform_admin_client.get(
+ resp = platform_admin_client.get(
url_for('.letter_branding_preview_image', filename=original_filename)
)
diff --git a/tests/conftest.py b/tests/conftest.py
index 0c485907e..dc89436b7 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -2835,7 +2835,7 @@ def logged_in_client(
@pytest.fixture(scope='function')
-def logged_in_platform_admin_client(
+def platform_admin_client(
client,
platform_admin_user,
mocker,