From 9b0dc3dc3ccf6cee4ded7db34ad6c6446f48de4a Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Fri, 19 Jan 2024 11:44:25 -0800 Subject: [PATCH 01/12] updated table titles and fields --- app/main/views/dashboard.py | 3 ++- app/templates/views/dashboard/dashboard.html | 22 ++++++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index 4bfdf5ed3..64ed5915f 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -65,7 +65,6 @@ def service_dashboard(service_id): job_data = job_api_client.get_job(service_id, notificaton_job_id)["data"] if job_data: jobs.append(job_data) - service_data_retention_days = 7 download_availability = [] for job in jobs: @@ -82,11 +81,13 @@ def service_dashboard(service_id): job_id=job["id"], ), ) + download_availability.append( { "job_id": job["id"], "time_left": time_left, "download_link": download_link, + "notification_count": job["notification_count"], } ) return render_template( diff --git a/app/templates/views/dashboard/dashboard.html b/app/templates/views/dashboard/dashboard.html index ec528c2e3..7756c8a09 100644 --- a/app/templates/views/dashboard/dashboard.html +++ b/app/templates/views/dashboard/dashboard.html @@ -29,7 +29,7 @@ {{ ajax_block(partials, updates_url, 'template-statistics') }} -

Batched Jobs

+

Recent Batches

{% call(item, row_number) list_table( @@ -38,12 +38,16 @@ caption_visible=False, border_visible=True, empty_message='No batched job messages found  (messages are kept for {} days)'.format(service_data_retention_days)|safe, - field_headings=['Template Name','Date/Time', 'Download (CSV) Report'], + field_headings=['File Name','Template','Time Sent', 'Sender', '# of Recipeints'], field_headings_visible=False ) %} - {% if item.job.original_file_name and item.job.id %} + {{ download_availability }} + {% if item.job.original_file_name and item.job.id and item.template %} {% call row_heading() %} - {{ item.job.original_file_name|replace('.csv', '') if item.job.id else '' }} + {{ item.job.original_file_name if item.job.id else '' }} + {% endcall %} + {% call row_heading() %} + {{ item.template.name }} {% endcall %} {% call row_heading() %} {{ item.status|format_notification_status_as_time( @@ -51,13 +55,13 @@ (item.updated_at or item.created_at)|format_datetime_short) }} {% endcall %} + {% call row_heading() %} + {{ item.created_by.name }} + {% endcall %} {% call row_heading() %} {% set availability = download_availability|selectattr('job_id', 'equalto', item.job.id)|first %} - {% if availability and availability.time_left != "Data no longer available" %} - {{ "Download" if item.job.original_file_name else '' }} - - {{ availability.time_left }} - {% elif availability %} - {{ availability.time_left }} + {% if availability %} + {{ availability.notification_count}} {% endif %} {% endcall %} {% endif %} From 8baf9682a1a1cce504a4b9379add81785a06333a Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Tue, 23 Jan 2024 15:24:57 -0800 Subject: [PATCH 02/12] update table css and format --- .../uswds/_uswds-theme-custom-styles.scss | 9 ++++ app/main/views/dashboard.py | 48 +++++-------------- app/templates/views/dashboard/dashboard.html | 20 +++++--- 3 files changed, 33 insertions(+), 44 deletions(-) diff --git a/app/assets/sass/uswds/_uswds-theme-custom-styles.scss b/app/assets/sass/uswds/_uswds-theme-custom-styles.scss index ef7d279f7..533b54a2e 100644 --- a/app/assets/sass/uswds/_uswds-theme-custom-styles.scss +++ b/app/assets/sass/uswds/_uswds-theme-custom-styles.scss @@ -377,6 +377,15 @@ td.table-empty-message { } } +.job-table { + .usa-table { + thead th { + background-color: #d9e8f6; + color: #1b1b1b; + } + } +} + #template-list { max-height: 500px; overflow-y: auto; diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index 64ed5915f..a93c1680a 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -29,7 +29,7 @@ from app.utils.csv import Spreadsheet from app.utils.pagination import generate_next_dict, generate_previous_dict from app.utils.time import get_current_financial_year from app.utils.user import user_has_permissions - +from pprint import pprint @main.route("/services//dashboard") @user_has_permissions("view_activity", "send_messages") @@ -47,55 +47,29 @@ def service_dashboard(service_id): if not current_user.has_permissions("view_activity"): return redirect(url_for("main.choose_template", service_id=service_id)) - download_availability = [] - notifications = notification_api_client.get_notifications_for_service( service_id=service_id, )["notifications"] - notificaton_job_ids = [ - notification["job"]["id"] - for notification in notifications - if "job" in notification - ] + job_response = job_api_client.get_jobs(service_id) - jobs = [] - - for notificaton_job_id in notificaton_job_ids: - job_data = job_api_client.get_job(service_id, notificaton_job_id)["data"] - if job_data: - jobs.append(job_data) service_data_retention_days = 7 - download_availability = [] - for job in jobs: - message_type = job.get("template_type") - if message_type is not None: - service_data_retention_days = current_service.get_days_of_retention( - message_type - ) - time_left = get_time_left(job["created_at"]) - download_link = ( - url_for( - ".view_job_csv", - service_id=current_service.id, - job_id=job["id"], - ), - ) - - download_availability.append( - { + jobs = [] + for job in job_response['data']: + job_info = { "job_id": job["id"], - "time_left": time_left, - "download_link": download_link, + "time_left": get_time_left(job["created_at"]), + "download_link": url_for(".view_job_csv", service_id=current_service.id, job_id=job["id"]), "notification_count": job["notification_count"], - } - ) + } + jobs.append(job_info) return render_template( "views/dashboard/dashboard.html", updates_url=url_for(".service_dashboard_updates", service_id=service_id), partials=get_dashboard_partials(service_id), notifications=notifications, - download_availability=download_availability, + jobs=jobs, + job_response = job_response, service_data_retention_days=service_data_retention_days, ) diff --git a/app/templates/views/dashboard/dashboard.html b/app/templates/views/dashboard/dashboard.html index 7756c8a09..1ad2632ca 100644 --- a/app/templates/views/dashboard/dashboard.html +++ b/app/templates/views/dashboard/dashboard.html @@ -30,7 +30,6 @@ {{ ajax_block(partials, updates_url, 'template-statistics') }}

Recent Batches

-
{% call(item, row_number) list_table( notifications, @@ -38,10 +37,9 @@ caption_visible=False, border_visible=True, empty_message='No batched job messages found  (messages are kept for {} days)'.format(service_data_retention_days)|safe, - field_headings=['File Name','Template','Time Sent', 'Sender', '# of Recipeints'], + field_headings=['File Name','Template','Time Sent', 'Sender', '# of Recipeints', "Report"], field_headings_visible=False ) %} - {{ download_availability }} {% if item.job.original_file_name and item.job.id and item.template %} {% call row_heading() %} {{ item.job.original_file_name if item.job.id else '' }} @@ -58,11 +56,19 @@ {% call row_heading() %} {{ item.created_by.name }} {% endcall %} + {% set availability = jobs|selectattr('job_id', 'equalto', item.job.id)|first %} {% call row_heading() %} - {% set availability = download_availability|selectattr('job_id', 'equalto', item.job.id)|first %} - {% if availability %} - {{ availability.notification_count}} - {% endif %} + {% if availability %} + {{ availability.notification_count}} + {% endif %} + {% endcall %} + {% call row_heading() %} + {% if availability and availability.time_left != "Data no longer available" %} + {{ "Download" if item.job.original_file_name else '' }} + {{ availability.time_left }} + {% elif availability %} + {{ availability.time_left }} + {% endif %} {% endcall %} {% endif %} {% endcall %} From 65bccb3f955cf10a9726abf30f98c7dcadc84e1d Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Tue, 23 Jan 2024 16:18:43 -0800 Subject: [PATCH 03/12] changed time column --- app/__init__.py | 2 ++ app/formatters.py | 14 ++++++++++++++ app/main/views/dashboard.py | 17 ++++++++--------- app/templates/views/dashboard/dashboard.html | 8 ++++---- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index 9ec056c2b..af9b3f9a9 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -54,6 +54,7 @@ from app.formatters import ( format_datetime_normal, format_datetime_relative, format_datetime_short, + format_datetime_short_america, format_day_of_week, format_delta, format_delta_days, @@ -548,6 +549,7 @@ def add_template_filters(application): format_datetime_24h, format_datetime_normal, format_datetime_short, + format_datetime_short_america, valid_phone_number, linkable_name, format_date, diff --git a/app/formatters.py b/app/formatters.py index 86c187f55..eefd20666 100644 --- a/app/formatters.py +++ b/app/formatters.py @@ -97,6 +97,20 @@ def format_datetime_short(date): format_date_short(date), format_time_24h(date), get_user_preferred_timezone() ) +def format_datetime_short_america(date): + return "{} at {} {}".format( + format_date_normal_america(date), format_time_12h(date),get_user_preferred_timezone() + ) + +def format_date_normal_america(date): + date = parse_naive_dt(date) + return date.strftime("%B %d, %Y").lstrip("0") + +def format_time_12h(date): + date = parse_naive_dt(date) + + preferred_tz = pytz.timezone(get_user_preferred_timezone()) + return date.replace(tzinfo=timezone.utc).astimezone(preferred_tz).strftime("%I:%M %p") def format_datetime_relative(date): return "{} at {} {}".format( diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index a93c1680a..3ccc39403 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -54,22 +54,21 @@ def service_dashboard(service_id): job_response = job_api_client.get_jobs(service_id) service_data_retention_days = 7 - jobs = [] - for job in job_response['data']: - job_info = { - "job_id": job["id"], - "time_left": get_time_left(job["created_at"]), - "download_link": url_for(".view_job_csv", service_id=current_service.id, job_id=job["id"]), - "notification_count": job["notification_count"], + jobs = [ + { + "job_id": job["id"], + "time_left": get_time_left(job["created_at"]), + "download_link": url_for(".view_job_csv", service_id=current_service.id, job_id=job["id"]), + "notification_count": job["notification_count"], } - jobs.append(job_info) + for job in job_response.get('data', []) + ] return render_template( "views/dashboard/dashboard.html", updates_url=url_for(".service_dashboard_updates", service_id=service_id), partials=get_dashboard_partials(service_id), notifications=notifications, jobs=jobs, - job_response = job_response, service_data_retention_days=service_data_retention_days, ) diff --git a/app/templates/views/dashboard/dashboard.html b/app/templates/views/dashboard/dashboard.html index 1ad2632ca..a9cc8f5cf 100644 --- a/app/templates/views/dashboard/dashboard.html +++ b/app/templates/views/dashboard/dashboard.html @@ -48,10 +48,10 @@ {{ item.template.name }} {% endcall %} {% call row_heading() %} - {{ item.status|format_notification_status_as_time( - item.created_at|format_datetime_short, - (item.updated_at or item.created_at)|format_datetime_short) - }} + {{ item.status|format_notification_status_as_time( + item.created_at|format_datetime_short_america, + (item.updated_at or item.created_at)|format_datetime_short_america + ) }} {% endcall %} {% call row_heading() %} {{ item.created_by.name }} From c9ed1ab59d562da9689e75a41ba71a4d8e581323 Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Wed, 24 Jan 2024 11:15:35 -0800 Subject: [PATCH 04/12] change time column --- app/templates/views/dashboard/dashboard.html | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/templates/views/dashboard/dashboard.html b/app/templates/views/dashboard/dashboard.html index a9cc8f5cf..2bf5cae0e 100644 --- a/app/templates/views/dashboard/dashboard.html +++ b/app/templates/views/dashboard/dashboard.html @@ -37,7 +37,7 @@ caption_visible=False, border_visible=True, empty_message='No batched job messages found  (messages are kept for {} days)'.format(service_data_retention_days)|safe, - field_headings=['File Name','Template','Time Sent', 'Sender', '# of Recipeints', "Report"], + field_headings=['File Name','Template','Time Sent', 'Sender', '# of Recipients', "Report"], field_headings_visible=False ) %} {% if item.job.original_file_name and item.job.id and item.template %} @@ -48,10 +48,8 @@ {{ item.template.name }} {% endcall %} {% call row_heading() %} - {{ item.status|format_notification_status_as_time( - item.created_at|format_datetime_short_america, - (item.updated_at or item.created_at)|format_datetime_short_america - ) }} + {{ (item.updated_at or item.created_at)| format_datetime_short_america + }} {% endcall %} {% call row_heading() %} {{ item.created_by.name }} From 524a1e4687e5fece63f3c05fc87f3726c3e8706c Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Thu, 25 Jan 2024 15:32:44 -0800 Subject: [PATCH 05/12] updated download links and table html --- .../uswds/_uswds-theme-custom-styles.scss | 23 +++- app/formatters.py | 16 ++- app/main/views/dashboard.py | 7 +- app/templates/components/table.html | 2 +- app/templates/views/dashboard/dashboard.html | 110 ++++++++++-------- 5 files changed, 100 insertions(+), 58 deletions(-) diff --git a/app/assets/sass/uswds/_uswds-theme-custom-styles.scss b/app/assets/sass/uswds/_uswds-theme-custom-styles.scss index 533b54a2e..b5f2147cd 100644 --- a/app/assets/sass/uswds/_uswds-theme-custom-styles.scss +++ b/app/assets/sass/uswds/_uswds-theme-custom-styles.scss @@ -379,9 +379,26 @@ td.table-empty-message { .job-table { .usa-table { - thead th { - background-color: #d9e8f6; - color: #1b1b1b; + thead th.file-name { + width: 25%; + } + thead th.template { + width: 20%; + } + thead th.time-sent { + width: 30%; + } + thead th.sender { + width: 15%; + } + thead th.\#-of-recipients { + width: 5%; + } + thead th.report { + width: 5%; + } + th { + padding: 0.5rem 0.5rem; } } } diff --git a/app/formatters.py b/app/formatters.py index eefd20666..971beb03e 100644 --- a/app/formatters.py +++ b/app/formatters.py @@ -97,14 +97,21 @@ def format_datetime_short(date): format_date_short(date), format_time_24h(date), get_user_preferred_timezone() ) + def format_datetime_short_america(date): - return "{} at {} {}".format( - format_date_normal_america(date), format_time_12h(date),get_user_preferred_timezone() + return "{} at {}".format( + format_date_numeric_america(date), format_time_12h(date) ) -def format_date_normal_america(date): + +def format_date_numeric_america(date): date = parse_naive_dt(date) - return date.strftime("%B %d, %Y").lstrip("0") + + preferred_tz = pytz.timezone(get_user_preferred_timezone()) + return ( + date.replace(tzinfo=timezone.utc).astimezone(preferred_tz).strftime("%m-%d-%Y") + ) + def format_time_12h(date): date = parse_naive_dt(date) @@ -112,6 +119,7 @@ def format_time_12h(date): preferred_tz = pytz.timezone(get_user_preferred_timezone()) return date.replace(tzinfo=timezone.utc).astimezone(preferred_tz).strftime("%I:%M %p") + def format_datetime_relative(date): return "{} at {} {}".format( get_human_day(date), format_time_24h(date), get_user_preferred_timezone() diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index 3ccc39403..cb73175c5 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -29,7 +29,7 @@ from app.utils.csv import Spreadsheet from app.utils.pagination import generate_next_dict, generate_previous_dict from app.utils.time import get_current_financial_year from app.utils.user import user_has_permissions -from pprint import pprint + @main.route("/services//dashboard") @user_has_permissions("view_activity", "send_messages") @@ -58,8 +58,10 @@ def service_dashboard(service_id): { "job_id": job["id"], "time_left": get_time_left(job["created_at"]), - "download_link": url_for(".view_job_csv", service_id=current_service.id, job_id=job["id"]), + # "download_link": url_for(".view_job_csv", service_id=current_service.id, job_id=job["id"]), "notification_count": job["notification_count"], + "created_by": job["created_by"], + "download_link": url_for(".view_job_csv", service_id=current_service.id, job_id=job["id"]) } for job in job_response.get('data', []) ] @@ -69,6 +71,7 @@ def service_dashboard(service_id): partials=get_dashboard_partials(service_id), notifications=notifications, jobs=jobs, + job_response=job_response['data'], service_data_retention_days=service_data_retention_days, ) diff --git a/app/templates/components/table.html b/app/templates/components/table.html index 803030e54..2e59e4a33 100644 --- a/app/templates/components/table.html +++ b/app/templates/components/table.html @@ -6,7 +6,7 @@ {% for field_heading in field_headings %} - + {% if field_headings_visible %} {{ field_heading }} {% else %} diff --git a/app/templates/views/dashboard/dashboard.html b/app/templates/views/dashboard/dashboard.html index 2bf5cae0e..4892f1588 100644 --- a/app/templates/views/dashboard/dashboard.html +++ b/app/templates/views/dashboard/dashboard.html @@ -31,57 +31,71 @@

Recent Batches

- {% call(item, row_number) list_table( - notifications, - caption="Batched Jobs", - caption_visible=False, - border_visible=True, - empty_message='No batched job messages found  (messages are kept for {} days)'.format(service_data_retention_days)|safe, - field_headings=['File Name','Template','Time Sent', 'Sender', '# of Recipients', "Report"], - field_headings_visible=False - ) %} - {% if item.job.original_file_name and item.job.id and item.template %} - {% call row_heading() %} - {{ item.job.original_file_name if item.job.id else '' }} - {% endcall %} - {% call row_heading() %} - {{ item.template.name }} - {% endcall %} - {% call row_heading() %} - {{ (item.updated_at or item.created_at)| format_datetime_short_america - }} - {% endcall %} - {% call row_heading() %} - {{ item.created_by.name }} - {% endcall %} - {% set availability = jobs|selectattr('job_id', 'equalto', item.job.id)|first %} - {% call row_heading() %} - {% if availability %} - {{ availability.notification_count}} + + + + + + + + + + + + + {% for notification in notifications %} + {% if notification %} + + + + + + {% set job_available = jobs|selectattr('job_id', 'equalto', notification.job.id)|first %} + + + {% endif %} - {% endcall %} - {% call row_heading() %} - {% if availability and availability.time_left != "Data no longer available" %} - {{ "Download" if item.job.original_file_name else '' }} - {{ availability.time_left }} - {% elif availability %} - {{ availability.time_left }} - {% endif %} - {% endcall %} - {% endif %} - {% endcall %} + {% endfor %} + +
+ File name + + Template + + Time sent + + Sender + + # of Recipients + + Report +
+ {% if notification.job.original_file_name %} + {{ notification.job.original_file_name }} + {% else %} + {{ 'Manually entered number' }} + {% endif %} +
+ View Batch +
+ {{ notification.template.name }} + + {{ (notification.updated_at or notification.created_at)| format_datetime_short_america }} + + {{ notification.created_by.name }} + + {{ job_available.notification_count if job_available else ''}} + + {% if job_available and job_available.time_left != "Data no longer available" %} + + {{ "Download" if job_available.job_id else '' }} + {{ job_available.time_left }} + {% elif job_available %} + {{ job_available.time_left }} + {% endif %} +
- - {% if show_pagination %} - {{ previous_next_navigation(prev_page, next_page) }} - {% elif next_page %} - - {% endif %} - -

Usage

Daily

Across all services

From 6e05fd5147c87628c211a32b2cab02816a894a85 Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Thu, 25 Jan 2024 15:39:32 -0800 Subject: [PATCH 06/12] removed comments --- app/main/views/dashboard.py | 4 +--- app/templates/components/table.html | 2 +- app/templates/views/dashboard/dashboard.html | 8 ++------ 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index cb73175c5..cb868fde7 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -58,10 +58,9 @@ def service_dashboard(service_id): { "job_id": job["id"], "time_left": get_time_left(job["created_at"]), - # "download_link": url_for(".view_job_csv", service_id=current_service.id, job_id=job["id"]), + "download_link": url_for(".view_job_csv", service_id=current_service.id, job_id=job["id"]), "notification_count": job["notification_count"], "created_by": job["created_by"], - "download_link": url_for(".view_job_csv", service_id=current_service.id, job_id=job["id"]) } for job in job_response.get('data', []) ] @@ -71,7 +70,6 @@ def service_dashboard(service_id): partials=get_dashboard_partials(service_id), notifications=notifications, jobs=jobs, - job_response=job_response['data'], service_data_retention_days=service_data_retention_days, ) diff --git a/app/templates/components/table.html b/app/templates/components/table.html index 2e59e4a33..803030e54 100644 --- a/app/templates/components/table.html +++ b/app/templates/components/table.html @@ -6,7 +6,7 @@ {% for field_heading in field_headings %} - + {% if field_headings_visible %} {{ field_heading }} {% else %} diff --git a/app/templates/views/dashboard/dashboard.html b/app/templates/views/dashboard/dashboard.html index 4892f1588..f4af4d930 100644 --- a/app/templates/views/dashboard/dashboard.html +++ b/app/templates/views/dashboard/dashboard.html @@ -57,13 +57,9 @@ {% for notification in notifications %} {% if notification %} - + - {% if notification.job.original_file_name %} - {{ notification.job.original_file_name }} - {% else %} - {{ 'Manually entered number' }} - {% endif %} + {{ notification.job.original_file_name if notification.job.original_file_name else 'Manually entered number'}}
View Batch From 45ffa70c3cf0faf2d24b2980269c84c41aabc75c Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Fri, 26 Jan 2024 09:43:41 -0800 Subject: [PATCH 07/12] fixing mocker patch for jobs --- app/formatters.py | 8 +- app/main/views/dashboard.py | 6 +- app/templates/views/dashboard/dashboard.html | 2 +- tests/app/main/views/test_dashboard.py | 85 +++++++++++++------- 4 files changed, 67 insertions(+), 34 deletions(-) diff --git a/app/formatters.py b/app/formatters.py index 971beb03e..c695746bf 100644 --- a/app/formatters.py +++ b/app/formatters.py @@ -99,9 +99,7 @@ def format_datetime_short(date): def format_datetime_short_america(date): - return "{} at {}".format( - format_date_numeric_america(date), format_time_12h(date) - ) + return "{} at {}".format(format_date_numeric_america(date), format_time_12h(date)) def format_date_numeric_america(date): @@ -117,7 +115,9 @@ def format_time_12h(date): date = parse_naive_dt(date) preferred_tz = pytz.timezone(get_user_preferred_timezone()) - return date.replace(tzinfo=timezone.utc).astimezone(preferred_tz).strftime("%I:%M %p") + return ( + date.replace(tzinfo=timezone.utc).astimezone(preferred_tz).strftime("%I:%M %p") + ) def format_datetime_relative(date): diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index cb868fde7..a88203ae7 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -58,11 +58,13 @@ def service_dashboard(service_id): { "job_id": job["id"], "time_left": get_time_left(job["created_at"]), - "download_link": url_for(".view_job_csv", service_id=current_service.id, job_id=job["id"]), + "download_link": url_for( + ".view_job_csv", service_id=current_service.id, job_id=job["id"] + ), "notification_count": job["notification_count"], "created_by": job["created_by"], } - for job in job_response.get('data', []) + for job in job_response["data"] ] return render_template( "views/dashboard/dashboard.html", diff --git a/app/templates/views/dashboard/dashboard.html b/app/templates/views/dashboard/dashboard.html index f4af4d930..b99f322c6 100644 --- a/app/templates/views/dashboard/dashboard.html +++ b/app/templates/views/dashboard/dashboard.html @@ -57,7 +57,7 @@ {% for notification in notifications %} {% if notification %} - + {{ notification.job.original_file_name if notification.job.original_file_name else 'Manually entered number'}}
diff --git a/tests/app/main/views/test_dashboard.py b/tests/app/main/views/test_dashboard.py index b15e55a48..7bb288ef2 100644 --- a/tests/app/main/views/test_dashboard.py +++ b/tests/app/main/views/test_dashboard.py @@ -130,6 +130,37 @@ MOCK_ONE_OFF_JOB = { } } +MOCK_JOBS = { + "data": [{ + "archived": False, + "created_at": "2024-01-04T20:43:52+00:00", + "created_by": { + "id": "mocked_user_id", + "name": "mocked_user", + }, + "id": "mocked_notification_id", + "job_status": 'finished', + "notification_count": 1, + "original_file_name": 'mocked_file.csv', + 'processing_finished': '2024-01-25T23:02:25+00:00', + 'processing_started': '2024-01-25T23:02:24+00:00', + 'scheduled_for': None, + 'service': '21b3ee3d-1cb0-4666-bfa0-9c5ac26d3fe3', + 'service_name': { + 'name': "Mock Texting Service" + }, + 'statistics': [{ + 'count': 1, + 'status': 'sending' + }], + 'template': '6a456418-498c-4c86-b0cd-9403c14a216c', + 'template_name': 'Mock Template Name', + 'template_type': 'sms', + 'template_version': 3, + 'updated_at': '2024-01-25T23:02:25+00:00', + }] +} + stub_template_stats = [ { "template_type": "sms", @@ -218,7 +249,7 @@ def test_get_started( "app.template_statistics_client.get_template_statistics_for_service", return_value=copy.deepcopy(stub_template_stats), ) - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -248,7 +279,7 @@ def test_get_started_is_hidden_once_templates_exist( "app.template_statistics_client.get_template_statistics_for_service", return_value=copy.deepcopy(stub_template_stats), ) - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -275,7 +306,7 @@ def test_inbound_messages_not_visible_to_service_without_permissions( mock_get_inbound_sms_summary, ): service_one["permissions"] = [] - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -303,7 +334,7 @@ def test_inbound_messages_shows_count_of_messages_when_there_are_messages( mock_get_inbound_sms_summary, ): service_one["permissions"] = ["inbound_sms"] - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -335,7 +366,7 @@ def test_inbound_messages_shows_count_of_messages_when_there_are_no_messages( mock_get_inbound_sms_summary_with_no_messages, ): service_one["permissions"] = ["inbound_sms"] - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -585,7 +616,7 @@ def test_should_show_recent_templates_on_dashboard( "app.template_statistics_client.get_template_statistics_for_service", return_value=copy.deepcopy(stub_template_stats), ) - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -642,7 +673,7 @@ def test_should_not_show_recent_templates_on_dashboard_if_only_one_template_used "app.template_statistics_client.get_template_statistics_for_service", return_value=stats, ) - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -782,7 +813,7 @@ def test_should_show_upcoming_jobs_on_dashboard( mock_get_free_sms_fragment_limit, mock_get_inbound_sms_summary, ): - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -824,7 +855,7 @@ def test_should_not_show_upcoming_jobs_on_dashboard_if_count_is_0( "soonest_scheduled_for": None, }, ) - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -850,7 +881,7 @@ def test_should_not_show_upcoming_jobs_on_dashboard_if_service_has_no_jobs( mock_get_free_sms_fragment_limit, mock_get_inbound_sms_summary, ): - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -904,7 +935,7 @@ def test_correct_font_size_for_big_numbers( service_one["permissions"] = permissions mocker.patch("app.main.views.dashboard.get_dashboard_totals", return_value=totals) - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -938,7 +969,7 @@ def test_should_not_show_jobs_on_dashboard_for_users_with_uploads_page( mock_get_free_sms_fragment_limit, mock_get_inbound_sms_summary, ): - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -1209,7 +1240,7 @@ def test_menu_send_messages( ): service_one["permissions"] = ["email", "sms"] - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -1246,7 +1277,7 @@ def test_menu_manage_service( mock_get_inbound_sms_summary, mock_get_free_sms_fragment_limit, ): - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -1283,7 +1314,7 @@ def test_menu_main_settings( mock_get_inbound_sms_summary, mock_get_free_sms_fragment_limit, ): - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -1319,7 +1350,7 @@ def test_menu_manage_api_keys( mock_get_inbound_sms_summary, mock_get_free_sms_fragment_limit, ): - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -1359,7 +1390,7 @@ def test_menu_all_services_for_platform_admin_user( mock_get_inbound_sms_summary, mock_get_free_sms_fragment_limit, ): - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -1404,7 +1435,7 @@ def test_route_for_service_permissions( mocker.patch( "app.service_api_client.get_global_notification_count", side_effect=_get ) - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -1460,7 +1491,7 @@ def test_service_dashboard_updates_gets_dashboard_totals( "sms": {"requested": 456, "delivered": 0, "failed": 0}, }, ) - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -1586,7 +1617,7 @@ def test_org_breadcrumbs_do_not_show_if_service_has_no_org( mock_get_annual_usage_for_service, mock_get_free_sms_fragment_limit, ): - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -1653,7 +1684,7 @@ def test_org_breadcrumbs_show_if_user_is_a_member_of_the_services_org( id_=ORGANISATION_ID, ), ) - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -1689,7 +1720,7 @@ def test_org_breadcrumbs_do_not_show_if_user_is_a_member_of_the_services_org_but ) mocker.patch("app.models.service.Organization") - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", @@ -1727,7 +1758,7 @@ def test_org_breadcrumbs_show_if_user_is_platform_admin( ), ) - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", @@ -1763,7 +1794,7 @@ def test_breadcrumb_shows_if_service_is_suspended( "app.service_api_client.get_service", return_value={"data": service_one_json} ) - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", @@ -1797,7 +1828,7 @@ def test_service_dashboard_shows_usage( "count": 500, }, ) - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -1840,7 +1871,7 @@ def test_service_dashboard_shows_free_allowance( } ], ) - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", @@ -1864,7 +1895,7 @@ def test_service_dashboard_shows_batched_jobs( mock_get_annual_usage_for_service, mock_get_free_sms_fragment_limit, ): - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, From 35b38f838c46064e7818185cd4b6d0e108535c71 Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Fri, 26 Jan 2024 11:16:45 -0800 Subject: [PATCH 08/12] fixed testing for dashboard.py --- tests/app/main/views/test_dashboard.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/app/main/views/test_dashboard.py b/tests/app/main/views/test_dashboard.py index 7bb288ef2..261f1f028 100644 --- a/tests/app/main/views/test_dashboard.py +++ b/tests/app/main/views/test_dashboard.py @@ -334,7 +334,6 @@ def test_inbound_messages_shows_count_of_messages_when_there_are_messages( mock_get_inbound_sms_summary, ): service_one["permissions"] = ["inbound_sms"] - mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -343,7 +342,8 @@ def test_inbound_messages_shows_count_of_messages_when_there_are_messages( "main.service_dashboard", service_id=SERVICE_ONE_ID, ) - mock_get_jobs.assert_called_once_with(SERVICE_ONE_ID) + mock_get_jobs.assert_called_with(SERVICE_ONE_ID) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) banner = page.select("a.banner-dashboard")[1] assert ( normalize_spaces(banner.text) @@ -366,7 +366,6 @@ def test_inbound_messages_shows_count_of_messages_when_there_are_no_messages( mock_get_inbound_sms_summary_with_no_messages, ): service_one["permissions"] = ["inbound_sms"] - mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -375,7 +374,8 @@ def test_inbound_messages_shows_count_of_messages_when_there_are_no_messages( "main.service_dashboard", service_id=SERVICE_ONE_ID, ) - mock_get_jobs.assert_called_once_with(SERVICE_ONE_ID) + mock_get_jobs.assert_called_with(SERVICE_ONE_ID) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) banner = page.select("a.banner-dashboard")[1] assert normalize_spaces(banner.text) == "0 text messages received" assert banner["href"] == url_for("main.inbox", service_id=SERVICE_ONE_ID) @@ -813,7 +813,6 @@ def test_should_show_upcoming_jobs_on_dashboard( mock_get_free_sms_fragment_limit, mock_get_inbound_sms_summary, ): - mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -823,7 +822,8 @@ def test_should_show_upcoming_jobs_on_dashboard( service_id=SERVICE_ONE_ID, ) - mock_get_jobs.assert_called_once_with(SERVICE_ONE_ID) + mock_get_jobs.assert_called_with(SERVICE_ONE_ID) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mock_get_scheduled_job_stats.assert_called_once_with(SERVICE_ONE_ID) assert normalize_spaces(page.select_one("main h2").text) == ("In the next few days") @@ -969,7 +969,6 @@ def test_should_not_show_jobs_on_dashboard_for_users_with_uploads_page( mock_get_free_sms_fragment_limit, mock_get_inbound_sms_summary, ): - mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -978,7 +977,8 @@ def test_should_not_show_jobs_on_dashboard_for_users_with_uploads_page( "main.service_dashboard", service_id=SERVICE_ONE_ID, ) - mock_get_jobs.assert_called_once_with(SERVICE_ONE_ID) + mock_get_jobs.assert_called_with(SERVICE_ONE_ID) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) for filename in { "export 1/1/2016.xls", "all email addresses.xlsx", From 1b4754386ce6ec7ecb5d765e3f69128e5fb58083 Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Fri, 26 Jan 2024 11:29:03 -0800 Subject: [PATCH 09/12] update testing for signout and accept invite --- tests/app/main/views/test_accept_invite.py | 72 ++++++---------- tests/app/main/views/test_dashboard.py | 98 ++++++---------------- tests/app/main/views/test_sign_out.py | 70 ++++++---------- 3 files changed, 78 insertions(+), 162 deletions(-) diff --git a/tests/app/main/views/test_accept_invite.py b/tests/app/main/views/test_accept_invite.py index 76d3a6b79..d62b5d0ba 100644 --- a/tests/app/main/views/test_accept_invite.py +++ b/tests/app/main/views/test_accept_invite.py @@ -71,52 +71,34 @@ FAKE_ONE_OFF_NOTIFICATION = { "total": 1, } -MOCK_ONE_OFF_JOB = { - "data": { - "api_key": "mocked_api_key", - "billable_units": 1, - "carrier": "mocked_carrier", - "client_reference": "mocked_client_reference", - "created_at": "2024-01-04T20:43:52+00:00", - "created_by": { - "email_address": "mocked_email@example.com", - "id": "mocked_user_id", - "name": "mocked_user", - }, - "document_download_count": None, - "id": "mocked_notification_id", - "international": False, - "job": {"id": "mocked_job_id", "original_file_name": "mocked_file.txt"}, - "job_row_number": 0, - "key_name": "mocked_key_name", - "key_type": "normal", - "normalised_to": "+12133166548", - "notification_type": "sms", - "personalisation": {"phonenumber": "+12133166548"}, - "phone_prefix": "1", - "provider_response": "mocked_provider_response", - "rate_multiplier": 1.0, - "reference": "mocked_reference", - "reply_to_text": "mocked_reply_text", - "sent_at": "2024-01-04T20:43:53+00:00", - "sent_by": "mocked_sender", - "service": "mocked_service_id", - "status": "sending", - "template": { - "content": "((day of week)) and ((fave color))", - "id": "bd9caa7e-00ee-4c5a-839e-10ae1a7e6f73", - "name": "personalized", - "redact_personalisation": False, - "subject": None, +MOCK_JOBS = { + "data": [ + { + "archived": False, + "created_at": "2024-01-04T20:43:52+00:00", + "created_by": { + "id": "mocked_user_id", + "name": "mocked_user", + }, + "id": "mocked_notification_id", + "job_status": "finished", + "notification_count": 1, + "original_file_name": "mocked_file.csv", + "processing_finished": "2024-01-25T23:02:25+00:00", + "processing_started": "2024-01-25T23:02:24+00:00", + "scheduled_for": None, + "service": "21b3ee3d-1cb0-4666-bfa0-9c5ac26d3fe3", + "service_name": {"name": "Mock Texting Service"}, + "statistics": [{"count": 1, "status": "sending"}], + "template": "6a456418-498c-4c86-b0cd-9403c14a216c", + "template_name": "Mock Template Name", "template_type": "sms", - "version": 1, - }, - "to": "+12133166548", - "updated_at": "2024-01-04T20:43:53+00:00", - } + "template_version": 3, + "updated_at": "2024-01-25T23:02:25+00:00", + } + ] } - @pytest.fixture() def _mock_no_users_for_service(mocker): mocker.patch("app.models.user.Users.client_method", return_value=[]) @@ -309,7 +291,7 @@ def test_accepting_invite_removes_invite_from_session( sample_invite["email_address"] = user["email_address"] client_request.login(user) - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, @@ -725,7 +707,7 @@ def test_new_invited_user_verifies_and_added_to_service( token="thisisnotarealtoken", _expected_redirect=url_for("main.register_from_invite"), ) - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", return_value=FAKE_ONE_OFF_NOTIFICATION, diff --git a/tests/app/main/views/test_dashboard.py b/tests/app/main/views/test_dashboard.py index 261f1f028..19dfc05b8 100644 --- a/tests/app/main/views/test_dashboard.py +++ b/tests/app/main/views/test_dashboard.py @@ -85,80 +85,32 @@ FAKE_ONE_OFF_NOTIFICATION = { "total": 1, } -MOCK_ONE_OFF_JOB = { - "data": { - "api_key": "mocked_api_key", - "billable_units": 1, - "carrier": "mocked_carrier", - "client_reference": "mocked_client_reference", - "created_at": "2024-01-04T20:43:52+00:00", - "created_by": { - "email_address": "mocked_email@example.com", - "id": "mocked_user_id", - "name": "mocked_user", - }, - "document_download_count": None, - "id": "mocked_notification_id", - "international": False, - "job": {"id": "mocked_job_id", "original_file_name": "mocked_file.txt"}, - "job_row_number": 0, - "key_name": "mocked_key_name", - "key_type": "normal", - "normalised_to": "+12133166548", - "notification_type": "sms", - "personalisation": {"phonenumber": "+12133166548"}, - "phone_prefix": "1", - "provider_response": "mocked_provider_response", - "rate_multiplier": 1.0, - "reference": "mocked_reference", - "reply_to_text": "mocked_reply_text", - "sent_at": "2024-01-04T20:43:53+00:00", - "sent_by": "mocked_sender", - "service": "mocked_service_id", - "status": "sending", - "template": { - "content": "((day of week)) and ((fave color))", - "id": "bd9caa7e-00ee-4c5a-839e-10ae1a7e6f73", - "name": "personalized", - "redact_personalisation": False, - "subject": None, - "template_type": "sms", - "version": 1, - }, - "to": "+12133166548", - "updated_at": "2024-01-04T20:43:53+00:00", - } -} - MOCK_JOBS = { - "data": [{ - "archived": False, - "created_at": "2024-01-04T20:43:52+00:00", - "created_by": { - "id": "mocked_user_id", - "name": "mocked_user", - }, - "id": "mocked_notification_id", - "job_status": 'finished', - "notification_count": 1, - "original_file_name": 'mocked_file.csv', - 'processing_finished': '2024-01-25T23:02:25+00:00', - 'processing_started': '2024-01-25T23:02:24+00:00', - 'scheduled_for': None, - 'service': '21b3ee3d-1cb0-4666-bfa0-9c5ac26d3fe3', - 'service_name': { - 'name': "Mock Texting Service" - }, - 'statistics': [{ - 'count': 1, - 'status': 'sending' - }], - 'template': '6a456418-498c-4c86-b0cd-9403c14a216c', - 'template_name': 'Mock Template Name', - 'template_type': 'sms', - 'template_version': 3, - 'updated_at': '2024-01-25T23:02:25+00:00', - }] + "data": [ + { + "archived": False, + "created_at": "2024-01-04T20:43:52+00:00", + "created_by": { + "id": "mocked_user_id", + "name": "mocked_user", + }, + "id": "mocked_notification_id", + "job_status": "finished", + "notification_count": 1, + "original_file_name": "mocked_file.csv", + "processing_finished": "2024-01-25T23:02:25+00:00", + "processing_started": "2024-01-25T23:02:24+00:00", + "scheduled_for": None, + "service": "21b3ee3d-1cb0-4666-bfa0-9c5ac26d3fe3", + "service_name": {"name": "Mock Texting Service"}, + "statistics": [{"count": 1, "status": "sending"}], + "template": "6a456418-498c-4c86-b0cd-9403c14a216c", + "template_name": "Mock Template Name", + "template_type": "sms", + "template_version": 3, + "updated_at": "2024-01-25T23:02:25+00:00", + } + ] } stub_template_stats = [ diff --git a/tests/app/main/views/test_sign_out.py b/tests/app/main/views/test_sign_out.py index 899216cd6..cabdb26a6 100644 --- a/tests/app/main/views/test_sign_out.py +++ b/tests/app/main/views/test_sign_out.py @@ -57,52 +57,34 @@ FAKE_ONE_OFF_NOTIFICATION = { "total": 1, } -MOCK_ONE_OFF_JOB = { - "data": { - "api_key": "mocked_api_key", - "billable_units": 1, - "carrier": "mocked_carrier", - "client_reference": "mocked_client_reference", - "created_at": "2024-01-04T20:43:52+00:00", - "created_by": { - "email_address": "mocked_email@example.com", - "id": "mocked_user_id", - "name": "mocked_user", - }, - "document_download_count": None, - "id": "mocked_notification_id", - "international": False, - "job": {"id": "mocked_job_id", "original_file_name": "mocked_file.txt"}, - "job_row_number": 0, - "key_name": "mocked_key_name", - "key_type": "normal", - "normalised_to": "+12133166548", - "notification_type": "sms", - "personalisation": {"phonenumber": "+12133166548"}, - "phone_prefix": "1", - "provider_response": "mocked_provider_response", - "rate_multiplier": 1.0, - "reference": "mocked_reference", - "reply_to_text": "mocked_reply_text", - "sent_at": "2024-01-04T20:43:53+00:00", - "sent_by": "mocked_sender", - "service": "mocked_service_id", - "status": "sending", - "template": { - "content": "((day of week)) and ((fave color))", - "id": "bd9caa7e-00ee-4c5a-839e-10ae1a7e6f73", - "name": "personalized", - "redact_personalisation": False, - "subject": None, +MOCK_JOBS = { + "data": [ + { + "archived": False, + "created_at": "2024-01-04T20:43:52+00:00", + "created_by": { + "id": "mocked_user_id", + "name": "mocked_user", + }, + "id": "mocked_notification_id", + "job_status": "finished", + "notification_count": 1, + "original_file_name": "mocked_file.csv", + "processing_finished": "2024-01-25T23:02:25+00:00", + "processing_started": "2024-01-25T23:02:24+00:00", + "scheduled_for": None, + "service": "21b3ee3d-1cb0-4666-bfa0-9c5ac26d3fe3", + "service_name": {"name": "Mock Texting Service"}, + "statistics": [{"count": 1, "status": "sending"}], + "template": "6a456418-498c-4c86-b0cd-9403c14a216c", + "template_name": "Mock Template Name", "template_type": "sms", - "version": 1, - }, - "to": "+12133166548", - "updated_at": "2024-01-04T20:43:53+00:00", - } + "template_version": 3, + "updated_at": "2024-01-25T23:02:25+00:00", + } + ] } - def test_render_sign_out_redirects_to_sign_in(client_request): # TODO with the change to using login.gov, we no longer redirect directly to the sign in page. # Instead we redirect to login.gov which redirects us to the sign in page. However, the @@ -139,7 +121,7 @@ def test_sign_out_user( with client_request.session_transaction() as session: assert session.get("user_id") is not None # Check we are logged in - mocker.patch("app.job_api_client.get_job", return_value=MOCK_ONE_OFF_JOB) + mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( "app.notification_api_client.get_notifications_for_service", From f7924320dfa0d1b11287b5ebf05ccccfb84b385a Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Fri, 26 Jan 2024 11:32:42 -0800 Subject: [PATCH 10/12] adjusted styling --- tests/app/main/views/test_accept_invite.py | 1 + tests/app/main/views/test_sign_out.py | 1 + 2 files changed, 2 insertions(+) diff --git a/tests/app/main/views/test_accept_invite.py b/tests/app/main/views/test_accept_invite.py index d62b5d0ba..1deeca299 100644 --- a/tests/app/main/views/test_accept_invite.py +++ b/tests/app/main/views/test_accept_invite.py @@ -99,6 +99,7 @@ MOCK_JOBS = { ] } + @pytest.fixture() def _mock_no_users_for_service(mocker): mocker.patch("app.models.user.Users.client_method", return_value=[]) diff --git a/tests/app/main/views/test_sign_out.py b/tests/app/main/views/test_sign_out.py index cabdb26a6..d70c5d0f8 100644 --- a/tests/app/main/views/test_sign_out.py +++ b/tests/app/main/views/test_sign_out.py @@ -85,6 +85,7 @@ MOCK_JOBS = { ] } + def test_render_sign_out_redirects_to_sign_in(client_request): # TODO with the change to using login.gov, we no longer redirect directly to the sign in page. # Instead we redirect to login.gov which redirects us to the sign in page. However, the From 1f12dd3908f694623b80132241820e88083bb64f Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Fri, 26 Jan 2024 11:47:46 -0800 Subject: [PATCH 11/12] show only the first 5 rows --- app/templates/views/dashboard/dashboard.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/templates/views/dashboard/dashboard.html b/app/templates/views/dashboard/dashboard.html index b99f322c6..a151053e3 100644 --- a/app/templates/views/dashboard/dashboard.html +++ b/app/templates/views/dashboard/dashboard.html @@ -55,7 +55,8 @@ - {% for notification in notifications %} + {{ notifications}} + {% for notification in notifications[:5] %} {% if notification %} From 6b4a5d009c51383637c0cbe5937aea7998a5b938 Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Fri, 26 Jan 2024 11:51:52 -0800 Subject: [PATCH 12/12] removed comment --- app/templates/views/dashboard/dashboard.html | 1 - 1 file changed, 1 deletion(-) diff --git a/app/templates/views/dashboard/dashboard.html b/app/templates/views/dashboard/dashboard.html index a151053e3..24972b04b 100644 --- a/app/templates/views/dashboard/dashboard.html +++ b/app/templates/views/dashboard/dashboard.html @@ -55,7 +55,6 @@ - {{ notifications}} {% for notification in notifications[:5] %} {% if notification %}