mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-09 17:45:32 -04:00
remove dupe of get_letter_timings
it was moved from admin to utils a while ago
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
32
app/utils.py
32
app/utils.py
@@ -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)
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user