mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-06 02:58:25 -04:00
added fetch by user
This commit is contained in:
@@ -31,11 +31,11 @@
|
|||||||
var socket = io();
|
var socket = io();
|
||||||
|
|
||||||
socket.on('connect', function() {
|
socket.on('connect', function() {
|
||||||
socket.emit('fetch_daily_stats_by_user');
|
socket.emit('fetch_daily_stats');
|
||||||
console.log('connected')
|
console.log('connected')
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on('daily_stats_by_user_update', function(data) {
|
socket.on('daily_stats_update', function(data) {
|
||||||
console.log('Data received:', data);
|
console.log('Data received:', data);
|
||||||
var labels = [];
|
var labels = [];
|
||||||
var requestedData = [];
|
var requestedData = [];
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
var sevenDaysButton = document.getElementById('sevenDaysButton');
|
var sevenDaysButton = document.getElementById('sevenDaysButton');
|
||||||
if (sevenDaysButton) {
|
if (sevenDaysButton) {
|
||||||
sevenDaysButton.addEventListener('click', function() {
|
sevenDaysButton.addEventListener('click', function() {
|
||||||
socket.emit('fetch_daily_stats_by_user');
|
socket.emit('fetch_daily_stats');
|
||||||
console.log('clicked')
|
console.log('clicked')
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from datetime import datetime
|
|||||||
from functools import partial
|
from functools import partial
|
||||||
from itertools import groupby
|
from itertools import groupby
|
||||||
|
|
||||||
from flask import Response, abort, jsonify, render_template, request, session, url_for
|
from flask import Response, abort, jsonify, render_template, request, session, url_for,Flask, g
|
||||||
from flask_login import current_user
|
from flask_login import current_user
|
||||||
from flask_socketio import emit
|
from flask_socketio import emit
|
||||||
from werkzeug.utils import redirect
|
from werkzeug.utils import redirect
|
||||||
@@ -32,11 +32,23 @@ from app.utils.pagination import generate_next_dict, generate_previous_dict
|
|||||||
from app.utils.time import get_current_financial_year
|
from app.utils.time import get_current_financial_year
|
||||||
from app.utils.user import user_has_permissions
|
from app.utils.user import user_has_permissions
|
||||||
from notifications_utils.recipients import format_phone_number_human_readable
|
from notifications_utils.recipients import format_phone_number_human_readable
|
||||||
|
from flask_socketio import SocketIO
|
||||||
|
import app
|
||||||
|
|
||||||
@socketio.on("fetch_daily_stats")
|
@socketio.on("fetch_daily_stats")
|
||||||
def handle_fetch_daily_stats():
|
def handle_fetch_daily_stats():
|
||||||
service_id = session.get('service_id')
|
service_id = session.get('service_id')
|
||||||
|
print('''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
service_id ''',
|
||||||
|
|
||||||
|
service_id)
|
||||||
|
|
||||||
if service_id:
|
if service_id:
|
||||||
date_range = get_stats_date_range()
|
date_range = get_stats_date_range()
|
||||||
daily_stats = service_api_client.get_service_notification_statistics_by_day(
|
daily_stats = service_api_client.get_service_notification_statistics_by_day(
|
||||||
@@ -49,12 +61,18 @@ def handle_fetch_daily_stats():
|
|||||||
|
|
||||||
@socketio.on("fetch_daily_stats_by_user")
|
@socketio.on("fetch_daily_stats_by_user")
|
||||||
def handle_fetch_daily_stats_by_user():
|
def handle_fetch_daily_stats_by_user():
|
||||||
service_id = session.get('service_id')
|
service_id = session.get("service_id")
|
||||||
user_id = session.get('user_id')
|
user_id = session.get("user_id")
|
||||||
|
# print(f"Service ID in handler: {service_id}")
|
||||||
if service_id and user_id:
|
if service_id and user_id:
|
||||||
date_range = get_stats_date_range()
|
date_range = get_stats_date_range()
|
||||||
daily_stats_by_user = service_api_client.get_user_service_notification_statistics_by_day(
|
daily_stats_by_user = (
|
||||||
service_id, user_id, start_date=date_range["start_date"], days=date_range["days"]
|
service_api_client.get_user_service_notification_statistics_by_day(
|
||||||
|
service_id,
|
||||||
|
user_id,
|
||||||
|
start_date=date_range["start_date"],
|
||||||
|
days=date_range["days"],
|
||||||
|
)
|
||||||
)
|
)
|
||||||
emit("daily_stats_by_user_update", daily_stats_by_user)
|
emit("daily_stats_by_user_update", daily_stats_by_user)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -60,7 +60,9 @@ class ServiceAPIClient(NotifyAdminAPIClient):
|
|||||||
start_date = datetime.now().strftime("%Y-%m-%d")
|
start_date = datetime.now().strftime("%Y-%m-%d")
|
||||||
|
|
||||||
return self.get(
|
return self.get(
|
||||||
"/service/{0}/statistics/user/{1}/{2}/{3}".format(service_id, user_id, start_date, days),
|
"/service/{0}/statistics/user/{1}/{2}/{3}".format(
|
||||||
|
service_id, user_id, start_date, days
|
||||||
|
),
|
||||||
)["data"]
|
)["data"]
|
||||||
|
|
||||||
def get_services(self, params_dict=None):
|
def get_services(self, params_dict=None):
|
||||||
|
|||||||
@@ -4,8 +4,10 @@ from datetime import datetime
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from flask import Flask, url_for
|
from flask import Flask, url_for
|
||||||
from flask_socketio import SocketIOTestClient
|
from flask_socketio import SocketIO, SocketIOTestClient
|
||||||
from freezegun import freeze_time
|
from freezegun import freeze_time
|
||||||
|
from boto3 import Session
|
||||||
|
import app
|
||||||
|
|
||||||
from app import create_app, socketio
|
from app import create_app, socketio
|
||||||
from app.main.views.dashboard import (
|
from app.main.views.dashboard import (
|
||||||
@@ -15,6 +17,7 @@ from app.main.views.dashboard import (
|
|||||||
format_monthly_stats_to_list,
|
format_monthly_stats_to_list,
|
||||||
get_dashboard_totals,
|
get_dashboard_totals,
|
||||||
get_tuples_of_financial_years,
|
get_tuples_of_financial_years,
|
||||||
|
handle_fetch_daily_stats
|
||||||
)
|
)
|
||||||
from tests import (
|
from tests import (
|
||||||
organization_json,
|
organization_json,
|
||||||
@@ -1884,6 +1887,12 @@ def test_service_dashboard_shows_batched_jobs(
|
|||||||
def app_with_socketio():
|
def app_with_socketio():
|
||||||
app = Flask("app")
|
app = Flask("app")
|
||||||
create_app(app)
|
create_app(app)
|
||||||
|
socketio = SocketIO(app, manage_session=False)
|
||||||
|
|
||||||
|
@socketio.on("fetch_daily_stats")
|
||||||
|
def fetch_daily_stats_handler():
|
||||||
|
handle_fetch_daily_stats()
|
||||||
|
|
||||||
return app, socketio
|
return app, socketio
|
||||||
|
|
||||||
|
|
||||||
@@ -1893,26 +1902,26 @@ def app_with_socketio():
|
|||||||
(
|
(
|
||||||
SERVICE_ONE_ID,
|
SERVICE_ONE_ID,
|
||||||
{"start_date": "2024-01-01", "days": 7},
|
{"start_date": "2024-01-01", "days": 7},
|
||||||
{"service_id": SERVICE_ONE_ID, "start_date": "2024-01-01", "days": 7}
|
{"service_id": SERVICE_ONE_ID, "start_date": "2024-01-01", "days": 7},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
SERVICE_TWO_ID,
|
SERVICE_ONE_ID,
|
||||||
{"start_date": "2023-06-01", "days": 7},
|
{"start_date": "2023-06-01", "days": 7},
|
||||||
{"service_id": SERVICE_TWO_ID, "start_date": "2023-06-01", "days": 7}
|
{"service_id": SERVICE_TWO_ID, "start_date": "2023-06-01", "days": 7}
|
||||||
),
|
),
|
||||||
]
|
],
|
||||||
)
|
)
|
||||||
def test_fetch_daily_stats(
|
def test_fetch_daily_stats(
|
||||||
app_with_socketio, mocker,
|
app_with_socketio,
|
||||||
service_id,
|
mocker, service_id,
|
||||||
date_range,
|
date_range,
|
||||||
expected_call_args
|
expected_call_args,
|
||||||
|
client_request,
|
||||||
):
|
):
|
||||||
app, socketio = app_with_socketio
|
app, socketio = app_with_socketio
|
||||||
|
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
"app.main.views.dashboard.get_stats_date_range",
|
"app.main.views.dashboard.get_stats_date_range", return_value=date_range
|
||||||
return_value=date_range
|
|
||||||
)
|
)
|
||||||
|
|
||||||
mock_service_api = mocker.patch(
|
mock_service_api = mocker.patch(
|
||||||
@@ -1920,34 +1929,39 @@ def test_fetch_daily_stats(
|
|||||||
return_value={
|
return_value={
|
||||||
date_range["start_date"]: {
|
date_range["start_date"]: {
|
||||||
"email": {"delivered": 0, "failure": 0, "requested": 0},
|
"email": {"delivered": 0, "failure": 0, "requested": 0},
|
||||||
"sms": {"delivered": 0, "failure": 1, "requested": 1}
|
"sms": {"delivered": 0, "failure": 1, "requested": 1},
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
client = SocketIOTestClient(app, socketio)
|
client = SocketIOTestClient(app, socketio)
|
||||||
try:
|
|
||||||
connected = client.is_connected()
|
|
||||||
assert connected, "Client should be connected"
|
|
||||||
|
|
||||||
client.emit('fetch_daily_stats', service_id)
|
with client_request.session_transaction() as session:
|
||||||
|
# service_id = session["service_id"]
|
||||||
|
try:
|
||||||
|
connected = client.is_connected()
|
||||||
|
assert connected, "Client should be connected"
|
||||||
|
|
||||||
received = client.get_received()
|
# service_id = session["service_id"]
|
||||||
assert received, "Should receive a response message"
|
client.emit('fetch_daily_stats')
|
||||||
assert received[0]['name'] == 'daily_stats_update'
|
received = client.get_received()
|
||||||
assert received[0]['args'][0] == {
|
print(f"Received messages: {received}")
|
||||||
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(
|
assert received, "Should receive a response message"
|
||||||
service_id,
|
assert received[0]["name"] == "daily_stats_update"
|
||||||
start_date=expected_call_args["start_date"],
|
assert received[0]["args"][0] == {
|
||||||
days=expected_call_args["days"]
|
date_range["start_date"]: {
|
||||||
)
|
"email": {"delivered": 0, "failure": 0, "requested": 0},
|
||||||
finally:
|
"sms": {"delivered": 0, "failure": 1, "requested": 1},
|
||||||
client.disconnect()
|
},
|
||||||
disconnected = not client.is_connected()
|
}
|
||||||
assert disconnected, "Client should be disconnected"
|
|
||||||
|
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"
|
||||||
|
|||||||
Reference in New Issue
Block a user