From 4e63a601e97833cf115f0570decfdbdd5c322a0d Mon Sep 17 00:00:00 2001
From: Jonathan Bobel
If a text message is longer than 160 characters (including spaces), it counts as more than one message.
+If a text message is longer than 160 characters (including spaces), it counts as more than one message part.
You can help your recipients identify your texts as legitimate by customizing your messages to clearly state who they are from. Consider using the program or benefit name that is most familiar to your recipients.
diff --git a/app/templates/views/roadmap.html b/app/templates/views/roadmap.html index 6ea2e7cfb..58c9ad4d1 100644 --- a/app/templates/views/roadmap.html +++ b/app/templates/views/roadmap.html @@ -50,9 +50,9 @@If the pilot is successful, we hope to recruit additional high-impact partners to improve outcomes for low-income individuals and families.
+If the pilot is successful, we hope to recruit additional partners to improve outcomes for low-income individuals and families.
Goals during this stage:
diff --git a/app/templates/views/security.html b/app/templates/views/security.html index d676b37bf..35abece07 100644 --- a/app/templates/views/security.html +++ b/app/templates/views/security.html @@ -65,9 +65,9 @@Some messages include sensitive information like security codes or password reset links.
If you’re sending a message with sensitive information, you can choose to hide those details on the Notify dashboard once the message has been sent. This means that only the message recipient will be able to see that information.
+
- You can set different user permissions in Notify. This lets you control who in your team has access to certain parts of the service.
To sign in to Notify, you’ll need to enter:
If signing in with a text message is a problem for your team, contact us to find out about using an email link instead.
-
-
- You can set different user permissions in Notify. This lets you control who in your team has access to certain parts of the service.
@@ -93,32 +88,4 @@If signing in with a text message is a problem for your team, contact us to find out about using an email link instead.
- - - - - - {% endblock %} diff --git a/app/templates/views/support/index.html b/app/templates/views/support/index.html index d9d6abd53..dd5ad9c10 100644 --- a/app/templates/views/support/index.html +++ b/app/templates/views/support/index.html @@ -13,9 +13,9 @@Notify is designed to be easy to use.
If you have other questions, we are available at notify-support@gsa.gov.
From e9f96332870e9e0f59769dbbcf1cce9c5386938a Mon Sep 17 00:00:00 2001 From: Carlo CostinoSome messages include sensitive information like security codes or password reset links.
If you’re sending a message with sensitive information, you can choose to hide those details on the Notify dashboard once the message has been sent. This means that only the message recipient will be able to see that information.
+ alt="Screenshot of a test message in review with the link to 'hide personalization after sending' circled.">
To sign in to Notify, you’ll need to enter:
From 8661a2235356827b42379f9a5906893bfc99455c Mon Sep 17 00:00:00 2001 From: Kenneth Kehl <@kkehl@flexion.us> Date: Thu, 29 Feb 2024 08:24:53 -0800 Subject: [PATCH 63/64] fix date format in batch review (notify-admin-1171) --- app/main/forms.py | 16 ++++++++------ app/main/views/api_keys.py | 22 +++++++++++-------- app/main/views/manage_users.py | 22 ++++++++++--------- app/main/views/performance.py | 6 +++--- app/main/views/send.py | 28 ++++++++++++++----------- app/main/views/service_settings.py | 24 +++++++++++++-------- app/templates/components/table.html | 4 ++-- app/templates/partials/jobs/status.html | 6 +++--- tests/app/main/views/test_activity.py | 24 ++++++++++----------- tests/app/main/views/test_jobs.py | 12 +++++------ 10 files changed, 92 insertions(+), 72 deletions(-) diff --git a/app/main/forms.py b/app/main/forms.py index c01ce8fcc..2e6655cc5 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -1781,12 +1781,16 @@ class TemplateAndFoldersSelectionForm(Form): None, [ # ('email', 'Email') if 'email' in available_template_types else None, - ("sms", "Start with a blank template") - if "sms" in available_template_types - else None, - ("copy-existing", "Copy an existing template") - if allow_adding_copy_of_template - else None, + ( + ("sms", "Start with a blank template") + if "sms" in available_template_types + else None + ), + ( + ("copy-existing", "Copy an existing template") + if allow_adding_copy_of_template + else None + ), ], ) ) diff --git a/app/main/views/api_keys.py b/app/main/views/api_keys.py index 4f8c3b29e..8cb28ba59 100644 --- a/app/main/views/api_keys.py +++ b/app/main/views/api_keys.py @@ -168,12 +168,14 @@ def api_callbacks(service_id): return render_template( "views/api/callbacks.html", - received_text_messages_callback=received_text_messages_callback["url"] - if received_text_messages_callback - else None, - delivery_status_callback=delivery_status_callback["url"] - if delivery_status_callback - else None, + received_text_messages_callback=( + received_text_messages_callback["url"] + if received_text_messages_callback + else None + ), + delivery_status_callback=( + delivery_status_callback["url"] if delivery_status_callback else None + ), ) @@ -262,9 +264,11 @@ def received_text_messages_callback(service_id): received_text_messages_callback = get_received_text_messages_callback() form = CallbackForm( - url=received_text_messages_callback.get("url") - if received_text_messages_callback - else "", + url=( + received_text_messages_callback.get("url") + if received_text_messages_callback + else "" + ), bearer_token=dummy_bearer_token if received_text_messages_callback else "", ) diff --git a/app/main/views/manage_users.py b/app/main/views/manage_users.py index 4ab20f363..1b80c659e 100644 --- a/app/main/views/manage_users.py +++ b/app/main/views/manage_users.py @@ -122,16 +122,18 @@ def edit_user_permissions(service_id, user_id): form = form_class.from_user( user, service_id, - folder_permissions=None - if user.platform_admin - else [ - f["id"] - for f in current_service.all_template_folders - if user.has_template_folder_permission(f) - ], - all_template_folders=None - if user.platform_admin - else current_service.all_template_folders, + folder_permissions=( + None + if user.platform_admin + else [ + f["id"] + for f in current_service.all_template_folders + if user.has_template_folder_permission(f) + ] + ), + all_template_folders=( + None if user.platform_admin else current_service.all_template_folders + ), ) if form.validate_on_submit(): diff --git a/app/main/views/performance.py b/app/main/views/performance.py index 13445967b..1d2a4d1bc 100644 --- a/app/main/views/performance.py +++ b/app/main/views/performance.py @@ -34,8 +34,8 @@ def performance(): stats["average_percentage_under_10_seconds"] = mean( [row["percentage_under_10_seconds"] for row in stats["processing_time"]] or [0] ) - stats[ - "count_of_live_services_and_organizations" - ] = status_api_client.get_count_of_live_services_and_organizations() + stats["count_of_live_services_and_organizations"] = ( + status_api_client.get_count_of_live_services_and_organizations() + ) return render_template("views/performance.html", **stats) diff --git a/app/main/views/send.py b/app/main/views/send.py index 4332c7ddb..6c786e3ac 100644 --- a/app/main/views/send.py +++ b/app/main/views/send.py @@ -52,12 +52,14 @@ def get_example_csv_fields(column_headers, use_example_as_example, submitted_fie def get_example_csv_rows(template, use_example_as_example=True, submitted_fields=False): return { - "email": ["test@example.com"] - if use_example_as_example - else [current_user.email_address], - "sms": ["12223334444"] - if use_example_as_example - else [current_user.mobile_number], + "email": ( + ["test@example.com"] + if use_example_as_example + else [current_user.email_address] + ), + "sms": ( + ["12223334444"] if use_example_as_example else [current_user.mobile_number] + ), }[template.template_type] + get_example_csv_fields( ( placeholder @@ -511,12 +513,14 @@ def _check_messages(service_id, template_id, upload_id, preview_row): template=template, max_initial_rows_shown=50, max_errors_shown=50, - guestlist=itertools.chain.from_iterable( - [user.name, user.mobile_number, user.email_address] - for user in Users(service_id) - ) - if current_service.trial_mode - else None, + guestlist=( + itertools.chain.from_iterable( + [user.name, user.mobile_number, user.email_address] + for user in Users(service_id) + ) + if current_service.trial_mode + else None + ), remaining_messages=remaining_messages, allow_international_sms=current_service.has_permission("international_sms"), ) diff --git a/app/main/views/service_settings.py b/app/main/views/service_settings.py index 1cac1410c..628ac59e5 100644 --- a/app/main/views/service_settings.py +++ b/app/main/views/service_settings.py @@ -477,9 +477,11 @@ def service_edit_email_reply_to(service_id, reply_to_email_id): current_service.id, reply_to_email_id=reply_to_email_id, email_address=form.email_address.data, - is_default=True - if reply_to_email_address["is_default"] - else form.is_default.data, + is_default=( + True + if reply_to_email_address["is_default"] + else form.is_default.data + ), ) return redirect(url_for(".service_email_reply_to", service_id=service_id)) try: @@ -499,9 +501,11 @@ def service_edit_email_reply_to(service_id, reply_to_email_id): ".service_verify_reply_to_address", service_id=service_id, notification_id=notification_id, - is_default=True - if reply_to_email_address["is_default"] - else form.is_default.data, + is_default=( + True + if reply_to_email_address["is_default"] + else form.is_default.data + ), replace=reply_to_email_id, ) ) @@ -702,9 +706,11 @@ def service_edit_sms_sender(service_id, sms_sender_id): service_api_client.update_sms_sender( current_service.id, sms_sender_id=sms_sender_id, - sms_sender=sms_sender["sms_sender"] - if is_inbound_number - else form.sms_sender.data.replace("\r", ""), + sms_sender=( + sms_sender["sms_sender"] + if is_inbound_number + else form.sms_sender.data.replace("\r", "") + ), is_default=True if sms_sender["is_default"] else form.is_default.data, ) return redirect(url_for(".service_sms_senders", service_id=service_id)) diff --git a/app/templates/components/table.html b/app/templates/components/table.html index 50eb73d9a..a76f2c6bd 100644 --- a/app/templates/components/table.html +++ b/app/templates/components/table.html @@ -171,8 +171,8 @@ {% endif %}{{ notification.status|format_notification_status_as_time( - notification.created_at|format_datetime_short, - (notification.sent_at or notification.created_at)|format_datetime_short + notification.created_at|format_datetime_short_america, + (notification.sent_at or notification.created_at)|format_datetime_short_america ) }}
{% if displayed_on_single_line %}{% endif %} diff --git a/app/templates/partials/jobs/status.html b/app/templates/partials/jobs/status.html index 703050e8d..b24051211 100644 --- a/app/templates/partials/jobs/status.html +++ b/app/templates/partials/jobs/status.html @@ -2,12 +2,12 @@{% if job.scheduled_for %} {% if job.processing_started %} - Sent by {{ job.created_by.name }} on {{ job.processing_started|format_datetime_short }} + Sent by {{ job.created_by.name }} on {{ job.processing_started|format_datetime_short_america }} {% else %} - Uploaded by {{ job.created_by.name }} on {{ job.created_at|format_datetime_short }} + Uploaded by {{ job.created_by.name }} on {{ job.created_at|format_datetime_short_america }} {% endif %} {% else %} - Sent by {{ job.created_by.name }} on {{ job.created_at|format_datetime_short }} + Sent by {{ job.created_by.name }} on {{ job.created_at|format_datetime_short_america }} {% endif %}
{% if job.status == 'sending limits exceeded'%} diff --git a/tests/app/main/views/test_activity.py b/tests/app/main/views/test_activity.py index 96c50a308..e224c2e7d 100644 --- a/tests/app/main/views/test_activity.py +++ b/tests/app/main/views/test_activity.py @@ -160,8 +160,8 @@ def test_can_show_notifications( assert normalize_spaces( first_row.select_one(".table-field-right-aligned .align-with-message-body").text ) in [ - "Delivered 1 January at 02:00 US/Eastern", - "Delivered 1 January at 01:00 US/Eastern", + "Delivered 01-01-2020 at 01:00 AM", + "Delivered 01-01-2020 at 01:00 AM", ] assert page_title in page.h1.text.strip() @@ -656,36 +656,36 @@ def test_redacts_templates_that_should_be_redacted( @pytest.mark.parametrize( ("message_type", "status", "expected_hint_status", "single_line"), [ - ("email", "created", "Sending since 27 September at 08:30 US/Eastern", True), - ("email", "sending", "Sending since 27 September at 08:30 US/Eastern", True), + ("email", "created", "Sending since 09-27-2017 at 08:30 AM", True), + ("email", "sending", "Sending since 09-27-2017 at 08:30 AM", True), ( "email", "temporary-failure", - "Inbox not accepting messages right now 27 September at 08:30 US/Eastern", + "Inbox not accepting messages right now 09-27-2017 at 08:30 AM", False, ), ( "email", "permanent-failure", - "Email address does not exist 27 September at 08:30 US/Eastern", + "Email address does not exist 09-27-2017 at 08:30 AM", False, ), - ("email", "delivered", "Delivered 27 September at 08:30 US/Eastern", True), - ("sms", "created", "Sending since 27 September at 08:30 US/Eastern", True), - ("sms", "sending", "Sending since 27 September at 08:30 US/Eastern", True), + ("email", "delivered", "Delivered 09-27-2017 at 08:30 AM", True), + ("sms", "created", "Sending since 09-27-2017 at 08:30 AM", True), + ("sms", "sending", "Sending since 09-27-2017 at 08:30 AM", True), ( "sms", "temporary-failure", - "Phone not accepting messages right now 27 September at 08:30 US/Eastern", + "Phone not accepting messages right now 09-27-2017 at 08:30 AM", False, ), ( "sms", "permanent-failure", - "Not delivered 27 September at 08:30 US/Eastern", + "Not delivered 09-27-2017 at 08:30 AM", False, ), - ("sms", "delivered", "Delivered 27 September at 08:30 US/Eastern", True), + ("sms", "delivered", "Delivered 09-27-2017 at 08:30 AM", True), ], ) def test_sending_status_hint_displays_correctly_on_notifications_page( diff --git a/tests/app/main/views/test_jobs.py b/tests/app/main/views/test_jobs.py index 323a1fe00..3076fe88f 100644 --- a/tests/app/main/views/test_jobs.py +++ b/tests/app/main/views/test_jobs.py @@ -90,7 +90,7 @@ def test_should_show_page_for_one_job( assert page.h1.text.strip() == "thisisatest.csv" assert " ".join(page.find("tbody").find("tr").text.split()) == ( - "2021234567 template content Delivered 1 January at 06:09 US/Eastern" + "2021234567 template content Delivered 01-01-2016 at 06:09 AM" ) assert page.find("div", {"data-key": "notifications"})["data-resource"] == url_for( "main.view_job_updates", @@ -109,7 +109,7 @@ def test_should_show_page_for_one_job( assert page.find("span", {"id": "time-left"}).text == "Data available for 7 days" assert normalize_spaces(page.select_one("tbody tr").text) == normalize_spaces( - "2021234567 " "template content " "Delivered 1 January at 06:09 US/Eastern" + "2021234567 " "template content " "Delivered 01-01-2016 at 06:09 AM" ) assert page.select_one("tbody tr a")["href"] == url_for( "main.view_notification", @@ -424,8 +424,8 @@ def test_should_show_updates_for_one_job_as_json( assert "2021234567" in content["notifications"] assert "Status" in content["notifications"] assert "Delivered" in content["notifications"] - assert "00:00" in content["notifications"] - assert "Sent by Test User on 1 January at 00:00" in content["status"] + assert "Sent by Test User on 01-01-2016 at 12:00 AM" in content["status"] + assert "12:00" in content["notifications"] @freeze_time("2016-01-01 05:00:00.000001") @@ -466,8 +466,8 @@ def test_should_show_updates_for_scheduled_job_as_json( assert "2021234567" in content["notifications"] assert "Status" in content["notifications"] assert "Delivered" in content["notifications"] - assert "00:00" in content["notifications"] - assert "Sent by Test User on 1 June at 16:00" in content["status"] + assert "Sent by Test User on 06-01-2016 at 04:00 PM" in content["status"] + assert "12:00" in content["notifications"] @pytest.mark.parametrize( From bdf22a1bc98baa47321a10b1de54c8197b90aff3 Mon Sep 17 00:00:00 2001 From: Jonathan BobelNotify’s real-time dashboard lets you check the status of any message.
-For security, this information is only available for seven days after a message has been sent. You can download a report, including a list of sent messages, for your own records.
-This page describes the statuses you’ll see when you’re signed in to Notify.
+For security, this information is only available for seven days after a message has been sent. You can download a report, including a list of sent messages, for your own records.
+This page describes the statuses you'll see when you're signed in to Notify.