mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-05 19:03:30 -05:00
added test_fetch_daily_stats_by_user test
This commit is contained in:
@@ -31,11 +31,11 @@
|
||||
var socket = io();
|
||||
|
||||
socket.on('connect', function() {
|
||||
socket.emit('fetch_daily_stats_by_user');
|
||||
socket.emit('fetch_daily_stats');
|
||||
console.log('connected')
|
||||
});
|
||||
|
||||
socket.on('daily_stats_by_user_update', function(data) {
|
||||
socket.on('daily_stats_update', function(data) {
|
||||
console.log('Data received:', data);
|
||||
var labels = [];
|
||||
var requestedData = [];
|
||||
@@ -57,7 +57,7 @@
|
||||
var sevenDaysButton = document.getElementById('sevenDaysButton');
|
||||
if (sevenDaysButton) {
|
||||
sevenDaysButton.addEventListener('click', function() {
|
||||
socket.emit('fetch_daily_stats_by_user');
|
||||
socket.emit('fetch_daily_stats');
|
||||
console.log('clicked')
|
||||
});
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ from datetime import datetime
|
||||
from functools import partial
|
||||
from itertools import groupby
|
||||
|
||||
from flask import Response, abort, jsonify, render_template, request, session, url_for,Flask, g
|
||||
from flask import Response, abort, jsonify, render_template, request, session, url_for
|
||||
from flask_login import current_user
|
||||
from flask_socketio import emit
|
||||
from werkzeug.utils import redirect
|
||||
@@ -32,23 +32,11 @@ 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 notifications_utils.recipients import format_phone_number_human_readable
|
||||
from flask_socketio import SocketIO
|
||||
import app
|
||||
|
||||
|
||||
@socketio.on("fetch_daily_stats")
|
||||
def handle_fetch_daily_stats():
|
||||
service_id = session.get('service_id')
|
||||
print('''
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
service_id ''',
|
||||
|
||||
service_id)
|
||||
|
||||
if service_id:
|
||||
date_range = get_stats_date_range()
|
||||
daily_stats = service_api_client.get_service_notification_statistics_by_day(
|
||||
@@ -63,7 +51,6 @@ def handle_fetch_daily_stats():
|
||||
def handle_fetch_daily_stats_by_user():
|
||||
service_id = session.get("service_id")
|
||||
user_id = session.get("user_id")
|
||||
# print(f"Service ID in handler: {service_id}")
|
||||
if service_id and user_id:
|
||||
date_range = get_stats_date_range()
|
||||
daily_stats_by_user = (
|
||||
@@ -76,7 +63,7 @@ def handle_fetch_daily_stats_by_user():
|
||||
)
|
||||
emit("daily_stats_by_user_update", daily_stats_by_user)
|
||||
else:
|
||||
emit("error", {"error": "No service_id provided"})
|
||||
emit("error", {"error": "No service_id or user_id provided"})
|
||||
|
||||
|
||||
@main.route("/services/<uuid:service_id>/dashboard")
|
||||
|
||||
@@ -6,10 +6,8 @@ import pytest
|
||||
from flask import Flask, url_for
|
||||
from flask_socketio import SocketIO, SocketIOTestClient
|
||||
from freezegun import freeze_time
|
||||
from boto3 import Session
|
||||
import app
|
||||
|
||||
from app import create_app, socketio
|
||||
from app import create_app
|
||||
from app.main.views.dashboard import (
|
||||
aggregate_notifications_stats,
|
||||
aggregate_status_types,
|
||||
@@ -17,7 +15,8 @@ from app.main.views.dashboard import (
|
||||
format_monthly_stats_to_list,
|
||||
get_dashboard_totals,
|
||||
get_tuples_of_financial_years,
|
||||
handle_fetch_daily_stats
|
||||
handle_fetch_daily_stats,
|
||||
handle_fetch_daily_stats_by_user,
|
||||
)
|
||||
from tests import (
|
||||
organization_json,
|
||||
@@ -29,6 +28,7 @@ from tests.conftest import (
|
||||
ORGANISATION_ID,
|
||||
SERVICE_ONE_ID,
|
||||
SERVICE_TWO_ID,
|
||||
USER_ONE_ID,
|
||||
create_active_caseworking_user,
|
||||
create_active_user_view_permissions,
|
||||
normalize_spaces,
|
||||
@@ -1877,7 +1877,6 @@ def test_service_dashboard_shows_batched_jobs(
|
||||
|
||||
rows = job_table_body.find_all("tbody")[0].find_all("tr")
|
||||
|
||||
# # Check if the "Job" table exists
|
||||
assert job_table_body is not None
|
||||
|
||||
assert len(rows) == 1
|
||||
@@ -1887,12 +1886,9 @@ def test_service_dashboard_shows_batched_jobs(
|
||||
def app_with_socketio():
|
||||
app = Flask("app")
|
||||
create_app(app)
|
||||
socketio = SocketIO(app, manage_session=False)
|
||||
|
||||
@socketio.on("fetch_daily_stats")
|
||||
def fetch_daily_stats_handler():
|
||||
handle_fetch_daily_stats()
|
||||
|
||||
socketio = SocketIO(app)
|
||||
socketio.on_event("fetch_daily_stats", handle_fetch_daily_stats)
|
||||
socketio.on_event("fetch_daily_stats_by_user", handle_fetch_daily_stats_by_user)
|
||||
return app, socketio
|
||||
|
||||
|
||||
@@ -1905,7 +1901,7 @@ def app_with_socketio():
|
||||
{"service_id": SERVICE_ONE_ID, "start_date": "2024-01-01", "days": 7},
|
||||
),
|
||||
(
|
||||
SERVICE_ONE_ID,
|
||||
SERVICE_TWO_ID,
|
||||
{"start_date": "2023-06-01", "days": 7},
|
||||
{"service_id": SERVICE_TWO_ID, "start_date": "2023-06-01", "days": 7}
|
||||
),
|
||||
@@ -1913,10 +1909,10 @@ def app_with_socketio():
|
||||
)
|
||||
def test_fetch_daily_stats(
|
||||
app_with_socketio,
|
||||
mocker, service_id,
|
||||
mocker,
|
||||
service_id,
|
||||
date_range,
|
||||
expected_call_args,
|
||||
client_request,
|
||||
):
|
||||
app, socketio = app_with_socketio
|
||||
|
||||
@@ -1933,35 +1929,104 @@ def test_fetch_daily_stats(
|
||||
},
|
||||
},
|
||||
)
|
||||
with app.test_client() as client:
|
||||
with client.session_transaction() as sess:
|
||||
sess['service_id'] = service_id
|
||||
|
||||
client = SocketIOTestClient(app, socketio)
|
||||
socketio_client = SocketIOTestClient(app, socketio, flask_test_client=client)
|
||||
|
||||
with client_request.session_transaction() as session:
|
||||
# service_id = session["service_id"]
|
||||
try:
|
||||
connected = client.is_connected()
|
||||
assert connected, "Client should be connected"
|
||||
connected = socketio_client.is_connected()
|
||||
assert connected, "Client should be connected"
|
||||
|
||||
# service_id = session["service_id"]
|
||||
client.emit('fetch_daily_stats')
|
||||
received = client.get_received()
|
||||
print(f"Received messages: {received}")
|
||||
socketio_client.emit('fetch_daily_stats')
|
||||
received = socketio_client.get_received()
|
||||
|
||||
assert received, "Should receive a response message"
|
||||
assert received[0]["name"] == "daily_stats_update"
|
||||
assert received[0]["args"][0] == {
|
||||
date_range["start_date"]: {
|
||||
"email": {"delivered": 0, "failure": 0, "requested": 0},
|
||||
"sms": {"delivered": 0, "failure": 1, "requested": 1},
|
||||
},
|
||||
}
|
||||
mock_service_api.assert_called_once_with(
|
||||
expected_call_args["service_id"],
|
||||
start_date=expected_call_args["start_date"],
|
||||
days=expected_call_args["days"],
|
||||
)
|
||||
assert received, "Should receive a response message"
|
||||
assert received[0]["name"] == "daily_stats_update"
|
||||
assert received[0]["args"][0] == {
|
||||
date_range["start_date"]: {
|
||||
"email": {"delivered": 0, "failure": 0, "requested": 0},
|
||||
"sms": {"delivered": 0, "failure": 1, "requested": 1},
|
||||
},
|
||||
}
|
||||
|
||||
mock_service_api.assert_called_once_with(
|
||||
service_id,
|
||||
start_date=expected_call_args["start_date"],
|
||||
days=expected_call_args["days"],
|
||||
)
|
||||
finally:
|
||||
client.disconnect()
|
||||
disconnected = not client.is_connected()
|
||||
assert disconnected, "Client should be disconnected"
|
||||
socketio_client.disconnect()
|
||||
disconnected = not socketio_client.is_connected()
|
||||
assert disconnected, "Client should be disconnected"
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("service_id", "user_id", "date_range", "expected_call_args", "user"),
|
||||
[
|
||||
(
|
||||
SERVICE_ONE_ID,
|
||||
USER_ONE_ID,
|
||||
{"start_date": "2024-01-01", "days": 7},
|
||||
{"service_id": SERVICE_ONE_ID, "user_id": USER_ONE_ID, "start_date": "2024-01-01", "days": 7},
|
||||
{"id": USER_ONE_ID, "name": "Test User"}
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_fetch_daily_stats_by_user(
|
||||
app_with_socketio,
|
||||
mocker,
|
||||
service_id,
|
||||
user_id,
|
||||
date_range,
|
||||
expected_call_args,
|
||||
user,
|
||||
):
|
||||
app, socketio = app_with_socketio
|
||||
|
||||
mocker.patch(
|
||||
"app.main.views.dashboard.get_stats_date_range", return_value=date_range
|
||||
)
|
||||
|
||||
mock_service_api = mocker.patch(
|
||||
"app.service_api_client.get_user_service_notification_statistics_by_day",
|
||||
return_value={
|
||||
date_range["start_date"]: {
|
||||
"email": {"delivered": 0, "failure": 0, "requested": 0},
|
||||
"sms": {"delivered": 0, "failure": 1, "requested": 1},
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
mocker.patch("app.user_api_client.get_user", return_value=user)
|
||||
|
||||
with app.test_client() as client:
|
||||
with client.session_transaction() as sess:
|
||||
sess['service_id'] = service_id
|
||||
sess['user_id'] = user_id
|
||||
|
||||
socketio_client = SocketIOTestClient(app, socketio, flask_test_client=client)
|
||||
|
||||
connected = socketio_client.is_connected()
|
||||
assert connected, "Client should be connected"
|
||||
|
||||
socketio_client.emit('fetch_daily_stats_by_user')
|
||||
received = socketio_client.get_received()
|
||||
|
||||
mock_service_api.assert_called_once_with(
|
||||
expected_call_args["service_id"],
|
||||
expected_call_args["user_id"],
|
||||
start_date=expected_call_args["start_date"],
|
||||
days=expected_call_args["days"],
|
||||
)
|
||||
assert received, "Should receive a response message"
|
||||
assert received[0]["name"] == "daily_stats_by_user_update"
|
||||
assert received[0]["args"][0] == {
|
||||
date_range["start_date"]: {
|
||||
"email": {"delivered": 0, "failure": 0, "requested": 0},
|
||||
"sms": {"delivered": 0, "failure": 1, "requested": 1},
|
||||
},
|
||||
}
|
||||
|
||||
socketio_client.disconnect()
|
||||
disconnected = not socketio_client.is_connected()
|
||||
assert disconnected, "Client should be disconnected"
|
||||
|
||||
Reference in New Issue
Block a user