mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-11 18:37:33 -04:00
Merge pull request #2359 from GSA/1543-review-and-update-total-messages-chart-on-dashboard-and-usagehtml-with-new-data-from-backend
Total message ratio update
This commit is contained in:
+2
-2
@@ -527,7 +527,7 @@
|
|||||||
"filename": "tests/app/main/views/test_accept_invite.py",
|
"filename": "tests/app/main/views/test_accept_invite.py",
|
||||||
"hashed_secret": "07f0a6c13923fc3b5f0c57ffa2d29b715eb80d71",
|
"hashed_secret": "07f0a6c13923fc3b5f0c57ffa2d29b715eb80d71",
|
||||||
"is_verified": false,
|
"is_verified": false,
|
||||||
"line_number": 643,
|
"line_number": 631,
|
||||||
"is_secret": false
|
"is_secret": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -684,5 +684,5 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"generated_at": "2025-02-03T17:01:06Z"
|
"generated_at": "2025-02-26T18:19:37Z"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,17 +6,17 @@
|
|||||||
var chartTitle = document.getElementById('chartTitle').textContent;
|
var chartTitle = document.getElementById('chartTitle').textContent;
|
||||||
|
|
||||||
// Access data attributes from the HTML
|
// Access data attributes from the HTML
|
||||||
var sms_sent = parseInt(chartContainer.getAttribute('data-sms-sent'));
|
var messagesSent = parseInt(chartContainer.getAttribute('data-messages-sent'));
|
||||||
var sms_remaining_messages = parseInt(chartContainer.getAttribute('data-sms-allowance-remaining'));
|
var messagesRemaining = parseInt(chartContainer.getAttribute('data-messages-remaining'));
|
||||||
var totalMessages = sms_sent + sms_remaining_messages;
|
var totalMessages = messagesSent + messagesRemaining;
|
||||||
|
|
||||||
// Update the message below the chart
|
// Update the message below the chart
|
||||||
document.getElementById('message').innerText = `${sms_sent.toLocaleString()} sent / ${sms_remaining_messages.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
|
// Calculate minimum width for "Messages Sent" as 1% of the total chart width
|
||||||
var minSentPercentage = (sms_sent === 0) ? 0 : 0.02;
|
var minSentPercentage = (messagesSent === 0) ? 0 : 0.02;
|
||||||
var minSentValue = totalMessages * minSentPercentage;
|
var minSentValue = totalMessages * minSentPercentage;
|
||||||
var displaySent = Math.max(sms_sent, minSentValue);
|
var displaySent = Math.max(messagesSent, minSentValue);
|
||||||
var displayRemaining = totalMessages - displaySent;
|
var displayRemaining = totalMessages - displaySent;
|
||||||
|
|
||||||
var svg = d3.select("#totalMessageChart");
|
var svg = d3.select("#totalMessageChart");
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
.attr("width", 0) // Start with width 0 for animation
|
.attr("width", 0) // Start with width 0 for animation
|
||||||
.on('mouseover', function(event) {
|
.on('mouseover', function(event) {
|
||||||
tooltip.style('display', 'block')
|
tooltip.style('display', 'block')
|
||||||
.html(`Messages Sent: ${sms_sent.toLocaleString()}`);
|
.html(`Messages Sent: ${messagesSent.toLocaleString()}`);
|
||||||
})
|
})
|
||||||
.on('mousemove', function(event) {
|
.on('mousemove', function(event) {
|
||||||
tooltip.style('left', `${event.pageX + 10}px`)
|
tooltip.style('left', `${event.pageX + 10}px`)
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
.attr("width", 0) // Start with width 0 for animation
|
.attr("width", 0) // Start with width 0 for animation
|
||||||
.on('mouseover', function(event) {
|
.on('mouseover', function(event) {
|
||||||
tooltip.style('display', 'block')
|
tooltip.style('display', 'block')
|
||||||
.html(`Remaining: ${sms_remaining_messages.toLocaleString()}`);
|
.html(`Remaining: ${messagesRemaining.toLocaleString()}`);
|
||||||
})
|
})
|
||||||
.on('mousemove', function(event) {
|
.on('mousemove', function(event) {
|
||||||
tooltip.style('left', `${event.pageX + 10}px`)
|
tooltip.style('left', `${event.pageX + 10}px`)
|
||||||
@@ -115,9 +115,9 @@
|
|||||||
var tbodyRow = document.createElement('tr');
|
var tbodyRow = document.createElement('tr');
|
||||||
|
|
||||||
var tdMessagesSent = document.createElement('td');
|
var tdMessagesSent = document.createElement('td');
|
||||||
tdMessagesSent.textContent = sms_sent.toLocaleString(); // Value for Messages Sent
|
tdMessagesSent.textContent = messagesSent.toLocaleString(); // Value for Messages Sent
|
||||||
var tdRemaining = document.createElement('td');
|
var tdRemaining = document.createElement('td');
|
||||||
tdRemaining.textContent = sms_remaining_messages.toLocaleString(); // Value for Remaining
|
tdRemaining.textContent = messagesRemaining.toLocaleString(); // Value for Remaining
|
||||||
|
|
||||||
tbodyRow.appendChild(tdMessagesSent);
|
tbodyRow.appendChild(tdMessagesSent);
|
||||||
tbodyRow.appendChild(tdRemaining);
|
tbodyRow.appendChild(tdRemaining);
|
||||||
|
|||||||
@@ -49,17 +49,6 @@ def service_dashboard(service_id):
|
|||||||
if not current_user.has_permissions("view_activity"):
|
if not current_user.has_permissions("view_activity"):
|
||||||
return redirect(url_for("main.choose_template", service_id=service_id))
|
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"]
|
job_response = job_api_client.get_jobs(service_id)["data"]
|
||||||
service_data_retention_days = 7
|
service_data_retention_days = 7
|
||||||
|
|
||||||
@@ -70,14 +59,17 @@ def service_dashboard(service_id):
|
|||||||
for job_dict in sorted_jobs
|
for job_dict in sorted_jobs
|
||||||
]
|
]
|
||||||
|
|
||||||
|
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)
|
||||||
return render_template(
|
return render_template(
|
||||||
"views/dashboard/dashboard.html",
|
"views/dashboard/dashboard.html",
|
||||||
updates_url=url_for(".service_dashboard_updates", service_id=service_id),
|
updates_url=url_for(".service_dashboard_updates", service_id=service_id),
|
||||||
partials=get_dashboard_partials(service_id),
|
partials=get_dashboard_partials(service_id),
|
||||||
jobs=job_lists,
|
jobs=job_lists,
|
||||||
service_data_retention_days=service_data_retention_days,
|
service_data_retention_days=service_data_retention_days,
|
||||||
sms_sent=sms_sent,
|
messages_remaining=messages_remaining,
|
||||||
sms_allowance_remaining=sms_allowance_remaining,
|
messages_sent=messages_sent,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -537,6 +537,11 @@ class ServiceAPIClient(NotifyAdminAPIClient):
|
|||||||
"""
|
"""
|
||||||
return self.get("/service/invite/redis/{0}".format(redis_key))
|
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()
|
service_api_client = ServiceAPIClient()
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
{{ ajax_block(partials, updates_url, 'inbox') }}
|
{{ ajax_block(partials, updates_url, 'inbox') }}
|
||||||
|
|
||||||
<div id="totalMessageChartContainer" data-sms-sent="{{ sms_sent }}" data-sms-allowance-remaining="{{ sms_allowance_remaining }}">
|
<div id="totalMessageChartContainer" data-messages-sent="{{ messages_sent }}" data-messages-remaining="{{ messages_remaining }}">
|
||||||
<h2 id="chartTitle">Total messages</h2>
|
<h2 id="chartTitle">Total messages</h2>
|
||||||
<svg id="totalMessageChart"></svg>
|
<svg id="totalMessageChart"></svg>
|
||||||
<div id="message"></div>
|
<div id="message"></div>
|
||||||
|
|||||||
@@ -300,25 +300,13 @@ def test_accepting_invite_removes_invite_from_session(
|
|||||||
|
|
||||||
client_request.login(user)
|
client_request.login(user)
|
||||||
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
date_range = {"start_date": "2024-01-01", "days": 7}
|
|
||||||
|
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats",
|
"app.service_api_client.get_service_message_ratio",
|
||||||
return_value={
|
return_value={
|
||||||
date_range["start_date"]: {
|
"messages_remaining": 71919,
|
||||||
"email": {"delivered": 0, "failure": 0, "requested": 0},
|
"messages_sent": 28081,
|
||||||
"sms": {"delivered": 0, "failure": 1, "requested": 1},
|
"total_message_limit": 100000,
|
||||||
},
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
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},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
page = client_request.get(
|
page = client_request.get(
|
||||||
|
|||||||
@@ -196,6 +196,12 @@ mock_daily_stats_by_user = {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mock_service_message_ratio = {
|
||||||
|
"messages_remaining": 71919,
|
||||||
|
"messages_sent": 28081,
|
||||||
|
"total_message_limit": 100000,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"user",
|
"user",
|
||||||
@@ -255,12 +261,8 @@ def test_get_started(
|
|||||||
)
|
)
|
||||||
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = client_request.get(
|
page = client_request.get(
|
||||||
"main.service_dashboard",
|
"main.service_dashboard",
|
||||||
@@ -289,12 +291,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.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = client_request.get(
|
page = client_request.get(
|
||||||
"main.service_dashboard",
|
"main.service_dashboard",
|
||||||
@@ -320,12 +318,8 @@ def test_inbound_messages_not_visible_to_service_without_permissions(
|
|||||||
service_one["permissions"] = []
|
service_one["permissions"] = []
|
||||||
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = client_request.get(
|
page = client_request.get(
|
||||||
"main.service_dashboard",
|
"main.service_dashboard",
|
||||||
@@ -351,12 +345,8 @@ def test_inbound_messages_shows_count_of_messages_when_there_are_messages(
|
|||||||
):
|
):
|
||||||
service_one["permissions"] = ["inbound_sms"]
|
service_one["permissions"] = ["inbound_sms"]
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = client_request.get(
|
page = client_request.get(
|
||||||
"main.service_dashboard",
|
"main.service_dashboard",
|
||||||
@@ -387,12 +377,8 @@ def test_inbound_messages_shows_count_of_messages_when_there_are_no_messages(
|
|||||||
):
|
):
|
||||||
service_one["permissions"] = ["inbound_sms"]
|
service_one["permissions"] = ["inbound_sms"]
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = client_request.get(
|
page = client_request.get(
|
||||||
"main.service_dashboard",
|
"main.service_dashboard",
|
||||||
@@ -641,12 +627,8 @@ def test_should_show_recent_templates_on_dashboard(
|
|||||||
)
|
)
|
||||||
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = client_request.get(
|
page = client_request.get(
|
||||||
"main.service_dashboard",
|
"main.service_dashboard",
|
||||||
@@ -693,12 +675,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.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID)
|
page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID)
|
||||||
main = page.select_one("main").text
|
main = page.select_one("main").text
|
||||||
@@ -852,12 +830,8 @@ def test_should_show_upcoming_jobs_on_dashboard(
|
|||||||
mock_get_inbound_sms_summary,
|
mock_get_inbound_sms_summary,
|
||||||
):
|
):
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = client_request.get(
|
page = client_request.get(
|
||||||
"main.service_dashboard",
|
"main.service_dashboard",
|
||||||
@@ -899,12 +873,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.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = client_request.get(
|
page = client_request.get(
|
||||||
"main.service_dashboard",
|
"main.service_dashboard",
|
||||||
@@ -929,12 +899,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.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = client_request.get(
|
page = client_request.get(
|
||||||
"main.service_dashboard",
|
"main.service_dashboard",
|
||||||
@@ -1019,12 +985,8 @@ def test_should_not_show_jobs_on_dashboard_for_users_with_uploads_page(
|
|||||||
mock_get_inbound_sms_summary,
|
mock_get_inbound_sms_summary,
|
||||||
):
|
):
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = client_request.get(
|
page = client_request.get(
|
||||||
"main.service_dashboard",
|
"main.service_dashboard",
|
||||||
@@ -1287,12 +1249,8 @@ def test_menu_send_messages(
|
|||||||
|
|
||||||
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = _test_dashboard_menu(
|
page = _test_dashboard_menu(
|
||||||
client_request,
|
client_request,
|
||||||
@@ -1328,12 +1286,8 @@ def test_menu_manage_service(
|
|||||||
):
|
):
|
||||||
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = _test_dashboard_menu(
|
page = _test_dashboard_menu(
|
||||||
client_request,
|
client_request,
|
||||||
@@ -1369,12 +1323,8 @@ def test_menu_main_settings(
|
|||||||
):
|
):
|
||||||
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = _test_settings_menu(
|
page = _test_settings_menu(
|
||||||
client_request,
|
client_request,
|
||||||
@@ -1409,12 +1359,8 @@ def test_menu_manage_api_keys(
|
|||||||
):
|
):
|
||||||
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = _test_dashboard_menu(
|
page = _test_dashboard_menu(
|
||||||
client_request,
|
client_request,
|
||||||
@@ -1450,12 +1396,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.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = _test_dashboard_menu(
|
page = _test_dashboard_menu(
|
||||||
client_request, mocker, platform_admin_user, service_one, []
|
client_request, mocker, platform_admin_user, service_one, []
|
||||||
@@ -1493,12 +1435,8 @@ def test_route_for_service_permissions(
|
|||||||
)
|
)
|
||||||
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
validate_route_permission(
|
validate_route_permission(
|
||||||
mocker,
|
mocker,
|
||||||
@@ -1642,12 +1580,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.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID)
|
page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID)
|
||||||
|
|
||||||
@@ -1713,12 +1647,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.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID)
|
page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID)
|
||||||
@@ -1753,12 +1683,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.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID)
|
page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID)
|
||||||
@@ -1795,12 +1721,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.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
|
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
client_request.login(platform_admin_user, service_one_json)
|
client_request.login(platform_admin_user, service_one_json)
|
||||||
@@ -1832,14 +1754,9 @@ def test_breadcrumb_shows_if_service_is_suspended(
|
|||||||
)
|
)
|
||||||
|
|
||||||
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
|
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID)
|
page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID)
|
||||||
@@ -1872,12 +1789,8 @@ def test_service_dashboard_shows_usage(
|
|||||||
)
|
)
|
||||||
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
service_one["permissions"] = permissions
|
service_one["permissions"] = permissions
|
||||||
@@ -1912,12 +1825,8 @@ def test_service_dashboard_shows_free_allowance(
|
|||||||
)
|
)
|
||||||
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -1933,12 +1842,8 @@ def test_service_dashboard_shows_batched_jobs(
|
|||||||
):
|
):
|
||||||
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats", return_value=mock_daily_stats
|
"app.service_api_client.get_service_message_ratio",
|
||||||
)
|
return_value=mock_service_message_ratio,
|
||||||
|
|
||||||
mocker.patch(
|
|
||||||
"app.main.views.dashboard.get_daily_stats_by_user",
|
|
||||||
return_value=mock_daily_stats_by_user,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID)
|
page = client_request.get("main.service_dashboard", service_id=SERVICE_ONE_ID)
|
||||||
|
|||||||
@@ -128,25 +128,12 @@ def test_sign_out_user(
|
|||||||
# Check we are logged in
|
# Check we are logged in
|
||||||
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
mocker.patch("app.job_api_client.get_jobs", return_value=MOCK_JOBS)
|
||||||
|
|
||||||
date_range = {"start_date": "2024-01-01", "days": 7}
|
|
||||||
|
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_daily_stats",
|
"app.service_api_client.get_service_message_ratio",
|
||||||
return_value={
|
return_value={
|
||||||
date_range["start_date"]: {
|
"messages_remaining": 71919,
|
||||||
"email": {"delivered": 0, "failure": 0, "requested": 0},
|
"messages_sent": 28081,
|
||||||
"sms": {"delivered": 0, "failure": 1, "requested": 1},
|
"total_message_limit": 100000,
|
||||||
},
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
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},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ Object.defineProperty(HTMLElement.prototype, 'clientWidth', {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
// Set up the DOM with the D3 script included
|
// Set up the DOM with the D3 script included
|
||||||
document.body.innerHTML = `
|
document.body.innerHTML = `
|
||||||
<div id="totalMessageChartContainer" data-sms-sent="100" data-sms-allowance-remaining="249900" style="width: 600px;">
|
<div id="totalMessageChartContainer" data-messages-sent="28081" data-messages-remaining="71919" style="width: 600px;">
|
||||||
<h1 id="chartTitle">Total Messages</h1>
|
<h1 id="chartTitle">Total Messages</h1>
|
||||||
<svg id="totalMessageChart"></svg>
|
<svg id="totalMessageChart"></svg>
|
||||||
</div>
|
</div>
|
||||||
@@ -76,8 +76,8 @@ test('Populates the accessible table correctly', () => {
|
|||||||
expect(headers[1].textContent).toBe('Remaining');
|
expect(headers[1].textContent).toBe('Remaining');
|
||||||
|
|
||||||
const firstRowCells = rows[1].getElementsByTagName('td');
|
const firstRowCells = rows[1].getElementsByTagName('td');
|
||||||
expect(firstRowCells[0].textContent).toBe('100');
|
expect(firstRowCells[0].textContent).toBe('28,081');
|
||||||
expect(firstRowCells[1].textContent).toBe('249,900');
|
expect(firstRowCells[1].textContent).toBe('71,919');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Test to check if the chart title is correctly set
|
// 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
|
// Testing the tooltip
|
||||||
test('Tooltip displays on hover', () => {
|
test('Tooltip displays on hover', () => {
|
||||||
document.body.innerHTML = `
|
document.body.innerHTML = `
|
||||||
<div id="totalMessageChartContainer" data-sms-sent="100" data-sms-allowance-remaining="249900" style="width: 600px;">
|
<div id="totalMessageChartContainer" data-messages-sent="100" data-messages-remaining="249900" style="width: 600px;">
|
||||||
<h1 id="chartTitle">Total Messages</h1>
|
<h1 id="chartTitle">Total Messages</h1>
|
||||||
<svg id="totalMessageChart"></svg>
|
<svg id="totalMessageChart"></svg>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user