From bac54462db7bf10e694440b639353163bc33c104 Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Fri, 5 Mar 2021 15:03:23 +0000 Subject: [PATCH] Change config structure so allowances are dated MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We’re going to have different allowances next financial year. This means that when someone adds a service, we’ll need to check which year it is, so we can give them the right allowance. This commit changes the config structure so that the current allowances are explicitly assigned to the 2020/21 financial year. It freezes the tests to the 2020/21 financial year, so they won’t start failing automatically when next financial year comes around. --- app/config.py | 32 ++++++++++++++++++------ app/main/views/add_service.py | 14 +++++++++-- tests/app/main/views/test_add_service.py | 25 ++++++++++++------ 3 files changed, 53 insertions(+), 18 deletions(-) diff --git a/app/config.py b/app/config.py index aa3ecb4e7..fbef50457 100644 --- a/app/config.py +++ b/app/config.py @@ -33,14 +33,30 @@ class Config(object): AWS_REGION = 'eu-west-1' DEFAULT_SERVICE_LIMIT = 50 DEFAULT_FREE_SMS_FRAGMENT_LIMITS = { - 'central': 250000, - 'local': 25000, - 'nhs_central': 250000, - 'nhs_local': 25000, - 'nhs_gp': 25000, - 'emergency_service': 25000, - 'school_or_college': 25000, - 'other': 25000, + 'central': { + 2020: 250000, + }, + 'local': { + 2020: 25000, + }, + 'nhs_central': { + 2020: 250000, + }, + 'nhs_local': { + 2020: 25000, + }, + 'nhs_gp': { + 2020: 25000, + }, + 'emergency_service': { + 2020: 25000, + }, + 'school_or_college': { + 2020: 25000, + }, + 'other': { + 2020: 25000, + }, } EMAIL_EXPIRY_SECONDS = 3600 # 1 hour INVITATION_EXPIRY_SECONDS = 3600 * 24 * 2 # 2 days - also set on api diff --git a/app/main/views/add_service.py b/app/main/views/add_service.py index 62337f2a1..975279667 100644 --- a/app/main/views/add_service.py +++ b/app/main/views/add_service.py @@ -6,11 +6,21 @@ from app import billing_api_client, service_api_client from app.formatters import email_safe from app.main import main from app.main.forms import CreateNhsServiceForm, CreateServiceForm -from app.utils import user_is_gov_user, user_is_logged_in +from app.utils import ( + get_current_financial_year, + user_is_gov_user, + user_is_logged_in, +) def _create_service(service_name, organisation_type, email_from, form): - free_sms_fragment_limit = current_app.config['DEFAULT_FREE_SMS_FRAGMENT_LIMITS'].get(organisation_type) + free_sms_fragment_limit = current_app.config[ + 'DEFAULT_FREE_SMS_FRAGMENT_LIMITS' + ][ + organisation_type + ][ + get_current_financial_year() + ] try: service_id = service_api_client.create_service( diff --git a/tests/app/main/views/test_add_service.py b/tests/app/main/views/test_add_service.py index 11ef3dc0a..bed1c687b 100644 --- a/tests/app/main/views/test_add_service.py +++ b/tests/app/main/views/test_add_service.py @@ -1,5 +1,6 @@ import pytest from flask import session, url_for +from freezegun import freeze_time from notifications_python_client.errors import HTTPError from app.utils import is_gov_user @@ -116,6 +117,7 @@ def test_show_different_page_if_user_org_type_is_local( ('other', None, 'other', 25000), ('central', 'local', 'central', 250000), )) +@freeze_time("2021-01-01") def test_should_add_service_and_redirect_to_tour_when_no_services( mocker, client_request, @@ -239,14 +241,14 @@ def test_get_should_only_show_nhs_org_types_radios_if_user_has_nhs_email( ] -@pytest.mark.parametrize('organisation_type, free_allowance', [ - ('central', 250 * 1000), - ('local', 25 * 1000), - ('nhs_central', 250 * 1000), - ('nhs_local', 25 * 1000), - ('school_or_college', 25 * 1000), - ('emergency_service', 25 * 1000), - ('other', 25 * 1000), +@pytest.mark.parametrize('financial_year, organisation_type, free_allowance', [ + (2020, 'central', 250 * 1000), + (2020, 'local', 25 * 1000), + (2020, 'nhs_central', 250 * 1000), + (2020, 'nhs_local', 25 * 1000), + (2020, 'school_or_college', 25 * 1000), + (2020, 'emergency_service', 25 * 1000), + (2020, 'other', 25 * 1000), ]) def test_should_add_service_and_redirect_to_dashboard_when_existing_service( app_, @@ -261,7 +263,13 @@ def test_should_add_service_and_redirect_to_dashboard_when_existing_service( free_allowance, mock_create_or_update_free_sms_fragment_limit, mock_get_all_email_branding, + financial_year, ): + mocker.patch( + 'app.main.views.add_service.get_current_financial_year', + return_value=financial_year, + ) + client_request.post( 'main.add_service', _data={ @@ -308,6 +316,7 @@ def test_add_service_fails_if_service_name_fails_validation( assert error_message in page.find("span", {"class": "govuk-error-message"}).text +@freeze_time("2021-01-01") def test_should_return_form_errors_with_duplicate_service_name_regardless_of_case( client_request, mock_get_organisation_by_domain,