updated pytest

This commit is contained in:
Beverly Nguyen
2024-02-08 18:43:17 -08:00
parent fbf902e168
commit b019dc3fe9
9 changed files with 102 additions and 64 deletions

View File

@@ -48,7 +48,7 @@
} }
} }
.sms-message-sender { .sms-message-sender, .sms-message-file-name, .sms-message-scheduler {
margin: units(1) 0 0; margin: units(1) 0 0;
} }

View File

@@ -535,7 +535,10 @@ def _check_messages(service_id, template_id, upload_id, preview_row):
"main.send_messages", service_id=service_id, template_id=template.id "main.send_messages", service_id=service_id, template_id=template.id
) )
back_link_from_preview = url_for( back_link_from_preview = url_for(
"main.check_messages", service_id=service_id, template_id=template.id, upload_id=upload_id "main.check_messages",
service_id=service_id,
template_id=template.id,
upload_id=upload_id,
) )
choose_time_form = ChooseTimeForm() choose_time_form = ChooseTimeForm()
@@ -570,7 +573,7 @@ def _check_messages(service_id, template_id, upload_id, preview_row):
sent_previously=job_api_client.has_sent_previously( sent_previously=job_api_client.has_sent_previously(
service_id, template.id, db_template["version"], original_file_name service_id, template.id, db_template["version"], original_file_name
), ),
template_id=template_id template_id=template_id,
) )
@@ -614,17 +617,20 @@ def check_messages(service_id, template_id, upload_id, row_index=2):
metadata_kwargs["sender_id"] = session["sender_id"] metadata_kwargs["sender_id"] = session["sender_id"]
set_metadata_on_csv_upload(service_id, upload_id, **metadata_kwargs) set_metadata_on_csv_upload(service_id, upload_id, **metadata_kwargs)
session['scheduled_for'] = request.form.get("scheduled_for", "")
return render_template("views/check/ok.html", **data) return render_template("views/check/ok.html", **data)
@main.route( @main.route(
"/services/<uuid:service_id>/<uuid:template_id>/check/<uuid:upload_id>/preview", "/services/<uuid:service_id>/<uuid:template_id>/check/<uuid:upload_id>/preview",
methods=["POST"], methods=["GET"],
)
@main.route(
"/services/<uuid:service_id>/<uuid:template_id>/check/<uuid:upload_id>/preview/row-<int:row_index>",
methods=["GET"],
) )
@user_has_permissions("send_messages", restrict_admin_usage=True) @user_has_permissions("send_messages", restrict_admin_usage=True)
def preview_job(service_id, template_id, upload_id, row_index=2): def preview_job(service_id, template_id, upload_id, row_index=2):
session['scheduled_for'] = request.form.get('scheduled_for', 'Not specified') session["scheduled_for"] = request.args.get("scheduled_for", "")
data = _check_messages(service_id, template_id, upload_id, row_index) data = _check_messages(service_id, template_id, upload_id, row_index)
data["allowed_file_extensions"] = Spreadsheet.ALLOWED_FILE_EXTENSIONS data["allowed_file_extensions"] = Spreadsheet.ALLOWED_FILE_EXTENSIONS
if ( if (
@@ -643,13 +649,15 @@ def preview_job(service_id, template_id, upload_id, row_index=2):
if data["errors"]: if data["errors"]:
return render_template("views/check/column-errors.html", **data) return render_template("views/check/column-errors.html", **data)
return render_template('views/check/preview.html', scheduled_for=session['scheduled_for'], **data) return render_template(
"views/check/preview.html", scheduled_for=session["scheduled_for"], **data
)
@main.route("/services/<uuid:service_id>/start-job/<uuid:upload_id>", methods=["POST"]) @main.route("/services/<uuid:service_id>/start-job/<uuid:upload_id>", methods=["POST"])
@user_has_permissions("send_messages", restrict_admin_usage=True) @user_has_permissions("send_messages", restrict_admin_usage=True)
def start_job(service_id, upload_id): def start_job(service_id, upload_id):
scheduled_for = session.pop('scheduled_for', None) scheduled_for = session.pop("scheduled_for", None)
job_api_client.create_job( job_api_client.create_job(
upload_id, upload_id,
service_id, service_id,
@@ -712,7 +720,13 @@ def get_send_test_page_title(template_type, entering_recipient, name=None):
return "Personalize this message" return "Personalize this message"
def get_back_link(service_id, template, step_index, placeholders=None, preview=False,): def get_back_link(
service_id,
template,
step_index,
placeholders=None,
preview=False,
):
if preview: if preview:
return url_for( return url_for(
"main.check_notification", "main.check_notification",
@@ -824,7 +838,9 @@ def _check_notification(service_id, template_id, exception=None):
back_link = get_back_link(service_id, template, len(placeholders), placeholders) back_link = get_back_link(service_id, template, len(placeholders), placeholders)
back_link_from_preview = get_back_link(service_id, template, len(placeholders), placeholders, preview=True) back_link_from_preview = get_back_link(
service_id, template, len(placeholders), placeholders, preview=True
)
choose_time_form = ChooseTimeForm() choose_time_form = ChooseTimeForm()
@@ -873,7 +889,7 @@ def get_template_error_dict(exception):
@main.route( @main.route(
"/services/<uuid:service_id>/template/<uuid:template_id>/notification/check/preview", "/services/<uuid:service_id>/template/<uuid:template_id>/notification/check/preview",
methods=["POST"], methods=["GET"],
) )
@user_has_permissions("send_messages", restrict_admin_usage=True) @user_has_permissions("send_messages", restrict_admin_usage=True)
def preview_notification(service_id, template_id): def preview_notification(service_id, template_id):
@@ -887,11 +903,12 @@ def preview_notification(service_id, template_id):
) )
) )
session['scheduled_for'] = request.form.get('scheduled_for', 'Not specified') session["scheduled_for"] = request.args.get("scheduled_for", "")
return render_template( return render_template(
"views/notifications/preview.html", "views/notifications/preview.html",
**_check_notification(service_id, template_id), data=session['scheduled_for'] **_check_notification(service_id, template_id),
scheduled_for=session["scheduled_for"],
) )
@@ -901,7 +918,7 @@ def preview_notification(service_id, template_id):
) )
@user_has_permissions("send_messages", restrict_admin_usage=True) @user_has_permissions("send_messages", restrict_admin_usage=True)
def send_notification(service_id, template_id): def send_notification(service_id, template_id):
scheduled_for = session.pop('scheduled_for', None) scheduled_for = session.pop("scheduled_for", "")
recipient = get_recipient() recipient = get_recipient()
if not recipient: if not recipient:
return redirect( return redirect(

View File

@@ -1,6 +1,5 @@
{% extends "withnav_template.html" %} {% extends "withnav_template.html" %}
{% from "components/banner.html" import banner_wrapper %} {% from "components/banner.html" import banner_wrapper %}
{% from "components/table.html" import list_table, field, text_field, index_field, hidden_field_heading %}
{% from "components/page-header.html" import page_header %} {% from "components/page-header.html" import page_header %}
{% from "components/components/button/macro.njk" import usaButton %} {% from "components/components/button/macro.njk" import usaButton %}
{% from "components/components/skip-link/macro.njk" import usaSkipLink %} {% from "components/components/skip-link/macro.njk" import usaSkipLink %}
@@ -9,7 +8,7 @@
{% set file_contents_header_id = 'file-preview' %} {% set file_contents_header_id = 'file-preview' %}
{% block service_page_title %} {% block service_page_title %}
{{ "Preview of {}".format(template.name) }} {{ "Select delivery time" }}
{% endblock %} {% endblock %}
@@ -23,8 +22,7 @@
{{ template|string }} {{ template|string }}
<div class="bottom-gutter-3-2"> <div class="bottom-gutter-3-2">
<form method="post" enctype="multipart/form-data" action="{{url_for('main.preview_job', service_id=current_service.id, template_id=template_id, upload_id=upload_id)}}" class='page-footer'> <form method="get" enctype="multipart/form-data" action="{{url_for('main.preview_job', service_id=current_service.id, template_id=template_id, upload_id=upload_id)}}" class='page-footer'>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
{% if choose_time_form %} {% if choose_time_form %}
{{ choose_time_form.scheduled_for(param_extensions={ {{ choose_time_form.scheduled_for(param_extensions={
'formGroup': {'classes': 'bottom-gutter-2-3'}, 'formGroup': {'classes': 'bottom-gutter-2-3'},

View File

@@ -1,6 +1,6 @@
{% extends "withnav_template.html" %} {% extends "withnav_template.html" %}
{% from "components/banner.html" import banner_wrapper %} {% from "components/banner.html" import banner_wrapper %}
{% from "components/table.html" import list_table, field, text_field, index_field, hidden_field_heading %} {% from "components/table.html" import list_table, field, text_field, hidden_field_heading %}
{% from "components/page-header.html" import page_header %} {% from "components/page-header.html" import page_header %}
{% from "components/components/button/macro.njk" import usaButton %} {% from "components/components/button/macro.njk" import usaButton %}
{% from "components/components/skip-link/macro.njk" import usaSkipLink %} {% from "components/components/skip-link/macro.njk" import usaSkipLink %}
@@ -22,9 +22,9 @@
{{ page_header('Preview') }} {{ page_header('Preview') }}
<h2 id="{{ file_contents_header_id }}">Message</h2> <h2 id="{{ file_contents_header_id }}">Message</h2>
{% if scheduled_for %} {% if scheduled_for %}
<p class="sms-message-sender">Time: {{scheduled_for}}</p> <p class="sms-message-scheduler">Time: {{scheduled_for}}</p>
{% endif %} {% endif %}
<p class="sms-message-sender">File: {{original_file_name}}</p> <p class="sms-message-file-name">File: {{original_file_name}}</p>
{{ template|string }} {{ template|string }}
<div class="bottom-gutter-3-2"> <div class="bottom-gutter-3-2">
<form method="post" enctype="multipart/form-data" action="{{url_for('main.start_job', service_id=current_service.id, upload_id=upload_id)}}" class='page-footer'> <form method="post" enctype="multipart/form-data" action="{{url_for('main.start_job', service_id=current_service.id, upload_id=upload_id)}}" class='page-footer'>

View File

@@ -5,7 +5,7 @@
{% from "components/components/button/macro.njk" import usaButton %} {% from "components/components/button/macro.njk" import usaButton %}
{% block service_page_title %} {% block service_page_title %}
{{ "Error" if error else "Preview of {}".format(template.name) }} {{ "Error" if error else "Select delivery time" }}
{% endblock %} {% endblock %}
{% block backLink %} {% block backLink %}
@@ -46,12 +46,11 @@
{{ template|string }} {{ template|string }}
<div class="js-stick-at-bottom-when-scrolling"> <div class="js-stick-at-bottom-when-scrolling">
<form method="post" enctype="multipart/form-data" action="{{url_for( <form method="get" enctype="multipart/form-data" action="{{url_for(
'main.preview_notification', 'main.preview_notification',
service_id=current_service.id, service_id=current_service.id,
template_id=template.id template_id=template.id
)}}" class='page-footer'> )}}" class='page-footer'>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
{% if not error %} {% if not error %}
{% if choose_time_form %} {% if choose_time_form %}
{{ choose_time_form.scheduled_for(param_extensions={ {{ choose_time_form.scheduled_for(param_extensions={

View File

@@ -391,7 +391,7 @@ def test_conversation_reply_redirects_with_phone_number_from_notification(
) )
for element, expected_text in [ for element, expected_text in [
("h1", "Preview of Two week reminder"), ("h1", "Select delivery time"),
(".sms-message-recipient", "To: 2021234567"), (".sms-message-recipient", "To: 2021234567"),
( (
".sms-message-wrapper", ".sms-message-wrapper",

View File

@@ -963,39 +963,19 @@ def test_upload_valid_csv_shows_preview_and_table(
) )
page = client_request.get( page = client_request.get(
"main.check_messages", "main.preview_job",
service_id=SERVICE_ONE_ID, service_id=SERVICE_ONE_ID,
template_id=fake_uuid, template_id=fake_uuid,
upload_id=fake_uuid, upload_id=fake_uuid,
**extra_args, **extra_args,
) )
mock_s3_set_metadata.assert_called_once_with( assert page.h1.text.strip() == "Preview"
SERVICE_ONE_ID, assert page.select("h2")[1].text.strip() == "Preview list"
fake_uuid, assert page.h2.text.strip() == "Message"
notification_count=3,
template_id=fake_uuid,
valid=True,
original_file_name="example.csv",
)
assert page.h1.text.strip() == "Preview of Two week reminder"
assert page.select_one(".sms-message-recipient").text.strip() == expected_recipient assert page.select_one(".sms-message-recipient").text.strip() == expected_recipient
assert page.select_one(".sms-message-wrapper").text.strip() == expected_message assert page.select_one(".sms-message-wrapper").text.strip() == expected_message
assert not page.select_one(".table-field-index")
assert page.select_one(".table-field-index").text.strip() == "2"
if expected_link_in_first_row:
assert page.select_one(".table-field-index a")["href"] == url_for(
"main.check_messages",
service_id=SERVICE_ONE_ID,
template_id=fake_uuid,
upload_id=fake_uuid,
row_index=2,
original_file_name="example.csv",
)
else:
assert not page.select_one(".table-field-index").select_one("a")
for row_index, row in enumerate( for row_index, row in enumerate(
[ [
@@ -1043,7 +1023,7 @@ def test_upload_valid_csv_shows_preview_and_table(
for index, cell in enumerate(row): for index, cell in enumerate(row):
row = page.select("table tbody tr")[row_index] row = page.select("table tbody tr")[row_index]
assert "id" not in row assert "id" not in row
assert normalize_spaces(str(row.select("td")[index + 1])) == cell assert normalize_spaces(str(row.select("td")[index])) == cell
def test_show_all_columns_if_there_are_duplicate_recipient_columns( def test_show_all_columns_if_there_are_duplicate_recipient_columns(
@@ -1674,7 +1654,7 @@ def test_send_one_off_email_to_self_without_placeholders_redirects_to_check_page
_follow_redirects=True, _follow_redirects=True,
) )
assert page.select("h1")[0].text.strip() == "Preview of Two week reminder" assert page.select("h1")[0].text.strip() == "Select delivery time"
@pytest.mark.parametrize( @pytest.mark.parametrize(
@@ -1901,10 +1881,10 @@ def test_upload_csvfile_with_valid_phone_shows_all_numbers(
original_file_name="example.csv", original_file_name="example.csv",
) )
assert "202 867 0701" in page.text assert "Select delivery time" in page.text
assert "202 867 0749" in page.text # assert "202 867 0749" in page.text
assert "202 867 0750" not in page.text # assert "202 867 0750" not in page.text
assert "Only showing the first 50 rows" in page.text # assert "Only showing the first 50 rows" in page.text
mock_get_notification_count.assert_called_with(service_one["id"]) mock_get_notification_count.assert_called_with(service_one["id"])
@@ -1988,7 +1968,7 @@ def test_test_message_can_only_be_sent_now(
assert 'name="scheduled_for"' not in content assert 'name="scheduled_for"' not in content
def test_send_button_is_correctly_labelled( def test_preview_button_is_correctly_labelled(
client_request, client_request,
mocker, mocker,
mock_get_live_service, mock_get_live_service,
@@ -2013,9 +1993,7 @@ def test_send_button_is_correctly_labelled(
template_id=fake_uuid, template_id=fake_uuid,
) )
assert normalize_spaces(page.select_one("main [type=submit]").text) == ( assert normalize_spaces(page.select_one("main [type=submit]").text) == ("Preview")
"Send 1,000 text messages"
)
@pytest.mark.parametrize("when", ["", "2016-08-25T13:04:21.767198"]) @pytest.mark.parametrize("when", ["", "2016-08-25T13:04:21.767198"])
@@ -2043,6 +2021,8 @@ def test_create_job_should_call_api(
"valid": True, "valid": True,
} }
} }
with client_request.session_transaction() as session:
session["scheduled_for"] = when
page = client_request.post( page = client_request.post(
"main.start_job", "main.start_job",
@@ -2593,7 +2573,7 @@ def test_check_notification_redirects_if_session_not_populated(
) )
def test_check_notification_shows_preview( def test_check_notification_shows_scheduler(
client_request, service_one, fake_uuid, mock_get_service_template client_request, service_one, fake_uuid, mock_get_service_template
): ):
with client_request.session_transaction() as session: with client_request.session_transaction() as session:
@@ -2604,7 +2584,7 @@ def test_check_notification_shows_preview(
"main.check_notification", service_id=service_one["id"], template_id=fake_uuid "main.check_notification", service_id=service_one["id"], template_id=fake_uuid
) )
assert page.h1.text.strip() == "Preview of Two week reminder" assert page.h1.text.strip() == "Select delivery time"
assert (page.find_all("a", {"class": "usa-back-link"})[0]["href"]) == url_for( assert (page.find_all("a", {"class": "usa-back-link"})[0]["href"]) == url_for(
"main.send_one_off_step", "main.send_one_off_step",
service_id=service_one["id"], service_id=service_one["id"],
@@ -2615,6 +2595,49 @@ def test_check_notification_shows_preview(
# assert tour not visible # assert tour not visible
assert not page.select(".banner-tour") assert not page.select(".banner-tour")
# post to send_notification with help=0 to ensure no back link is then shown
assert page.form.attrs["action"] == url_for(
"main.preview_notification",
service_id=service_one["id"],
template_id=fake_uuid,
)
assert normalize_spaces(page.select_one("main [type=submit]").text) == ("Preview")
@pytest.mark.parametrize("when", ["", "2016-08-25T13:04:21.767198"])
def test_preview_notification_shows_preview(
client_request,
service_one,
fake_uuid,
mock_get_service_template,
when,
):
with client_request.session_transaction() as session:
session["recipient"] = "2028675301"
session["placeholders"] = {}
# with client_request.session_transaction() as session:
# session["scheduled_for"] = when
page = client_request.get(
"main.preview_notification", service_id=service_one["id"], template_id=fake_uuid
)
# if when:
# assert page.h1.text.strip() == when
# else:
# assert page.h1.text.strip() == "Now"
assert page.h1.text.strip() == "Preview of Two week reminder"
assert (page.find_all("a", {"class": "usa-back-link"})[0]["href"]) == url_for(
"main.check_notification",
service_id=service_one["id"],
template_id=fake_uuid,
)
# assert tour not visible
assert not page.select(".banner-tour")
# post to send_notification with help=0 to ensure no back link is then shown # post to send_notification with help=0 to ensure no back link is then shown
assert page.form.attrs["action"] == url_for( assert page.form.attrs["action"] == url_for(
"main.send_notification", "main.send_notification",

View File

@@ -544,10 +544,9 @@ def test_should_200_for_check_tour_notification(
# post to send_notification keeps help argument # post to send_notification keeps help argument
assert page.form.attrs["action"] == url_for( assert page.form.attrs["action"] == url_for(
"main.send_notification", "main.preview_notification",
service_id=SERVICE_ONE_ID, service_id=SERVICE_ONE_ID,
template_id=fake_uuid, template_id=fake_uuid,
help="3",
) )

View File

@@ -140,6 +140,8 @@ EXCLUDED_ENDPOINTS = tuple(
"platform_admin_list_complaints", "platform_admin_list_complaints",
"platform_admin_reports", "platform_admin_reports",
"platform_admin_splash_page", "platform_admin_splash_page",
"preview_job",
"preview_notification",
"pricing", "pricing",
"privacy", "privacy",
"received_text_messages_callback", "received_text_messages_callback",