Add an endpoint to return returned letter stats

Currently the dashboard in the admin app pull the entire returned letter
summary for a service to calculate how many letters have been returned
in the last seven days.

Adding a separate endpoint for this purpose is better because:
- it’s a more efficient query
- it’s less data to send down the pipe
- it gives us a place to return the complete datetime, so the dashboard
  can be more precise about when the most recent report was
This commit is contained in:
Chris Hill-Scott
2020-03-03 17:12:45 +00:00
parent 223ec1360c
commit 9c03438a53
4 changed files with 121 additions and 2 deletions

View File

@@ -1,14 +1,22 @@
import uuid
from datetime import datetime, timedelta, date
from freezegun import freeze_time
from app.dao.returned_letters_dao import (
insert_or_update_returned_letters,
fetch_most_recent_returned_letter,
fetch_returned_letter_count,
fetch_returned_letter_summary,
fetch_returned_letters
)
from app.models import ReturnedLetter, NOTIFICATION_RETURNED_LETTER
from tests.app.db import create_notification, create_notification_history, create_returned_letter
from tests.app.db import (
create_notification,
create_notification_history,
create_returned_letter,
create_service,
)
def test_insert_or_update_returned_letters_inserts(sample_letter_template):
@@ -90,6 +98,62 @@ def test_insert_or_update_returned_letters_with_duplicates_in_reference_list(sam
assert x.notification_id in [notification_1.id, notification_2.id]
def test_get_returned_letter_count(sample_service):
# Before 7 days dont count
create_returned_letter(
sample_service,
reported_at=datetime(2001, 1, 1)
)
create_returned_letter(
sample_service,
reported_at=datetime(2010, 11, 1, 23, 59, 59),
)
# In the last 7 days count
create_returned_letter(
sample_service,
reported_at=datetime(2010, 11, 2, 0, 0, 0),
)
create_returned_letter(
sample_service,
reported_at=datetime(2010, 11, 8, 10, 0),
)
create_returned_letter(
sample_service,
reported_at=datetime(2010, 11, 8, 10, 0),
)
# Different service dont count
create_returned_letter(
create_service(service_id=uuid.uuid4(), service_name='Other service'),
reported_at=datetime(2010, 11, 8, 10, 0),
)
with freeze_time('2010-11-08 10:10'):
result = fetch_returned_letter_count(sample_service.id)
assert result.returned_letter_count == 3
def test_fetch_most_recent_returned_letter_for_service(sample_service):
# Older
create_returned_letter(
sample_service,
reported_at=datetime(2009, 9, 9, 9, 9),
)
# Newer
create_returned_letter(
sample_service,
reported_at=datetime(2010, 10, 10, 10, 10),
)
# Newest, but different service
create_returned_letter(
create_service(service_id=uuid.uuid4(), service_name='Other service'),
reported_at=datetime(2011, 11, 11, 11, 11),
)
result = fetch_most_recent_returned_letter(sample_service.id)
assert str(result.reported_at) == '2010-10-10'
def test_get_returned_letter_summary(sample_service):
now = datetime.utcnow()
create_returned_letter(sample_service, reported_at=now)