mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-06 02:38:24 -04:00
Merge pull request #3826 from alphagov/add-new-rates-for-2021-financial-year
Add new free allowance rates for 2021 financial year
This commit is contained in:
@@ -33,14 +33,38 @@ class Config(object):
|
|||||||
AWS_REGION = 'eu-west-1'
|
AWS_REGION = 'eu-west-1'
|
||||||
DEFAULT_SERVICE_LIMIT = 50
|
DEFAULT_SERVICE_LIMIT = 50
|
||||||
DEFAULT_FREE_SMS_FRAGMENT_LIMITS = {
|
DEFAULT_FREE_SMS_FRAGMENT_LIMITS = {
|
||||||
'central': 250000,
|
'central': {
|
||||||
'local': 25000,
|
2020: 250_000,
|
||||||
'nhs_central': 250000,
|
2021: 150_000,
|
||||||
'nhs_local': 25000,
|
},
|
||||||
'nhs_gp': 25000,
|
'local': {
|
||||||
'emergency_service': 25000,
|
2020: 25_000,
|
||||||
'school_or_college': 25000,
|
2021: 25_000,
|
||||||
'other': 25000,
|
},
|
||||||
|
'nhs_central': {
|
||||||
|
2020: 250_000,
|
||||||
|
2021: 150_000,
|
||||||
|
},
|
||||||
|
'nhs_local': {
|
||||||
|
2020: 25_000,
|
||||||
|
2021: 25_000,
|
||||||
|
},
|
||||||
|
'nhs_gp': {
|
||||||
|
2020: 25_000,
|
||||||
|
2021: 10_000,
|
||||||
|
},
|
||||||
|
'emergency_service': {
|
||||||
|
2020: 25_000,
|
||||||
|
2021: 25_000,
|
||||||
|
},
|
||||||
|
'school_or_college': {
|
||||||
|
2020: 25_000,
|
||||||
|
2021: 10_000,
|
||||||
|
},
|
||||||
|
'other': {
|
||||||
|
2020: 25_000,
|
||||||
|
2021: 10_000,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
EMAIL_EXPIRY_SECONDS = 3600 # 1 hour
|
EMAIL_EXPIRY_SECONDS = 3600 # 1 hour
|
||||||
INVITATION_EXPIRY_SECONDS = 3600 * 24 * 2 # 2 days - also set on api
|
INVITATION_EXPIRY_SECONDS = 3600 * 24 * 2 # 2 days - also set on api
|
||||||
|
|||||||
@@ -6,11 +6,21 @@ from app import billing_api_client, service_api_client
|
|||||||
from app.formatters import email_safe
|
from app.formatters import email_safe
|
||||||
from app.main import main
|
from app.main import main
|
||||||
from app.main.forms import CreateNhsServiceForm, CreateServiceForm
|
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):
|
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:
|
try:
|
||||||
service_id = service_api_client.create_service(
|
service_id = service_api_client.create_service(
|
||||||
|
|||||||
@@ -334,7 +334,9 @@ def get_template(
|
|||||||
|
|
||||||
|
|
||||||
def get_current_financial_year():
|
def get_current_financial_year():
|
||||||
now = datetime.utcnow()
|
now = utc_string_to_aware_gmt_datetime(
|
||||||
|
datetime.utcnow()
|
||||||
|
)
|
||||||
current_month = int(now.strftime('%-m'))
|
current_month = int(now.strftime('%-m'))
|
||||||
current_year = int(now.strftime('%Y'))
|
current_year = int(now.strftime('%Y'))
|
||||||
return current_year if current_month > 3 else current_year - 1
|
return current_year if current_month > 3 else current_year - 1
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import pytest
|
import pytest
|
||||||
from flask import session, url_for
|
from flask import session, url_for
|
||||||
|
from freezegun import freeze_time
|
||||||
from notifications_python_client.errors import HTTPError
|
from notifications_python_client.errors import HTTPError
|
||||||
|
|
||||||
from app.utils import is_gov_user
|
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),
|
('other', None, 'other', 25000),
|
||||||
('central', 'local', 'central', 250000),
|
('central', 'local', 'central', 250000),
|
||||||
))
|
))
|
||||||
|
@freeze_time("2021-01-01")
|
||||||
def test_should_add_service_and_redirect_to_tour_when_no_services(
|
def test_should_add_service_and_redirect_to_tour_when_no_services(
|
||||||
mocker,
|
mocker,
|
||||||
client_request,
|
client_request,
|
||||||
@@ -239,14 +241,24 @@ def test_get_should_only_show_nhs_org_types_radios_if_user_has_nhs_email(
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('organisation_type, free_allowance', [
|
@pytest.mark.parametrize('financial_year, organisation_type, free_allowance', [
|
||||||
('central', 250 * 1000),
|
(2020, 'central', 250_000),
|
||||||
('local', 25 * 1000),
|
(2020, 'local', 25_000),
|
||||||
('nhs_central', 250 * 1000),
|
(2020, 'nhs_central', 250_000),
|
||||||
('nhs_local', 25 * 1000),
|
(2020, 'nhs_local', 25_000),
|
||||||
('school_or_college', 25 * 1000),
|
(2020, 'nhs_gp', 25_000),
|
||||||
('emergency_service', 25 * 1000),
|
(2020, 'school_or_college', 25_000),
|
||||||
('other', 25 * 1000),
|
(2020, 'emergency_service', 25_000),
|
||||||
|
(2020, 'other', 25_000),
|
||||||
|
|
||||||
|
(2021, 'central', 150_000),
|
||||||
|
(2021, 'local', 25_000),
|
||||||
|
(2021, 'nhs_central', 150_000),
|
||||||
|
(2021, 'nhs_local', 25_000),
|
||||||
|
(2021, 'nhs_gp', 10_000),
|
||||||
|
(2021, 'school_or_college', 10_000),
|
||||||
|
(2021, 'emergency_service', 25_000),
|
||||||
|
(2021, 'other', 10_000),
|
||||||
])
|
])
|
||||||
def test_should_add_service_and_redirect_to_dashboard_when_existing_service(
|
def test_should_add_service_and_redirect_to_dashboard_when_existing_service(
|
||||||
app_,
|
app_,
|
||||||
@@ -261,7 +273,13 @@ def test_should_add_service_and_redirect_to_dashboard_when_existing_service(
|
|||||||
free_allowance,
|
free_allowance,
|
||||||
mock_create_or_update_free_sms_fragment_limit,
|
mock_create_or_update_free_sms_fragment_limit,
|
||||||
mock_get_all_email_branding,
|
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(
|
client_request.post(
|
||||||
'main.add_service',
|
'main.add_service',
|
||||||
_data={
|
_data={
|
||||||
@@ -308,6 +326,7 @@ def test_add_service_fails_if_service_name_fails_validation(
|
|||||||
assert error_message in page.find("span", {"class": "govuk-error-message"}).text
|
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(
|
def test_should_return_form_errors_with_duplicate_service_name_regardless_of_case(
|
||||||
client_request,
|
client_request,
|
||||||
mock_get_organisation_by_domain,
|
mock_get_organisation_by_domain,
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ from app.utils import (
|
|||||||
generate_next_dict,
|
generate_next_dict,
|
||||||
generate_notifications_csv,
|
generate_notifications_csv,
|
||||||
generate_previous_dict,
|
generate_previous_dict,
|
||||||
|
get_current_financial_year,
|
||||||
get_letter_printing_statement,
|
get_letter_printing_statement,
|
||||||
get_letter_validation_error,
|
get_letter_validation_error,
|
||||||
get_logo_cdn_domain,
|
get_logo_cdn_domain,
|
||||||
@@ -657,3 +658,14 @@ def test_merge_jsonlike_merges_jsonlike_objects_correctly(source_object, destina
|
|||||||
))
|
))
|
||||||
def test_round_to_significant_figures(value, significant_figures, expected_result):
|
def test_round_to_significant_figures(value, significant_figures, expected_result):
|
||||||
assert round_to_significant_figures(value, significant_figures) == expected_result
|
assert round_to_significant_figures(value, significant_figures) == expected_result
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('datetime_string, financial_year', (
|
||||||
|
('2021-01-01T00:00:00+00:00', 2020), # Start of 2021
|
||||||
|
('2021-03-31T22:59:59+00:00', 2020), # One minute before midnight (BST)
|
||||||
|
('2021-03-31T23:00:00+00:00', 2021), # Midnight (BST)
|
||||||
|
('2021-12-12T12:12:12+01:00', 2021), # Later in the year
|
||||||
|
))
|
||||||
|
def test_get_financial_year(datetime_string, financial_year):
|
||||||
|
with freeze_time(datetime_string):
|
||||||
|
assert get_current_financial_year() == financial_year
|
||||||
|
|||||||
Reference in New Issue
Block a user