Catch error when organisation domain already in use

Up till now, when adding new organisation domain, if it was already
in use, we didn't handle the 400 we got back from API. This PR
adds handling for that error.
This commit is contained in:
Pea Tyczynska
2020-05-15 17:50:30 +01:00
parent 9927537d60
commit adcd798d88
2 changed files with 51 additions and 8 deletions

View File

@@ -448,13 +448,24 @@ def edit_organisation_domains(org_id):
form = OrganisationDomainsForm()
if form.validate_on_submit():
organisations_client.update_organisation(
org_id,
domains=list(OrderedDict.fromkeys(
domain.lower()
for domain in filter(None, form.domains.data)
)),
)
try:
organisations_client.update_organisation(
org_id,
domains=list(OrderedDict.fromkeys(
domain.lower()
for domain in filter(None, form.domains.data)
)),
)
except HTTPError as e:
error_message = "Domain already exists"
if e.status_code == 400 and error_message in e.message:
flash("This domain is already in use", "error")
return render_template(
'views/organisations/organisation/settings/edit-domains.html',
form=form,
)
else:
raise e
return redirect(url_for('.organisation_settings', org_id=org_id))
form.populate(current_organisation.domains)
@@ -483,7 +494,7 @@ def confirm_edit_organisation_name(org_id):
except HTTPError as e:
error_msg = "Organisation name already exists"
if e.status_code == 400 and error_msg in e.message:
# Redirect the user back to the change service name screen
# Redirect the user back to the change organisation name screen
flash('This organisation name is already in use', 'error')
return redirect(url_for('main.edit_organisation_name', org_id=org_id))
else:

View File

@@ -991,6 +991,38 @@ def test_update_organisation_domains(
)
def test_update_organisation_domains_when_domain_already_exists(
mocker,
client_request,
fake_uuid,
organisation_one,
mock_get_organisation,
):
user = create_platform_admin_user()
client_request.login(user)
mocker.patch('app.organisations_client.update_organisation', side_effect=HTTPError(
response=Mock(
status_code=400,
json={'result': 'error', 'message': 'Domain already exists'}
),
message="Domain already exists")
)
response = client_request.post(
'main.edit_organisation_domains',
org_id=ORGANISATION_ID,
_data={
'domains': [
'example.gov.uk',
]
},
_expected_status=200,
)
assert response.find("div", class_="banner-dangerous").text.strip() == "This domain is already in use"
def test_update_organisation_name(
platform_admin_client,
organisation_one,