diff --git a/app/main/views/find_users.py b/app/main/views/find_users.py
index 80135d9b0..96992df19 100644
--- a/app/main/views/find_users.py
+++ b/app/main/views/find_users.py
@@ -1,16 +1,22 @@
from flask import abort, render_template, request, url_for
from flask_login import login_required
+from app import user_api_client
from app.main import main
from app.utils import user_is_platform_admin
from app.main.forms import SearchUsersForm
-@main.route("/find-users-by-email", methods=['GET'])
+@main.route("/find-users-by-email", methods=['GET', 'POST'])
@login_required
@user_is_platform_admin
def find_users_by_email():
+ form = SearchUsersForm()
+ users_found = None
+ if form.validate_on_submit():
+ users_found = user_api_client.find_users_by_full_or_partial_email(form.search.data)['data']
return render_template(
'views/find-users/find-users-by-email.html',
- form=SearchUsersForm(),
+ form=form,
+ users_found=users_found
)
diff --git a/app/notify_client/user_api_client.py b/app/notify_client/user_api_client.py
index c0e3a28ef..02b9bfd5b 100644
--- a/app/notify_client/user_api_client.py
+++ b/app/notify_client/user_api_client.py
@@ -179,6 +179,12 @@ class UserApiClient(NotifyAdminAPIClient):
data = {'email': email_address}
self.post(endpoint, data=data)
+ def find_users_by_full_or_partial_email(self, email_address):
+ endpoint = '/user/find-users-by-email'
+ data = {'email': email_address}
+ users = self.post(endpoint, data=data)
+ return users
+
def is_email_already_in_use(self, email_address):
if self.get_user_by_email_or_none(email_address):
return True
diff --git a/app/templates/views/find-users/find-users-by-email.html b/app/templates/views/find-users/find-users-by-email.html
index 650b5cdde..1ff768d0f 100644
--- a/app/templates/views/find-users/find-users-by-email.html
+++ b/app/templates/views/find-users/find-users-by-email.html
@@ -24,7 +24,7 @@
{{ textbox(
form.search,
width='1-1',
- label='Find users by e-mail'
+ label='Find users by e-mail, or by partial e-mail'
) }}
@@ -37,4 +37,19 @@
+ {% if users_found %}
+
+ {% elif users_found == [] %}
+
No users found.
+ {% endif %}
{% endblock %}
diff --git a/tests/app/main/views/test_find_users.py b/tests/app/main/views/test_find_users.py
index 0f061a53e..eddc35557 100644
--- a/tests/app/main/views/test_find_users.py
+++ b/tests/app/main/views/test_find_users.py
@@ -3,6 +3,7 @@ from flask import url_for
from lxml import html
from app.main.views.find_users import find_users_by_email
+from tests import user_json
from tests.conftest import mock_get_user
def test_find_users_by_email_page_loads_correctly(
@@ -11,14 +12,40 @@ def test_find_users_by_email_page_loads_correctly(
mocker
):
mock_get_user(mocker, user=platform_admin_user)
- client.login(platform_admin_user)
-
client.login(platform_admin_user)
response = client.get(url_for('main.find_users_by_email'))
-
assert response.status_code == 200
document = html.fromstring(response.get_data(as_text=True))
header = document.xpath('//h1')[0].text
assert "Find users by e-mail" in header
assert len(document.xpath("//input[@type='search']")) > 0
+
+
+def test_find_users_by_email_displays_users_found(
+ client,
+ platform_admin_user,
+ mocker
+):
+ mock_get_user(mocker, user=platform_admin_user)
+ client.login(platform_admin_user)
+ mocker.patch('app.user_api_client.find_users_by_full_or_partial_email', return_value={"data": [user_json()]}, autospec=True)
+ response = client.post(url_for('main.find_users_by_email', data=[{"email": "twilight.sparkle"}]))
+ assert response.status_code == 200
+
+ document = html.fromstring(response.get_data(as_text=True))
+ assert "Test User" in document.text_content()
+
+def test_find_users_by_email_displays_message_if_no_users_found(
+ client,
+ platform_admin_user,
+ mocker
+):
+ mock_get_user(mocker, user=platform_admin_user)
+ client.login(platform_admin_user)
+ mocker.patch('app.user_api_client.find_users_by_full_or_partial_email', return_value={"data": []}, autospec=True)
+ response = client.post(url_for('main.find_users_by_email', data=[{"email": "twilight.sparkle"}]))
+ assert response.status_code == 200
+
+ document = html.fromstring(response.get_data(as_text=True))
+ assert "No users found." in document.text_content()