mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-11 02:23:19 -04:00
Support service IDs in ‘find services by name’
Sometimes we get a service ID from a support ticket or a Slack discussion. Rather than having to hack the URL, this PR augments the ‘Find services by name’ page to support service IDs. If a UUID is entered, it assumes that it’s been given a service ID, and redirects straight to the dashboard for that service, without showing any search results (a complete UUID would never match multiple services). If the UUID is not a service ID, the user will get a 404.
This commit is contained in:
@@ -1,4 +1,7 @@
|
|||||||
from flask import render_template
|
import uuid
|
||||||
|
from contextlib import suppress
|
||||||
|
|
||||||
|
from flask import redirect, render_template, url_for
|
||||||
|
|
||||||
from app import service_api_client
|
from app import service_api_client
|
||||||
from app.main import main
|
from app.main import main
|
||||||
@@ -12,6 +15,11 @@ def find_services_by_name():
|
|||||||
form = SearchByNameForm()
|
form = SearchByNameForm()
|
||||||
services_found = None
|
services_found = None
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
|
with suppress(ValueError):
|
||||||
|
return redirect(url_for(
|
||||||
|
'main.service_dashboard',
|
||||||
|
service_id=uuid.UUID(form.search.data)
|
||||||
|
))
|
||||||
services_found = service_api_client.find_services_by_name(service_name=form.search.data)['data']
|
services_found = service_api_client.find_services_by_name(service_name=form.search.data)['data']
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/find-services/find-services-by-name.html',
|
'views/find-services/find-services-by-name.html',
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
) %}
|
) %}
|
||||||
<div class="govuk-grid-column-three-quarters">
|
<div class="govuk-grid-column-three-quarters">
|
||||||
{{ form.search(param_extensions={
|
{{ form.search(param_extensions={
|
||||||
"label": {"text": "Find services by name, or by partial name"}
|
"label": {"text": "Find services by name, partial name, or service ID"}
|
||||||
}) }}
|
}) }}
|
||||||
</div>
|
</div>
|
||||||
<div class="govuk-grid-column-one-quarter">
|
<div class="govuk-grid-column-one-quarter">
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
from flask import url_for
|
||||||
|
|
||||||
from tests import service_json
|
from tests import service_json
|
||||||
|
|
||||||
|
|
||||||
@@ -71,3 +73,21 @@ def test_find_services_by_name_validates_against_empty_search_submission(
|
|||||||
|
|
||||||
expected_message = "Error: You need to enter full or partial name to search by."
|
expected_message = "Error: You need to enter full or partial name to search by."
|
||||||
assert document.find('span', {'class': 'govuk-error-message'}).text.strip() == expected_message
|
assert document.find('span', {'class': 'govuk-error-message'}).text.strip() == expected_message
|
||||||
|
|
||||||
|
|
||||||
|
def test_find_services_by_name_redirects_for_uuid(
|
||||||
|
client_request,
|
||||||
|
platform_admin_user,
|
||||||
|
mocker,
|
||||||
|
fake_uuid
|
||||||
|
):
|
||||||
|
client_request.login(platform_admin_user)
|
||||||
|
client_request.post(
|
||||||
|
'main.find_services_by_name',
|
||||||
|
_data={"search": fake_uuid},
|
||||||
|
_expected_redirect=url_for(
|
||||||
|
'main.service_dashboard',
|
||||||
|
service_id=fake_uuid,
|
||||||
|
_external=True,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user