From 61fb59f1cb143ed559c5b25c0fb3e848a424aacc Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Mon, 24 Feb 2025 14:08:26 -0800 Subject: [PATCH 1/7] total message ratio update --- app/assets/javascripts/totalMessagesChart.js | 20 ++++++++++---------- app/main/views/dashboard.py | 19 ++++++------------- app/notify_client/service_api_client.py | 4 ++++ app/templates/views/dashboard/dashboard.html | 2 +- 4 files changed, 21 insertions(+), 24 deletions(-) diff --git a/app/assets/javascripts/totalMessagesChart.js b/app/assets/javascripts/totalMessagesChart.js index 68c9fd8f9..cf8808094 100644 --- a/app/assets/javascripts/totalMessagesChart.js +++ b/app/assets/javascripts/totalMessagesChart.js @@ -6,17 +6,17 @@ var chartTitle = document.getElementById('chartTitle').textContent; // Access data attributes from the HTML - var sms_sent = parseInt(chartContainer.getAttribute('data-sms-sent')); - var sms_remaining_messages = parseInt(chartContainer.getAttribute('data-sms-allowance-remaining')); - var totalMessages = sms_sent + sms_remaining_messages; + var messages_sent = parseInt(chartContainer.getAttribute('data-messages-sent')); + var total_message_limit = parseInt(chartContainer.getAttribute('data-total-message-limit')); + var totalMessages = messages_sent + total_message_limit; // Update the message below the chart - document.getElementById('message').innerText = `${sms_sent.toLocaleString()} sent / ${sms_remaining_messages.toLocaleString()} remaining`; + document.getElementById('message').innerText = `${messages_sent.toLocaleString()} sent / ${total_message_limit.toLocaleString()} remaining`; // Calculate minimum width for "Messages Sent" as 1% of the total chart width - var minSentPercentage = (sms_sent === 0) ? 0 : 0.02; + var minSentPercentage = (messages_sent === 0) ? 0 : 0.02; var minSentValue = totalMessages * minSentPercentage; - var displaySent = Math.max(sms_sent, minSentValue); + var displaySent = Math.max(messages_sent, minSentValue); var displayRemaining = totalMessages - displaySent; var svg = d3.select("#totalMessageChart"); @@ -48,7 +48,7 @@ .attr("width", 0) // Start with width 0 for animation .on('mouseover', function(event) { tooltip.style('display', 'block') - .html(`Messages Sent: ${sms_sent.toLocaleString()}`); + .html(`Messages Sent: ${messages_sent.toLocaleString()}`); }) .on('mousemove', function(event) { tooltip.style('left', `${event.pageX + 10}px`) @@ -66,7 +66,7 @@ .attr("width", 0) // Start with width 0 for animation .on('mouseover', function(event) { tooltip.style('display', 'block') - .html(`Remaining: ${sms_remaining_messages.toLocaleString()}`); + .html(`Remaining: ${total_message_limit.toLocaleString()}`); }) .on('mousemove', function(event) { tooltip.style('left', `${event.pageX + 10}px`) @@ -115,9 +115,9 @@ var tbodyRow = document.createElement('tr'); var tdMessagesSent = document.createElement('td'); - tdMessagesSent.textContent = sms_sent.toLocaleString(); // Value for Messages Sent + tdMessagesSent.textContent = messages_sent.toLocaleString(); // Value for Messages Sent var tdRemaining = document.createElement('td'); - tdRemaining.textContent = sms_remaining_messages.toLocaleString(); // Value for Remaining + tdRemaining.textContent = total_message_limit.toLocaleString(); // Value for Remaining tbodyRow.appendChild(tdMessagesSent); tbodyRow.appendChild(tdRemaining); diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index 1f8cac573..f18aac3b8 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -48,31 +48,24 @@ def service_dashboard(service_id): if not current_user.has_permissions("view_activity"): return redirect(url_for("main.choose_template", service_id=service_id)) - yearly_usage = billing_api_client.get_annual_usage_for_service( - service_id, - get_current_financial_year(), - ) - free_sms_allowance = billing_api_client.get_free_sms_fragment_limit_for_year( - current_service.id, - ) - usage_data = get_annual_usage_breakdown(yearly_usage, free_sms_allowance) - sms_sent = usage_data["sms_sent"] - sms_allowance_remaining = usage_data["sms_allowance_remaining"] - job_response = job_api_client.get_jobs(service_id)["data"] service_data_retention_days = 7 filtered_jobs = [job for job in job_response if job["job_status"] != "cancelled"] sorted_jobs = sorted(filtered_jobs, key=lambda job: job["created_at"], reverse=True) + total_messages = service_api_client.get_service_message_ratio(service_id) + total_message_limit = total_messages.get('total_message_limit', 0) + messages_sent = total_messages.get('messages_sent', 0) + return render_template( "views/dashboard/dashboard.html", updates_url=url_for(".service_dashboard_updates", service_id=service_id), partials=get_dashboard_partials(service_id), jobs=sorted_jobs, service_data_retention_days=service_data_retention_days, - sms_sent=sms_sent, - sms_allowance_remaining=sms_allowance_remaining, + total_message_limit=total_message_limit, + messages_sent=messages_sent ) diff --git a/app/notify_client/service_api_client.py b/app/notify_client/service_api_client.py index 0229fee3d..09e7513bd 100644 --- a/app/notify_client/service_api_client.py +++ b/app/notify_client/service_api_client.py @@ -537,6 +537,10 @@ class ServiceAPIClient(NotifyAdminAPIClient): """ return self.get("/service/invite/redis/{0}".format(redis_key)) + def get_service_message_ratio(self, service_id): + return self.get( + url="service/get-service-message-ratio?service_id={0}".format(service_id), + ) service_api_client = ServiceAPIClient() diff --git a/app/templates/views/dashboard/dashboard.html b/app/templates/views/dashboard/dashboard.html index bd19585c3..1a515ea7e 100644 --- a/app/templates/views/dashboard/dashboard.html +++ b/app/templates/views/dashboard/dashboard.html @@ -26,7 +26,7 @@ {{ ajax_block(partials, updates_url, 'inbox') }} -
+

Total messages

From 5c9d1900215fa03b8d1c97b284ebbe08c7e85061 Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Mon, 24 Feb 2025 14:44:43 -0800 Subject: [PATCH 2/7] total message ratio update --- app/assets/javascripts/totalMessagesChart.js | 20 ++++++++++---------- app/main/views/dashboard.py | 5 ++--- app/templates/views/dashboard/dashboard.html | 2 +- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/app/assets/javascripts/totalMessagesChart.js b/app/assets/javascripts/totalMessagesChart.js index cf8808094..2c4003987 100644 --- a/app/assets/javascripts/totalMessagesChart.js +++ b/app/assets/javascripts/totalMessagesChart.js @@ -6,17 +6,17 @@ var chartTitle = document.getElementById('chartTitle').textContent; // Access data attributes from the HTML - var messages_sent = parseInt(chartContainer.getAttribute('data-messages-sent')); - var total_message_limit = parseInt(chartContainer.getAttribute('data-total-message-limit')); - var totalMessages = messages_sent + total_message_limit; + var messagesSent = parseInt(chartContainer.getAttribute('data-messages-sent')); + var messagesRemaining = parseInt(chartContainer.getAttribute('data-messages-remaining')); + var totalMessages = messagesSent + messagesRemaining; // Update the message below the chart - document.getElementById('message').innerText = `${messages_sent.toLocaleString()} sent / ${total_message_limit.toLocaleString()} remaining`; + document.getElementById('message').innerText = `${messagesSent.toLocaleString()} sent / ${messagesRemaining.toLocaleString()} remaining`; // Calculate minimum width for "Messages Sent" as 1% of the total chart width - var minSentPercentage = (messages_sent === 0) ? 0 : 0.02; + var minSentPercentage = (messagesSent === 0) ? 0 : 0.02; var minSentValue = totalMessages * minSentPercentage; - var displaySent = Math.max(messages_sent, minSentValue); + var displaySent = Math.max(messagesSent, minSentValue); var displayRemaining = totalMessages - displaySent; var svg = d3.select("#totalMessageChart"); @@ -48,7 +48,7 @@ .attr("width", 0) // Start with width 0 for animation .on('mouseover', function(event) { tooltip.style('display', 'block') - .html(`Messages Sent: ${messages_sent.toLocaleString()}`); + .html(`Messages Sent: ${messagesSent.toLocaleString()}`); }) .on('mousemove', function(event) { tooltip.style('left', `${event.pageX + 10}px`) @@ -66,7 +66,7 @@ .attr("width", 0) // Start with width 0 for animation .on('mouseover', function(event) { tooltip.style('display', 'block') - .html(`Remaining: ${total_message_limit.toLocaleString()}`); + .html(`Remaining: ${messagesRemaining.toLocaleString()}`); }) .on('mousemove', function(event) { tooltip.style('left', `${event.pageX + 10}px`) @@ -115,9 +115,9 @@ var tbodyRow = document.createElement('tr'); var tdMessagesSent = document.createElement('td'); - tdMessagesSent.textContent = messages_sent.toLocaleString(); // Value for Messages Sent + tdMessagesSent.textContent = messagesSent.toLocaleString(); // Value for Messages Sent var tdRemaining = document.createElement('td'); - tdRemaining.textContent = total_message_limit.toLocaleString(); // Value for Remaining + tdRemaining.textContent = messagesRemaining.toLocaleString(); // Value for Remaining tbodyRow.appendChild(tdMessagesSent); tbodyRow.appendChild(tdRemaining); diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index f18aac3b8..ccebc81fc 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -55,16 +55,15 @@ def service_dashboard(service_id): sorted_jobs = sorted(filtered_jobs, key=lambda job: job["created_at"], reverse=True) total_messages = service_api_client.get_service_message_ratio(service_id) - total_message_limit = total_messages.get('total_message_limit', 0) + messages_remaining = total_messages.get('messages_remaining', 0) messages_sent = total_messages.get('messages_sent', 0) - return render_template( "views/dashboard/dashboard.html", updates_url=url_for(".service_dashboard_updates", service_id=service_id), partials=get_dashboard_partials(service_id), jobs=sorted_jobs, service_data_retention_days=service_data_retention_days, - total_message_limit=total_message_limit, + messages_remaining=messages_remaining, messages_sent=messages_sent ) diff --git a/app/templates/views/dashboard/dashboard.html b/app/templates/views/dashboard/dashboard.html index 1a515ea7e..15df829f3 100644 --- a/app/templates/views/dashboard/dashboard.html +++ b/app/templates/views/dashboard/dashboard.html @@ -26,7 +26,7 @@ {{ ajax_block(partials, updates_url, 'inbox') }} -
+

Total messages

From 79192e29b688fcb503a3b0e816201b2bf9f44a34 Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Tue, 25 Feb 2025 13:12:55 -0800 Subject: [PATCH 3/7] fix jest testing --- tests/javascripts/totalMessagesChart.test.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/javascripts/totalMessagesChart.test.js b/tests/javascripts/totalMessagesChart.test.js index 87c671430..5138f9a43 100644 --- a/tests/javascripts/totalMessagesChart.test.js +++ b/tests/javascripts/totalMessagesChart.test.js @@ -22,7 +22,7 @@ Object.defineProperty(HTMLElement.prototype, 'clientWidth', { beforeEach(() => { // Set up the DOM with the D3 script included document.body.innerHTML = ` -
+

Total Messages

@@ -76,8 +76,8 @@ test('Populates the accessible table correctly', () => { expect(headers[1].textContent).toBe('Remaining'); const firstRowCells = rows[1].getElementsByTagName('td'); - expect(firstRowCells[0].textContent).toBe('100'); - expect(firstRowCells[1].textContent).toBe('249,900'); + expect(firstRowCells[0].textContent).toBe('28,081'); + expect(firstRowCells[1].textContent).toBe('71,919'); }); // Test to check if the chart title is correctly set @@ -114,7 +114,7 @@ test('Chart resizes correctly on window resize', done => { // Testing the tooltip test('Tooltip displays on hover', () => { document.body.innerHTML = ` -
+

Total Messages

From df3e2264ec8630b508dbb08c40dffdde4b1936f4 Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Tue, 25 Feb 2025 13:19:59 -0800 Subject: [PATCH 4/7] flake8 --- app/notify_client/service_api_client.py | 1 + 1 file changed, 1 insertion(+) diff --git a/app/notify_client/service_api_client.py b/app/notify_client/service_api_client.py index 09e7513bd..6ccc2747e 100644 --- a/app/notify_client/service_api_client.py +++ b/app/notify_client/service_api_client.py @@ -542,6 +542,7 @@ class ServiceAPIClient(NotifyAdminAPIClient): url="service/get-service-message-ratio?service_id={0}".format(service_id), ) + service_api_client = ServiceAPIClient() From baf9b69fbb80b9e8313ac6cfdd47b3111a16979d Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Tue, 25 Feb 2025 14:01:56 -0800 Subject: [PATCH 5/7] fix pytest --- tests/app/main/views/test_dashboard.py | 207 +++++++------------------ 1 file changed, 56 insertions(+), 151 deletions(-) diff --git a/tests/app/main/views/test_dashboard.py b/tests/app/main/views/test_dashboard.py index 461888c5c..626cd782b 100644 --- a/tests/app/main/views/test_dashboard.py +++ b/tests/app/main/views/test_dashboard.py @@ -193,6 +193,12 @@ mock_daily_stats_by_user = { }, } +mock_service_message_ratio = { + "messages_remaining": 71919, + "messages_sent": 28081, + "total_message_limit": 100000 + } + @pytest.mark.parametrize( "user", @@ -252,12 +258,8 @@ def test_get_started( ) mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = client_request.get( "main.service_dashboard", @@ -286,12 +288,8 @@ def test_get_started_is_hidden_once_templates_exist( ) mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = client_request.get( "main.service_dashboard", @@ -317,12 +315,8 @@ def test_inbound_messages_not_visible_to_service_without_permissions( service_one["permissions"] = [] mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = client_request.get( "main.service_dashboard", @@ -348,12 +342,8 @@ def test_inbound_messages_shows_count_of_messages_when_there_are_messages( ): service_one["permissions"] = ["inbound_sms"] mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = client_request.get( "main.service_dashboard", @@ -384,12 +374,8 @@ def test_inbound_messages_shows_count_of_messages_when_there_are_no_messages( ): service_one["permissions"] = ["inbound_sms"] mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = client_request.get( "main.service_dashboard", @@ -638,12 +624,8 @@ def test_should_show_recent_templates_on_dashboard( ) mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = client_request.get( "main.service_dashboard", @@ -690,12 +672,8 @@ def test_should_not_show_recent_templates_on_dashboard_if_only_one_template_used ) mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID) main = page.select_one("main").text @@ -849,12 +827,8 @@ def test_should_show_upcoming_jobs_on_dashboard( mock_get_inbound_sms_summary, ): mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = client_request.get( "main.service_dashboard", @@ -896,12 +870,8 @@ def test_should_not_show_upcoming_jobs_on_dashboard_if_count_is_0( ) mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = client_request.get( "main.service_dashboard", @@ -926,12 +896,8 @@ def test_should_not_show_upcoming_jobs_on_dashboard_if_service_has_no_jobs( ): mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = client_request.get( "main.service_dashboard", @@ -1016,12 +982,8 @@ def test_should_not_show_jobs_on_dashboard_for_users_with_uploads_page( mock_get_inbound_sms_summary, ): mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = client_request.get( "main.service_dashboard", @@ -1284,12 +1246,8 @@ def test_menu_send_messages( mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = _test_dashboard_menu( client_request, @@ -1325,12 +1283,8 @@ def test_menu_manage_service( ): mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = _test_dashboard_menu( client_request, @@ -1366,12 +1320,8 @@ def test_menu_main_settings( ): mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = _test_settings_menu( client_request, @@ -1406,12 +1356,8 @@ def test_menu_manage_api_keys( ): mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = _test_dashboard_menu( client_request, @@ -1447,12 +1393,8 @@ def test_menu_all_services_for_platform_admin_user( ): mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = _test_dashboard_menu( client_request, mocker, platform_admin_user, service_one, [] @@ -1490,12 +1432,8 @@ def test_route_for_service_permissions( ) mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) validate_route_permission( mocker, @@ -1639,12 +1577,8 @@ def test_org_breadcrumbs_do_not_show_if_service_has_no_org( ): mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID) @@ -1710,12 +1644,8 @@ def test_org_breadcrumbs_show_if_user_is_a_member_of_the_services_org( ) mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID) @@ -1750,12 +1680,8 @@ def test_org_breadcrumbs_do_not_show_if_user_is_a_member_of_the_services_org_but mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID) @@ -1792,12 +1718,8 @@ def test_org_breadcrumbs_show_if_user_is_platform_admin( mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) client_request.login(platform_admin_user, service_one_json) @@ -1829,14 +1751,9 @@ def test_breadcrumb_shows_if_service_is_suspended( ) mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) - mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID) @@ -1869,12 +1786,8 @@ def test_service_dashboard_shows_usage( ) mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) service_one["permissions"] = permissions @@ -1909,12 +1822,8 @@ def test_service_dashboard_shows_free_allowance( ) mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) @@ -1930,12 +1839,8 @@ def test_service_dashboard_shows_batched_jobs( ): mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) mocker.patch( - "app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value=mock_daily_stats_by_user, + "app.service_api_client.get_service_message_ratio", + return_value=mock_service_message_ratio, ) page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID) From c93d00dcbe74263c26f7d1ea0f05d8f3d30e5247 Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Wed, 26 Feb 2025 09:50:49 -0800 Subject: [PATCH 6/7] fix test --- .ds.baseline | 4 ++-- tests/app/main/views/test_accept_invite.py | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.ds.baseline b/.ds.baseline index 999298014..844cd9b54 100644 --- a/.ds.baseline +++ b/.ds.baseline @@ -527,7 +527,7 @@ "filename": "tests/app/main/views/test_accept_invite.py", "hashed_secret": "07f0a6c13923fc3b5f0c57ffa2d29b715eb80d71", "is_verified": false, - "line_number": 643, + "line_number": 652, "is_secret": false } ], @@ -684,5 +684,5 @@ } ] }, - "generated_at": "2025-02-03T17:01:06Z" + "generated_at": "2025-02-26T17:50:29Z" } diff --git a/tests/app/main/views/test_accept_invite.py b/tests/app/main/views/test_accept_invite.py index ef5e56fda..1492cfe74 100644 --- a/tests/app/main/views/test_accept_invite.py +++ b/tests/app/main/views/test_accept_invite.py @@ -321,6 +321,15 @@ def test_accepting_invite_removes_invite_from_session( }, }, ) + + mocker.patch( + "app.service_api_client.get_service_message_ratio", + return_value={ + "messages_remaining": 71919, + "messages_sent": 28081, + "total_message_limit": 100000 + }, + ) page = client_request.get( "main.accept_invite", token="thisisnotarealtoken", From 3455235a8bfda829300cf2e85e4a04132d46472e Mon Sep 17 00:00:00 2001 From: Beverly Nguyen Date: Wed, 26 Feb 2025 10:19:47 -0800 Subject: [PATCH 7/7] fix test --- .ds.baseline | 4 ++-- app/main/views/dashboard.py | 6 +++--- tests/app/main/views/test_accept_invite.py | 23 +--------------------- tests/app/main/views/test_dashboard.py | 8 ++++---- tests/app/main/views/test_sign_out.py | 21 ++++---------------- 5 files changed, 14 insertions(+), 48 deletions(-) diff --git a/.ds.baseline b/.ds.baseline index 844cd9b54..f0d0e6d2c 100644 --- a/.ds.baseline +++ b/.ds.baseline @@ -527,7 +527,7 @@ "filename": "tests/app/main/views/test_accept_invite.py", "hashed_secret": "07f0a6c13923fc3b5f0c57ffa2d29b715eb80d71", "is_verified": false, - "line_number": 652, + "line_number": 631, "is_secret": false } ], @@ -684,5 +684,5 @@ } ] }, - "generated_at": "2025-02-26T17:50:29Z" + "generated_at": "2025-02-26T18:19:37Z" } diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index b3428eb45..b10390665 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -59,8 +59,8 @@ def service_dashboard(service_id): ] total_messages = service_api_client.get_service_message_ratio(service_id) - messages_remaining = total_messages.get('messages_remaining', 0) - messages_sent = total_messages.get('messages_sent', 0) + messages_remaining = total_messages.get("messages_remaining", 0) + messages_sent = total_messages.get("messages_sent", 0) return render_template( "views/dashboard/dashboard.html", updates_url=url_for(".service_dashboard_updates", service_id=service_id), @@ -68,7 +68,7 @@ def service_dashboard(service_id): jobs=job_lists, service_data_retention_days=service_data_retention_days, messages_remaining=messages_remaining, - messages_sent=messages_sent + messages_sent=messages_sent, ) diff --git a/tests/app/main/views/test_accept_invite.py b/tests/app/main/views/test_accept_invite.py index 1492cfe74..297dc7603 100644 --- a/tests/app/main/views/test_accept_invite.py +++ b/tests/app/main/views/test_accept_invite.py @@ -300,34 +300,13 @@ def test_accepting_invite_removes_invite_from_session( client_request.login(user) mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) - date_range = {"start_date": "2024-01-01", "days": 7} - - mocker.patch( - "app.main.views.dashboard.get_daily_stats", - return_value={ - date_range["start_date"]: { - "email": {"delivered": 0, "failure": 0, "requested": 0}, - "sms": {"delivered": 0, "failure": 1, "requested": 1}, - }, - }, - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value={ - date_range["start_date"]: { - "email": {"delivered": 1, "failure": 0, "requested": 1}, - "sms": {"delivered": 1, "failure": 0, "requested": 1}, - }, - }, - ) mocker.patch( "app.service_api_client.get_service_message_ratio", return_value={ "messages_remaining": 71919, "messages_sent": 28081, - "total_message_limit": 100000 + "total_message_limit": 100000, }, ) page = client_request.get( diff --git a/tests/app/main/views/test_dashboard.py b/tests/app/main/views/test_dashboard.py index 626cd782b..96f91197a 100644 --- a/tests/app/main/views/test_dashboard.py +++ b/tests/app/main/views/test_dashboard.py @@ -194,10 +194,10 @@ mock_daily_stats_by_user = { } mock_service_message_ratio = { - "messages_remaining": 71919, - "messages_sent": 28081, - "total_message_limit": 100000 - } + "messages_remaining": 71919, + "messages_sent": 28081, + "total_message_limit": 100000, +} @pytest.mark.parametrize( diff --git a/tests/app/main/views/test_sign_out.py b/tests/app/main/views/test_sign_out.py index 9afbfab97..995050204 100644 --- a/tests/app/main/views/test_sign_out.py +++ b/tests/app/main/views/test_sign_out.py @@ -128,25 +128,12 @@ def test_sign_out_user( # Check we are logged in mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS) - date_range = {"start_date": "2024-01-01", "days": 7} - mocker.patch( - "app.main.views.dashboard.get_daily_stats", + "app.service_api_client.get_service_message_ratio", return_value={ - date_range["start_date"]: { - "email": {"delivered": 0, "failure": 0, "requested": 0}, - "sms": {"delivered": 0, "failure": 1, "requested": 1}, - }, - }, - ) - - mocker.patch( - "app.main.views.dashboard.get_daily_stats_by_user", - return_value={ - date_range["start_date"]: { - "email": {"delivered": 1, "failure": 0, "requested": 1}, - "sms": {"delivered": 1, "failure": 0, "requested": 1}, - }, + "messages_remaining": 71919, + "messages_sent": 28081, + "total_message_limit": 100000, }, )