remove dupe of get_letter_timings

it was moved from admin to utils a while ago
This commit is contained in:
Leo Hemsted
2018-09-28 15:02:10 +01:00
parent ca75c9370a
commit 32f39475d2
4 changed files with 2 additions and 169 deletions

View File

@@ -12,6 +12,7 @@ from flask import (
url_for, url_for,
) )
from flask_login import current_user, login_required 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 notifications_utils.template import Template, WithSubjectTemplate
from app import ( from app import (
@@ -28,7 +29,6 @@ from app.utils import (
generate_next_dict, generate_next_dict,
generate_notifications_csv, generate_notifications_csv,
generate_previous_dict, generate_previous_dict,
get_letter_timings,
get_page_from_request, get_page_from_request,
get_time_left, get_time_left,
parse_filter_args, parse_filter_args,

View File

@@ -16,6 +16,7 @@ from flask import (
) )
from flask_login import login_required from flask_login import login_required
from notifications_python_client.errors import APIError 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 notifications_utils.pdf import pdf_page_count
from app import ( from app import (
@@ -33,7 +34,6 @@ from app.utils import (
FAILURE_STATUSES, FAILURE_STATUSES,
generate_notifications_csv, generate_notifications_csv,
get_help_argument, get_help_argument,
get_letter_timings,
get_template, get_template,
parse_filter_args, parse_filter_args,
set_status_filters, set_status_filters,

View File

@@ -2,7 +2,6 @@ import csv
import os import os
import re import re
import unicodedata import unicodedata
from collections import namedtuple
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
from functools import wraps from functools import wraps
from io import StringIO 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) 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): def gmt_timezones(date):
date = dateutil.parser.parse(date) date = dateutil.parser.parse(date)
forced_utc = date.replace(tzinfo=pytz.utc) forced_utc = date.replace(tzinfo=pytz.utc)

View File

@@ -17,7 +17,6 @@ from app.utils import (
generate_notifications_csv, generate_notifications_csv,
generate_previous_dict, generate_previous_dict,
get_cdn_domain, get_cdn_domain,
get_letter_timings,
) )
from tests.conftest import fake_uuid 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 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): def test_get_cdn_domain_on_localhost(client, mocker):
mocker.patch.dict('app.current_app.config', values={'ADMIN_BASE_URL': 'http://localhost:6012'}) mocker.patch.dict('app.current_app.config', values={'ADMIN_BASE_URL': 'http://localhost:6012'})
domain = get_cdn_domain() domain = get_cdn_domain()