mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-21 16:01:15 -05:00
Adjust attribute key names and data types to work with format_statistics
This commit is contained in:
@@ -4,7 +4,7 @@ from flask import current_app
|
|||||||
from sqlalchemy import func
|
from sqlalchemy import func
|
||||||
from sqlalchemy.dialects.postgresql import insert
|
from sqlalchemy.dialects.postgresql import insert
|
||||||
from sqlalchemy.sql.expression import literal
|
from sqlalchemy.sql.expression import literal
|
||||||
from sqlalchemy.types import DateTime
|
from sqlalchemy.types import DateTime, Integer
|
||||||
|
|
||||||
from app import db
|
from app import db
|
||||||
from app.models import Notification, NotificationHistory, FactNotificationStatus, KEY_TYPE_TEST
|
from app.models import Notification, NotificationHistory, FactNotificationStatus, KEY_TYPE_TEST
|
||||||
@@ -113,12 +113,12 @@ def fetch_notification_status_for_service_for_day(bst_day, service_id):
|
|||||||
).all()
|
).all()
|
||||||
|
|
||||||
|
|
||||||
def fetch_notification_status_for_service_for_today_and_7_previous_days(service_id):
|
def fetch_notification_status_for_service_for_today_and_7_previous_days(service_id, limit_days=7):
|
||||||
start_date = midnight_n_days_ago(7)
|
start_date = midnight_n_days_ago(limit_days)
|
||||||
now = datetime.utcnow()
|
now = datetime.utcnow()
|
||||||
stats_for_7_days = db.session.query(
|
stats_for_7_days = db.session.query(
|
||||||
FactNotificationStatus.notification_type.label('notification_type'),
|
FactNotificationStatus.notification_type.label('notification_type'),
|
||||||
FactNotificationStatus.notification_status.label('notification_status'),
|
FactNotificationStatus.notification_status.label('status'),
|
||||||
FactNotificationStatus.notification_count.label('count')
|
FactNotificationStatus.notification_count.label('count')
|
||||||
).filter(
|
).filter(
|
||||||
FactNotificationStatus.service_id == service_id,
|
FactNotificationStatus.service_id == service_id,
|
||||||
@@ -128,7 +128,7 @@ def fetch_notification_status_for_service_for_today_and_7_previous_days(service_
|
|||||||
|
|
||||||
stats_for_today = db.session.query(
|
stats_for_today = db.session.query(
|
||||||
Notification.notification_type.cast(db.Text),
|
Notification.notification_type.cast(db.Text),
|
||||||
Notification.status.label('notification_status'),
|
Notification.status,
|
||||||
func.count().label('count')
|
func.count().label('count')
|
||||||
).filter(
|
).filter(
|
||||||
Notification.created_at >= get_london_midnight_in_utc(now),
|
Notification.created_at >= get_london_midnight_in_utc(now),
|
||||||
@@ -141,9 +141,9 @@ def fetch_notification_status_for_service_for_today_and_7_previous_days(service_
|
|||||||
all_stats_table = stats_for_7_days.union_all(stats_for_today).subquery()
|
all_stats_table = stats_for_7_days.union_all(stats_for_today).subquery()
|
||||||
return db.session.query(
|
return db.session.query(
|
||||||
all_stats_table.c.notification_type,
|
all_stats_table.c.notification_type,
|
||||||
all_stats_table.c.notification_status,
|
all_stats_table.c.status,
|
||||||
func.sum(all_stats_table.c.count).label('count')
|
func.cast(func.sum(all_stats_table.c.count), Integer).label('count'),
|
||||||
).group_by(
|
).group_by(
|
||||||
all_stats_table.c.notification_type,
|
all_stats_table.c.notification_type,
|
||||||
all_stats_table.c.notification_status,
|
all_stats_table.c.status,
|
||||||
).all()
|
).all()
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ from app.dao.api_key_dao import (
|
|||||||
expire_api_key)
|
expire_api_key)
|
||||||
from app.dao.fact_notification_status_dao import (
|
from app.dao.fact_notification_status_dao import (
|
||||||
fetch_notification_status_for_service_by_month,
|
fetch_notification_status_for_service_by_month,
|
||||||
fetch_notification_status_for_service_for_day
|
fetch_notification_status_for_service_for_day,
|
||||||
|
fetch_notification_status_for_service_for_today_and_7_previous_days
|
||||||
)
|
)
|
||||||
from app.dao.inbound_numbers_dao import dao_allocate_number_for_service
|
from app.dao.inbound_numbers_dao import dao_allocate_number_for_service
|
||||||
from app.dao.organisation_dao import dao_get_organisation_by_service_id
|
from app.dao.organisation_dao import dao_get_organisation_by_service_id
|
||||||
@@ -433,7 +434,7 @@ def get_service_statistics(service_id, today_only, limit_days=7):
|
|||||||
if today_only:
|
if today_only:
|
||||||
stats = dao_fetch_todays_stats_for_service(service_id)
|
stats = dao_fetch_todays_stats_for_service(service_id)
|
||||||
else:
|
else:
|
||||||
stats = dao_fetch_stats_for_service(service_id, limit_days=limit_days)
|
stats = fetch_notification_status_for_service_for_today_and_7_previous_days(service_id, limit_days=limit_days)
|
||||||
|
|
||||||
return statistics.format_statistics(stats)
|
return statistics.format_statistics(stats)
|
||||||
|
|
||||||
|
|||||||
@@ -200,23 +200,23 @@ def test_fetch_notification_status_for_service_for_today_and_7_previous_days(not
|
|||||||
|
|
||||||
results = sorted(
|
results = sorted(
|
||||||
fetch_notification_status_for_service_for_today_and_7_previous_days(service_1.id),
|
fetch_notification_status_for_service_for_today_and_7_previous_days(service_1.id),
|
||||||
key=lambda x: (x.notification_type, x.notification_status)
|
key=lambda x: (x.notification_type, x.status)
|
||||||
)
|
)
|
||||||
|
|
||||||
assert len(results) == 4
|
assert len(results) == 4
|
||||||
|
|
||||||
assert results[0].notification_type == 'email'
|
assert results[0].notification_type == 'email'
|
||||||
assert results[0].notification_status == 'delivered'
|
assert results[0].status == 'delivered'
|
||||||
assert results[0].count == 4
|
assert results[0].count == 4
|
||||||
|
|
||||||
assert results[1].notification_type == 'letter'
|
assert results[1].notification_type == 'letter'
|
||||||
assert results[1].notification_status == 'delivered'
|
assert results[1].status == 'delivered'
|
||||||
assert results[1].count == 5
|
assert results[1].count == 5
|
||||||
|
|
||||||
assert results[2].notification_type == 'sms'
|
assert results[2].notification_type == 'sms'
|
||||||
assert results[2].notification_status == 'created'
|
assert results[2].status == 'created'
|
||||||
assert results[2].count == 2
|
assert results[2].count == 2
|
||||||
|
|
||||||
assert results[3].notification_type == 'sms'
|
assert results[3].notification_type == 'sms'
|
||||||
assert results[3].notification_status == 'delivered'
|
assert results[3].status == 'delivered'
|
||||||
assert results[3].count == 19
|
assert results[3].count == 19
|
||||||
|
|||||||
Reference in New Issue
Block a user