mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-24 08:16:51 -04:00
find_users_by_email view calls API and feeds results to template
Template then displays the results. Page displays a message if no results found
This commit is contained in:
@@ -1,16 +1,22 @@
|
|||||||
from flask import abort, render_template, request, url_for
|
from flask import abort, render_template, request, url_for
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
|
|
||||||
|
from app import user_api_client
|
||||||
from app.main import main
|
from app.main import main
|
||||||
from app.utils import user_is_platform_admin
|
from app.utils import user_is_platform_admin
|
||||||
from app.main.forms import SearchUsersForm
|
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
|
@login_required
|
||||||
@user_is_platform_admin
|
@user_is_platform_admin
|
||||||
def find_users_by_email():
|
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(
|
return render_template(
|
||||||
'views/find-users/find-users-by-email.html',
|
'views/find-users/find-users-by-email.html',
|
||||||
form=SearchUsersForm(),
|
form=form,
|
||||||
|
users_found=users_found
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -179,6 +179,12 @@ class UserApiClient(NotifyAdminAPIClient):
|
|||||||
data = {'email': email_address}
|
data = {'email': email_address}
|
||||||
self.post(endpoint, data=data)
|
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):
|
def is_email_already_in_use(self, email_address):
|
||||||
if self.get_user_by_email_or_none(email_address):
|
if self.get_user_by_email_or_none(email_address):
|
||||||
return True
|
return True
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
{{ textbox(
|
{{ textbox(
|
||||||
form.search,
|
form.search,
|
||||||
width='1-1',
|
width='1-1',
|
||||||
label='Find users by e-mail'
|
label='Find users by e-mail, or by partial e-mail'
|
||||||
) }}
|
) }}
|
||||||
</div>
|
</div>
|
||||||
<div class="column-one-quarter align-button-with-textbox">
|
<div class="column-one-quarter align-button-with-textbox">
|
||||||
@@ -37,4 +37,19 @@
|
|||||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
|
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
{% if users_found %}
|
||||||
|
<nav class="browse-list">
|
||||||
|
<ul>
|
||||||
|
{% for user in users_found %}
|
||||||
|
<li class="browse-list-item">
|
||||||
|
<a href="#" class="browse-list-link">{{ user.email_address }}</a>
|
||||||
|
<p class="browse-list-sub-item">{{ user.name }}</p>
|
||||||
|
</li>
|
||||||
|
<hr>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
{% elif users_found == [] %}
|
||||||
|
<p>No users found.</p>
|
||||||
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ from flask import url_for
|
|||||||
from lxml import html
|
from lxml import html
|
||||||
from app.main.views.find_users import find_users_by_email
|
from app.main.views.find_users import find_users_by_email
|
||||||
|
|
||||||
|
from tests import user_json
|
||||||
from tests.conftest import mock_get_user
|
from tests.conftest import mock_get_user
|
||||||
|
|
||||||
def test_find_users_by_email_page_loads_correctly(
|
def test_find_users_by_email_page_loads_correctly(
|
||||||
@@ -11,14 +12,40 @@ def test_find_users_by_email_page_loads_correctly(
|
|||||||
mocker
|
mocker
|
||||||
):
|
):
|
||||||
mock_get_user(mocker, user=platform_admin_user)
|
mock_get_user(mocker, user=platform_admin_user)
|
||||||
client.login(platform_admin_user)
|
|
||||||
|
|
||||||
client.login(platform_admin_user)
|
client.login(platform_admin_user)
|
||||||
response = client.get(url_for('main.find_users_by_email'))
|
response = client.get(url_for('main.find_users_by_email'))
|
||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
|
|
||||||
document = html.fromstring(response.get_data(as_text=True))
|
document = html.fromstring(response.get_data(as_text=True))
|
||||||
header = document.xpath('//h1')[0].text
|
header = document.xpath('//h1')[0].text
|
||||||
assert "Find users by e-mail" in header
|
assert "Find users by e-mail" in header
|
||||||
assert len(document.xpath("//input[@type='search']")) > 0
|
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()
|
||||||
|
|||||||
Reference in New Issue
Block a user