mirror of
https://github.com/GSA/notifications-api.git
synced 2026-02-01 23:55:58 -05:00
Remove letters-related code (#175)
This deletes a big ol' chunk of code related to letters. It's not everything—there are still a few things that might be tied to sms/email—but it's the the heart of letters function. SMS and email function should be untouched by this. Areas affected: - Things obviously about letters - PDF tasks, used for precompiling letters - Virus scanning, used for those PDFs - FTP, used to send letters to the printer - Postage stuff
This commit is contained in:
@@ -18,7 +18,6 @@ from app.models import (
|
||||
KEY_TYPE_NORMAL,
|
||||
KEY_TYPE_TEAM,
|
||||
KEY_TYPE_TEST,
|
||||
LETTER_TYPE,
|
||||
NOTIFICATION_TYPES,
|
||||
SMS_TYPE,
|
||||
FactBilling,
|
||||
@@ -26,7 +25,6 @@ from app.models import (
|
||||
Notification,
|
||||
)
|
||||
from tests.app.db import (
|
||||
create_letter_rate,
|
||||
create_notification,
|
||||
create_notification_history,
|
||||
create_rate,
|
||||
@@ -36,11 +34,9 @@ from tests.app.db import (
|
||||
|
||||
|
||||
def mocker_get_rate(
|
||||
non_letter_rates, letter_rates, notification_type, local_date, crown=None, rate_multiplier=None, post_class="second"
|
||||
non_letter_rates, notification_type, local_date, crown=None, rate_multiplier=None
|
||||
):
|
||||
if notification_type == LETTER_TYPE:
|
||||
return Decimal(2.1)
|
||||
elif notification_type == SMS_TYPE:
|
||||
if notification_type == SMS_TYPE:
|
||||
return Decimal(1.33)
|
||||
elif notification_type == EMAIL_TYPE:
|
||||
return Decimal(0)
|
||||
@@ -87,10 +83,8 @@ def test_create_nightly_notification_status_triggers_tasks(
|
||||
@freeze_time('2019-08-01T00:30')
|
||||
@pytest.mark.parametrize('notification_date, expected_types_aggregated', [
|
||||
('2019-08-01', set()),
|
||||
('2019-07-31', {EMAIL_TYPE, SMS_TYPE, LETTER_TYPE}),
|
||||
('2019-07-28', {EMAIL_TYPE, SMS_TYPE, LETTER_TYPE}),
|
||||
('2019-07-27', {LETTER_TYPE}),
|
||||
('2019-07-22', {LETTER_TYPE}),
|
||||
('2019-07-31', {EMAIL_TYPE, SMS_TYPE}),
|
||||
('2019-07-28', {EMAIL_TYPE, SMS_TYPE}),
|
||||
('2019-07-21', set()),
|
||||
])
|
||||
def test_create_nightly_notification_status_triggers_relevant_tasks(
|
||||
@@ -117,7 +111,7 @@ def test_create_nightly_notification_status_triggers_relevant_tasks(
|
||||
@pytest.mark.skip(reason="Needs updating for TTS: Timezone handling")
|
||||
def test_create_nightly_billing_for_day_checks_history(
|
||||
sample_service,
|
||||
sample_letter_template,
|
||||
sample_sms_template,
|
||||
mocker
|
||||
):
|
||||
yesterday = datetime.now() - timedelta(days=1)
|
||||
@@ -125,13 +119,13 @@ def test_create_nightly_billing_for_day_checks_history(
|
||||
|
||||
create_notification(
|
||||
created_at=yesterday,
|
||||
template=sample_letter_template,
|
||||
template=sample_sms_template,
|
||||
status='sending',
|
||||
)
|
||||
|
||||
create_notification_history(
|
||||
created_at=yesterday,
|
||||
template=sample_letter_template,
|
||||
template=sample_sms_template,
|
||||
status='delivered',
|
||||
)
|
||||
|
||||
@@ -143,7 +137,7 @@ def test_create_nightly_billing_for_day_checks_history(
|
||||
assert len(records) == 1
|
||||
|
||||
record = records[0]
|
||||
assert record.notification_type == LETTER_TYPE
|
||||
assert record.notification_type == SMS_TYPE
|
||||
assert record.notifications_sent == 2
|
||||
|
||||
|
||||
@@ -291,116 +285,6 @@ def test_create_nightly_billing_for_day_different_sent_by(
|
||||
assert record.rate_multiplier == 1.0
|
||||
|
||||
|
||||
@pytest.mark.skip(reason="Needs updating for TTS: Remove mail")
|
||||
def test_create_nightly_billing_for_day_different_letter_postage(
|
||||
notify_db_session,
|
||||
sample_letter_template,
|
||||
mocker
|
||||
):
|
||||
yesterday = datetime.now() - timedelta(days=1)
|
||||
mocker.patch('app.dao.fact_billing_dao.get_rate', side_effect=mocker_get_rate)
|
||||
|
||||
for _ in range(2):
|
||||
create_notification(
|
||||
created_at=yesterday,
|
||||
template=sample_letter_template,
|
||||
status='delivered',
|
||||
sent_by='dvla',
|
||||
billable_units=2,
|
||||
postage='first'
|
||||
)
|
||||
create_notification(
|
||||
created_at=yesterday,
|
||||
template=sample_letter_template,
|
||||
status='delivered',
|
||||
sent_by='dvla',
|
||||
billable_units=2,
|
||||
postage='second'
|
||||
)
|
||||
create_notification(
|
||||
created_at=yesterday,
|
||||
template=sample_letter_template,
|
||||
status='delivered',
|
||||
sent_by='dvla',
|
||||
billable_units=1,
|
||||
postage='europe'
|
||||
)
|
||||
create_notification(
|
||||
created_at=yesterday,
|
||||
template=sample_letter_template,
|
||||
status='delivered',
|
||||
sent_by='dvla',
|
||||
billable_units=3,
|
||||
postage='rest-of-world'
|
||||
)
|
||||
|
||||
records = FactBilling.query.all()
|
||||
assert len(records) == 0
|
||||
create_nightly_billing_for_day(str(yesterday.date()))
|
||||
|
||||
records = FactBilling.query.order_by('postage').all()
|
||||
assert len(records) == 4
|
||||
|
||||
assert records[0].notification_type == LETTER_TYPE
|
||||
assert records[0].local_date == datetime.date(yesterday)
|
||||
assert records[0].postage == 'europe'
|
||||
assert records[0].notifications_sent == 1
|
||||
assert records[0].billable_units == 1
|
||||
|
||||
assert records[1].notification_type == LETTER_TYPE
|
||||
assert records[1].local_date == datetime.date(yesterday)
|
||||
assert records[1].postage == 'first'
|
||||
assert records[1].notifications_sent == 2
|
||||
assert records[1].billable_units == 4
|
||||
|
||||
assert records[2].notification_type == LETTER_TYPE
|
||||
assert records[2].local_date == datetime.date(yesterday)
|
||||
assert records[2].postage == 'rest-of-world'
|
||||
assert records[2].notifications_sent == 1
|
||||
assert records[2].billable_units == 3
|
||||
|
||||
assert records[3].notification_type == LETTER_TYPE
|
||||
assert records[3].local_date == datetime.date(yesterday)
|
||||
assert records[3].postage == 'second'
|
||||
assert records[3].notifications_sent == 1
|
||||
assert records[3].billable_units == 2
|
||||
|
||||
|
||||
@pytest.mark.skip(reason="Needs updating for TTS: Timezone handling")
|
||||
def test_create_nightly_billing_for_day_letter(
|
||||
sample_service,
|
||||
sample_letter_template,
|
||||
mocker
|
||||
):
|
||||
yesterday = datetime.now() - timedelta(days=1)
|
||||
|
||||
mocker.patch('app.dao.fact_billing_dao.get_rate', side_effect=mocker_get_rate)
|
||||
|
||||
create_notification(
|
||||
created_at=yesterday,
|
||||
template=sample_letter_template,
|
||||
status='delivered',
|
||||
sent_by='dvla',
|
||||
international=False,
|
||||
rate_multiplier=2.0,
|
||||
billable_units=2,
|
||||
)
|
||||
|
||||
records = FactBilling.query.all()
|
||||
assert len(records) == 0
|
||||
create_nightly_billing_for_day(str(yesterday.date()))
|
||||
|
||||
records = FactBilling.query.order_by('rate_multiplier').all()
|
||||
assert len(records) == 1
|
||||
|
||||
record = records[0]
|
||||
assert record.notification_type == LETTER_TYPE
|
||||
assert record.local_date == datetime.date(yesterday)
|
||||
assert record.rate == Decimal(2.1)
|
||||
assert record.billable_units == 2
|
||||
assert record.rate_multiplier == 2.0
|
||||
|
||||
|
||||
@pytest.mark.skip(reason="Needs updating for TTS: Timezone handling")
|
||||
def test_create_nightly_billing_for_day_null_sent_by_sms(
|
||||
sample_service,
|
||||
@@ -436,38 +320,16 @@ def test_create_nightly_billing_for_day_null_sent_by_sms(
|
||||
assert record.provider == 'unknown'
|
||||
|
||||
|
||||
def test_get_rate_for_letter_latest(notify_db_session):
|
||||
# letter rates should be passed into the get_rate function as a tuple of start_date, crown, sheet_count,
|
||||
# rate and post_class
|
||||
new = create_letter_rate(datetime(2017, 12, 1), crown=True, sheet_count=1, rate=0.33, post_class='second')
|
||||
old = create_letter_rate(datetime(2016, 12, 1), crown=True, sheet_count=1, rate=0.30, post_class='second')
|
||||
letter_rates = [new, old]
|
||||
|
||||
rate = get_rate([], letter_rates, LETTER_TYPE, date(2018, 1, 1), True, 1)
|
||||
assert rate == Decimal('0.33')
|
||||
|
||||
|
||||
def test_get_rate_for_letter_latest_if_crown_is_none(notify_db_session):
|
||||
# letter rates should be passed into the get_rate function as a tuple of start_date, crown, sheet_count,
|
||||
# rate and post_class
|
||||
crown = create_letter_rate(datetime(2017, 12, 1), crown=True, sheet_count=1, rate=0.33, post_class='second')
|
||||
non_crown = create_letter_rate(datetime(2017, 12, 1), crown=False, sheet_count=1, rate=0.35, post_class='second')
|
||||
letter_rates = [crown, non_crown]
|
||||
|
||||
rate = get_rate([], letter_rates, LETTER_TYPE, date(2018, 1, 1), crown=None, letter_page_count=1)
|
||||
assert rate == Decimal('0.33')
|
||||
|
||||
|
||||
def test_get_rate_for_sms_and_email(notify_db_session):
|
||||
non_letter_rates = [
|
||||
create_rate(datetime(2017, 12, 1), 0.15, SMS_TYPE),
|
||||
create_rate(datetime(2017, 12, 1), 0, EMAIL_TYPE)
|
||||
]
|
||||
|
||||
rate = get_rate(non_letter_rates, [], SMS_TYPE, date(2018, 1, 1))
|
||||
rate = get_rate(non_letter_rates, SMS_TYPE, date(2018, 1, 1))
|
||||
assert rate == Decimal(0.15)
|
||||
|
||||
rate = get_rate(non_letter_rates, [], EMAIL_TYPE, date(2018, 1, 1))
|
||||
rate = get_rate(non_letter_rates, EMAIL_TYPE, date(2018, 1, 1))
|
||||
assert rate == Decimal(0)
|
||||
|
||||
|
||||
@@ -568,7 +430,6 @@ def test_create_nightly_notification_status_for_service_and_day(notify_db_sessio
|
||||
first_template = create_template(service=first_service)
|
||||
second_service = create_service(service_name='second Service')
|
||||
second_template = create_template(service=second_service, template_type='email')
|
||||
third_template = create_template(service=second_service, template_type='letter')
|
||||
|
||||
process_day = date.today() - timedelta(days=5)
|
||||
with freeze_time(datetime.combine(process_day, time.max)):
|
||||
@@ -576,25 +437,23 @@ def test_create_nightly_notification_status_for_service_and_day(notify_db_sessio
|
||||
create_notification(template=second_template, status='temporary-failure')
|
||||
|
||||
# team API key notifications are included
|
||||
create_notification(template=third_template, status='sending', key_type=KEY_TYPE_TEAM)
|
||||
create_notification(template=second_template, status='sending', key_type=KEY_TYPE_TEAM)
|
||||
|
||||
# test notifications are ignored
|
||||
create_notification(template=third_template, status='sending', key_type=KEY_TYPE_TEST)
|
||||
create_notification(template=second_template, status='sending', key_type=KEY_TYPE_TEST)
|
||||
|
||||
# historical notifications are included
|
||||
create_notification_history(template=third_template, status='delivered')
|
||||
create_notification_history(template=second_template, status='delivered')
|
||||
|
||||
# these created notifications from a different day get ignored
|
||||
with freeze_time(datetime.combine(date.today() - timedelta(days=4), time.max)):
|
||||
create_notification(template=first_template)
|
||||
create_notification_history(template=second_template)
|
||||
create_notification(template=third_template)
|
||||
|
||||
assert len(FactNotificationStatus.query.all()) == 0
|
||||
|
||||
create_nightly_notification_status_for_service_and_day(str(process_day), first_service.id, 'sms')
|
||||
create_nightly_notification_status_for_service_and_day(str(process_day), second_service.id, 'email')
|
||||
create_nightly_notification_status_for_service_and_day(str(process_day), second_service.id, 'letter')
|
||||
|
||||
new_fact_data = FactNotificationStatus.query.order_by(
|
||||
FactNotificationStatus.notification_type,
|
||||
@@ -603,7 +462,23 @@ def test_create_nightly_notification_status_for_service_and_day(notify_db_sessio
|
||||
|
||||
assert len(new_fact_data) == 4
|
||||
|
||||
email_failure_row = new_fact_data[0]
|
||||
email_delivered_row = new_fact_data[0]
|
||||
assert email_delivered_row.template_id == second_template.id
|
||||
assert email_delivered_row.service_id == second_service.id
|
||||
assert email_delivered_row.notification_type == 'email'
|
||||
assert email_delivered_row.notification_status == 'delivered'
|
||||
assert email_delivered_row.notification_count == 1
|
||||
assert email_delivered_row.key_type == KEY_TYPE_NORMAL
|
||||
|
||||
email_sending_row = new_fact_data[1]
|
||||
assert email_sending_row.template_id == second_template.id
|
||||
assert email_sending_row.service_id == second_service.id
|
||||
assert email_sending_row.notification_type == 'email'
|
||||
assert email_sending_row.notification_status == 'sending'
|
||||
assert email_sending_row.notification_count == 1
|
||||
assert email_sending_row.key_type == KEY_TYPE_TEAM
|
||||
|
||||
email_failure_row = new_fact_data[2]
|
||||
assert email_failure_row.local_date == process_day
|
||||
assert email_failure_row.template_id == second_template.id
|
||||
assert email_failure_row.service_id == second_service.id
|
||||
@@ -613,22 +488,6 @@ def test_create_nightly_notification_status_for_service_and_day(notify_db_sessio
|
||||
assert email_failure_row.notification_count == 1
|
||||
assert email_failure_row.key_type == KEY_TYPE_NORMAL
|
||||
|
||||
letter_delivered_row = new_fact_data[1]
|
||||
assert letter_delivered_row.template_id == third_template.id
|
||||
assert letter_delivered_row.service_id == second_service.id
|
||||
assert letter_delivered_row.notification_type == 'letter'
|
||||
assert letter_delivered_row.notification_status == 'delivered'
|
||||
assert letter_delivered_row.notification_count == 1
|
||||
assert letter_delivered_row.key_type == KEY_TYPE_NORMAL
|
||||
|
||||
letter_sending_row = new_fact_data[2]
|
||||
assert letter_sending_row.template_id == third_template.id
|
||||
assert letter_sending_row.service_id == second_service.id
|
||||
assert letter_sending_row.notification_type == 'letter'
|
||||
assert letter_sending_row.notification_status == 'sending'
|
||||
assert letter_sending_row.notification_count == 1
|
||||
assert letter_sending_row.key_type == KEY_TYPE_TEAM
|
||||
|
||||
sms_delivered_row = new_fact_data[3]
|
||||
assert sms_delivered_row.template_id == first_template.id
|
||||
assert sms_delivered_row.service_id == first_service.id
|
||||
|
||||
Reference in New Issue
Block a user