Merge pull request #3445 from alphagov/handle-org-domain-exists-error

Catch error when organisation domain already in use
This commit is contained in:
Chris Hill-Scott
2020-05-18 12:45:23 +01:00
committed by GitHub
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,