mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-06 14:48:24 -04:00
Merge pull request #2955 from alphagov/auto-nhs-org-type
Set org type to NHS if user has NHS email address
This commit is contained in:
@@ -48,7 +48,7 @@ def _create_example_template(service_id):
|
|||||||
@user_is_gov_user
|
@user_is_gov_user
|
||||||
def add_service():
|
def add_service():
|
||||||
form = CreateServiceForm(
|
form = CreateServiceForm(
|
||||||
organisation_type=current_user.default_organisation.organisation_type
|
organisation_type=current_user.default_organisation_type
|
||||||
)
|
)
|
||||||
heading = 'About your service'
|
heading = 'About your service'
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ def add_service():
|
|||||||
|
|
||||||
service_id, error = _create_service(
|
service_id, error = _create_service(
|
||||||
service_name,
|
service_name,
|
||||||
current_user.default_organisation.organisation_type or form.organisation_type.data,
|
current_user.default_organisation_type or form.organisation_type.data,
|
||||||
email_from,
|
email_from,
|
||||||
form,
|
form,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -205,6 +205,20 @@ class User(UserMixin):
|
|||||||
organisations_client.get_organisation_by_domain(self.email_domain)
|
organisations_client.get_organisation_by_domain(self.email_domain)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def default_organisation_type(self):
|
||||||
|
if self.default_organisation:
|
||||||
|
return self.default_organisation.organisation_type
|
||||||
|
if self.has_nhs_email_address:
|
||||||
|
return 'nhs'
|
||||||
|
return None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def has_nhs_email_address(self):
|
||||||
|
return self.email_address.lower().endswith((
|
||||||
|
'@nhs.uk', '.nhs.uk', '@nhs.net', '.nhs.net',
|
||||||
|
))
|
||||||
|
|
||||||
def serialize(self):
|
def serialize(self):
|
||||||
dct = {
|
dct = {
|
||||||
"id": self.id,
|
"id": self.id,
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
{{ textbox(form.name, hint="You can change this later") }}
|
{{ textbox(form.name, hint="You can change this later") }}
|
||||||
|
|
||||||
{% if not current_user.default_organisation.organisation_type %}
|
{% if not current_user.default_organisation_type %}
|
||||||
{{ radios(form.organisation_type) }}
|
{{ radios(form.organisation_type) }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from flask import session, url_for
|
|||||||
|
|
||||||
from app.utils import is_gov_user
|
from app.utils import is_gov_user
|
||||||
from tests import organisation_json
|
from tests import organisation_json
|
||||||
from tests.conftest import mock_get_organisation_by_domain
|
from tests.conftest import mock_get_organisation_by_domain, normalize_spaces
|
||||||
|
|
||||||
|
|
||||||
def test_non_gov_user_cannot_see_add_service_button(
|
def test_non_gov_user_cannot_see_add_service_button(
|
||||||
@@ -62,6 +62,11 @@ def test_get_should_not_render_radios_if_org_type_known(
|
|||||||
assert not page.select('.multiple-choice')
|
assert not page.select('.multiple-choice')
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('email_address', (
|
||||||
|
# User’s email address doesn’t matter when the organisation is known
|
||||||
|
'test@example.gov.uk',
|
||||||
|
'test@example.nhs.uk',
|
||||||
|
))
|
||||||
@pytest.mark.parametrize('inherited, posted, persisted, sms_limit', (
|
@pytest.mark.parametrize('inherited, posted, persisted, sms_limit', (
|
||||||
(None, 'central', 'central', 250000),
|
(None, 'central', 'central', 250000),
|
||||||
('central', None, 'central', 250000),
|
('central', None, 'central', 250000),
|
||||||
@@ -79,10 +84,13 @@ def test_should_add_service_and_redirect_to_tour_when_no_services(
|
|||||||
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,
|
||||||
inherited,
|
inherited,
|
||||||
|
email_address,
|
||||||
posted,
|
posted,
|
||||||
persisted,
|
persisted,
|
||||||
sms_limit,
|
sms_limit,
|
||||||
):
|
):
|
||||||
|
api_user_active.email_address = email_address
|
||||||
|
client_request.login(api_user_active)
|
||||||
mock_get_organisation_by_domain(mocker, organisation_type=inherited)
|
mock_get_organisation_by_domain(mocker, organisation_type=inherited)
|
||||||
client_request.post(
|
client_request.post(
|
||||||
'main.add_service',
|
'main.add_service',
|
||||||
@@ -120,6 +128,69 @@ def test_should_add_service_and_redirect_to_tour_when_no_services(
|
|||||||
mock_create_or_update_free_sms_fragment_limit.assert_called_once_with(101, sms_limit)
|
mock_create_or_update_free_sms_fragment_limit.assert_called_once_with(101, sms_limit)
|
||||||
|
|
||||||
|
|
||||||
|
def test_add_service_has_to_choose_org_type(
|
||||||
|
mocker,
|
||||||
|
client_request,
|
||||||
|
mock_create_service,
|
||||||
|
mock_create_service_template,
|
||||||
|
mock_get_services_with_no_services,
|
||||||
|
api_user_active,
|
||||||
|
mock_create_or_update_free_sms_fragment_limit,
|
||||||
|
mock_get_all_email_branding,
|
||||||
|
):
|
||||||
|
mocker.patch(
|
||||||
|
'app.organisations_client.get_organisation_by_domain',
|
||||||
|
return_value=None,
|
||||||
|
)
|
||||||
|
page = client_request.post(
|
||||||
|
'main.add_service',
|
||||||
|
_data={
|
||||||
|
'name': 'testing the post',
|
||||||
|
},
|
||||||
|
_expected_status=200,
|
||||||
|
)
|
||||||
|
assert normalize_spaces(page.select_one('.error-message').text) == (
|
||||||
|
'Not a valid choice'
|
||||||
|
)
|
||||||
|
assert mock_create_service.called is False
|
||||||
|
assert mock_create_service_template.called is False
|
||||||
|
assert mock_create_or_update_free_sms_fragment_limit.called is False
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('email_address', (
|
||||||
|
'test@nhs.net',
|
||||||
|
'test@nhs.uk',
|
||||||
|
'test@example.NhS.uK',
|
||||||
|
'test@EXAMPLE.NHS.NET',
|
||||||
|
pytest.param(
|
||||||
|
'test@not-nhs.uk',
|
||||||
|
marks=pytest.mark.xfail(raises=AssertionError)
|
||||||
|
)
|
||||||
|
))
|
||||||
|
def test_add_service_guesses_org_type_for_unknown_nhs_orgs(
|
||||||
|
mocker,
|
||||||
|
client_request,
|
||||||
|
mock_create_service,
|
||||||
|
mock_create_service_template,
|
||||||
|
mock_get_services_with_no_services,
|
||||||
|
api_user_active,
|
||||||
|
mock_create_or_update_free_sms_fragment_limit,
|
||||||
|
mock_get_all_email_branding,
|
||||||
|
email_address,
|
||||||
|
):
|
||||||
|
api_user_active.email_address = email_address
|
||||||
|
client_request.login(api_user_active)
|
||||||
|
mocker.patch(
|
||||||
|
'app.organisations_client.get_organisation_by_domain',
|
||||||
|
return_value=None,
|
||||||
|
)
|
||||||
|
client_request.post(
|
||||||
|
'main.add_service',
|
||||||
|
_data={'name': 'example'},
|
||||||
|
)
|
||||||
|
assert mock_create_service.call_args[1]['organisation_type'] == 'nhs'
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('organisation_type, free_allowance', [
|
@pytest.mark.parametrize('organisation_type, free_allowance', [
|
||||||
('central', 250 * 1000),
|
('central', 250 * 1000),
|
||||||
('local', 25 * 1000),
|
('local', 25 * 1000),
|
||||||
|
|||||||
Reference in New Issue
Block a user