diff --git a/app/main/views/jobs.py b/app/main/views/jobs.py index 9d0b22ab0..b689f44c1 100644 --- a/app/main/views/jobs.py +++ b/app/main/views/jobs.py @@ -12,6 +12,7 @@ from flask import ( url_for, ) from flask_login import current_user, login_required +from notifications_utils.letter_timings import get_letter_timings from notifications_utils.template import Template, WithSubjectTemplate from app import ( @@ -28,7 +29,6 @@ from app.utils import ( generate_next_dict, generate_notifications_csv, generate_previous_dict, - get_letter_timings, get_page_from_request, get_time_left, parse_filter_args, diff --git a/app/main/views/notifications.py b/app/main/views/notifications.py index e0385f56d..9ec77aeb8 100644 --- a/app/main/views/notifications.py +++ b/app/main/views/notifications.py @@ -16,6 +16,7 @@ from flask import ( ) from flask_login import login_required from notifications_python_client.errors import APIError +from notifications_utils.letter_timings import get_letter_timings from notifications_utils.pdf import pdf_page_count from app import ( @@ -33,7 +34,6 @@ from app.utils import ( FAILURE_STATUSES, generate_notifications_csv, get_help_argument, - get_letter_timings, get_template, parse_filter_args, set_status_filters, diff --git a/app/utils.py b/app/utils.py index 8ddc976ca..330be9b59 100644 --- a/app/utils.py +++ b/app/utils.py @@ -2,7 +2,6 @@ import csv import os import re import unicodedata -from collections import namedtuple from datetime import datetime, timedelta, timezone from functools import wraps from io import StringIO @@ -356,37 +355,6 @@ def email_or_sms_not_enabled(template_type, permissions): return (template_type in ['email', 'sms']) and (template_type not in permissions) -def get_letter_timings(upload_time): - - LetterTimings = namedtuple( - 'LetterTimings', - 'printed_by, is_printed, earliest_delivery, latest_delivery' - ) - - # shift anything after 5pm to the next day - processing_day = gmt_timezones(upload_time) + timedelta(hours=(7)) - - print_day, earliest_delivery, latest_delivery = ( - processing_day + timedelta(days=days) - for days in { - 'Wednesday': (1, 3, 5), - 'Thursday': (1, 4, 5), - 'Friday': (3, 5, 6), - 'Saturday': (2, 4, 5), - }.get(processing_day.strftime('%A'), (1, 3, 4)) - ) - - printed_by = print_day.astimezone(pytz.timezone('Europe/London')).replace(hour=15, minute=0) - now = datetime.utcnow().replace(tzinfo=pytz.timezone('Europe/London')) - - return LetterTimings( - printed_by=printed_by, - is_printed=(now > printed_by), - earliest_delivery=earliest_delivery, - latest_delivery=latest_delivery, - ) - - def gmt_timezones(date): date = dateutil.parser.parse(date) forced_utc = date.replace(tzinfo=pytz.utc) diff --git a/tests/app/test_utils.py b/tests/app/test_utils.py index 0ab7cabba..48136844f 100644 --- a/tests/app/test_utils.py +++ b/tests/app/test_utils.py @@ -17,7 +17,6 @@ from app.utils import ( generate_notifications_csv, generate_previous_dict, get_cdn_domain, - get_letter_timings, ) from tests.conftest import fake_uuid @@ -277,140 +276,6 @@ def test_generate_notifications_csv_calls_twice_if_next_link( assert mock_get_notifications.mock_calls[1][2]['page'] == 2 -@freeze_time('2017-07-14 14:59:59') # Friday, before print deadline -@pytest.mark.parametrize('upload_time, expected_print_time, is_printed, expected_earliest, expected_latest', [ - - # BST - # ================================================================== - # First thing Monday - ( - '2017-07-10 00:00:01', - 'Tuesday 15:00', - True, - 'Thursday 2017-07-13', - 'Friday 2017-07-14' - ), - # Monday at 16:59 BST - ( - '2017-07-10 15:59:59', - 'Tuesday 15:00', - True, - 'Thursday 2017-07-13', - 'Friday 2017-07-14' - ), - # Monday at 17:00 BST - ( - '2017-07-10 16:00:01', - 'Wednesday 15:00', - True, - 'Friday 2017-07-14', - 'Saturday 2017-07-15' - ), - # Tuesday before 17:00 BST - ( - '2017-07-11 12:00:00', - 'Wednesday 15:00', - True, - 'Friday 2017-07-14', - 'Saturday 2017-07-15' - ), - # Wednesday before 17:00 BST - ( - '2017-07-12 12:00:00', - 'Thursday 15:00', - True, - 'Saturday 2017-07-15', - 'Monday 2017-07-17' - ), - # Thursday before 17:00 BST - ( - '2017-07-13 12:00:00', - 'Friday 15:00', - True, # WRONG - 'Monday 2017-07-17', - 'Tuesday 2017-07-18' - ), - # Friday anytime - ( - '2017-07-14 00:00:00', - 'Monday 15:00', - False, - 'Wednesday 2017-07-19', - 'Thursday 2017-07-20' - ), - ( - '2017-07-14 12:00:00', - 'Monday 15:00', - False, - 'Wednesday 2017-07-19', - 'Thursday 2017-07-20' - ), - ( - '2017-07-14 22:00:00', - 'Monday 15:00', - False, - 'Wednesday 2017-07-19', - 'Thursday 2017-07-20' - ), - # Saturday anytime - ( - '2017-07-14 12:00:00', - 'Monday 15:00', - False, - 'Wednesday 2017-07-19', - 'Thursday 2017-07-20' - ), - # Sunday before 1700 BST - ( - '2017-07-15 15:59:59', - 'Monday 15:00', - False, - 'Wednesday 2017-07-19', - 'Thursday 2017-07-20' - ), - # Sunday after 17:00 BST - ( - '2017-07-16 16:00:01', - 'Tuesday 15:00', - False, - 'Thursday 2017-07-20', - 'Friday 2017-07-21' - ), - - # GMT - # ================================================================== - # Monday at 16:59 GMT - ( - '2017-01-02 16:59:59', - 'Tuesday 15:00', - True, - 'Thursday 2017-01-05', - 'Friday 2017-01-06', - ), - # Monday at 17:00 GMT - ( - '2017-01-02 17:00:01', - 'Wednesday 15:00', - True, - 'Friday 2017-01-06', - 'Saturday 2017-01-07', - ), - -]) -def test_get_estimated_delivery_date_for_letter( - upload_time, - expected_print_time, - is_printed, - expected_earliest, - expected_latest, -): - timings = get_letter_timings(upload_time) - assert timings.printed_by.strftime('%A %H:%M') == expected_print_time - assert timings.is_printed == is_printed - assert timings.earliest_delivery.strftime('%A %Y-%m-%d') == expected_earliest - assert timings.latest_delivery.strftime('%A %Y-%m-%d') == expected_latest - - def test_get_cdn_domain_on_localhost(client, mocker): mocker.patch.dict('app.current_app.config', values={'ADMIN_BASE_URL': 'http://localhost:6012'}) domain = get_cdn_domain()