From 9f1f8589976b0ef62c2e837985f8f2b0ef015414 Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Wed, 3 Apr 2019 14:52:41 +0100 Subject: [PATCH] update fact_billing_dao::get_rate to use dates not datetimes update unit tests too --- app/dao/fact_billing_dao.py | 7 +++++-- tests/app/celery/test_reporting_tasks.py | 11 +++++------ tests/app/dao/test_ft_billing_dao.py | 14 ++++++++------ 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/app/dao/fact_billing_dao.py b/app/dao/fact_billing_dao.py index 9ab56f861..8997626fb 100644 --- a/app/dao/fact_billing_dao.py +++ b/app/dao/fact_billing_dao.py @@ -21,6 +21,7 @@ from app.models import ( EMAIL_TYPE, NOTIFICATION_STATUS_TYPES_BILLABLE_FOR_LETTERS ) +from app.utils import get_london_midnight_in_utc def fetch_billing_totals_for_year(service_id, year): @@ -228,13 +229,15 @@ def get_service_ids_that_need_billing_populated(start_date, end_date): def get_rate( non_letter_rates, letter_rates, notification_type, date, crown=None, letter_page_count=None, post_class='second' ): + start_of_day = get_london_midnight_in_utc(date) + if notification_type == LETTER_TYPE: if letter_page_count == 0: return 0 return next( r.rate for r in letter_rates if ( - date >= r.start_date and + start_of_day >= r.start_date and crown == r.crown and letter_page_count == r.sheet_count and post_class == r.post_class @@ -245,7 +248,7 @@ def get_rate( r.rate for r in non_letter_rates if ( notification_type == r.notification_type and - date >= r.valid_from + start_of_day >= r.valid_from ) ) else: diff --git a/tests/app/celery/test_reporting_tasks.py b/tests/app/celery/test_reporting_tasks.py index 9d3b0bedd..ed87fb285 100644 --- a/tests/app/celery/test_reporting_tasks.py +++ b/tests/app/celery/test_reporting_tasks.py @@ -3,7 +3,6 @@ from decimal import Decimal import pytest from freezegun import freeze_time -from sqlalchemy import desc from app.celery.reporting_tasks import create_nightly_billing, create_nightly_notification_status from app.dao.fact_billing_dao import get_rate @@ -19,7 +18,7 @@ from tests.app.db import create_service, create_template, create_notification, c def mocker_get_rate( - non_letter_rates, letter_rates, notification_type, date, crown=None, rate_multiplier=None, post_class="second" + non_letter_rates, letter_rates, notification_type, bst_date, crown=None, rate_multiplier=None, post_class="second" ): if notification_type == LETTER_TYPE: return Decimal(2.1) @@ -326,20 +325,20 @@ def test_get_rate_for_letter_latest(notify_db_session): 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, datetime(2018, 1, 1), True, 1) + rate = get_rate([], letter_rates, LETTER_TYPE, date(2018, 1, 1), True, 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.15, SMS_TYPE), create_rate(datetime(2017, 12, 1), 0, EMAIL_TYPE) ] - rate = get_rate(non_letter_rates, [], SMS_TYPE, datetime(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, datetime(2018, 1, 1)) + rate = get_rate(non_letter_rates, [], EMAIL_TYPE, date(2018, 1, 1)) assert rate == Decimal(0) diff --git a/tests/app/dao/test_ft_billing_dao.py b/tests/app/dao/test_ft_billing_dao.py index f36e02180..7b8760904 100644 --- a/tests/app/dao/test_ft_billing_dao.py +++ b/tests/app/dao/test_ft_billing_dao.py @@ -1,7 +1,7 @@ from calendar import monthrange from decimal import Decimal -from datetime import datetime, timedelta +from datetime import datetime, timedelta, date from freezegun import freeze_time import pytest @@ -288,18 +288,20 @@ def test_get_rates_for_billing(notify_db_session): assert len(letter_rates) == 29 +@freeze_time('2017-06-01 12:00') def test_get_rate(notify_db_session): - create_rate(start_date=datetime.utcnow(), value=1.2, notification_type='email') - create_rate(start_date=datetime.utcnow(), value=2.2, notification_type='sms') - create_rate(start_date=datetime.utcnow(), value=3.3, notification_type='email') + create_rate(start_date=datetime(2017, 5, 30, 23, 00), value=1.2, notification_type='email') + create_rate(start_date=datetime(2017, 5, 30, 23, 00), value=2.2, notification_type='sms') + create_rate(start_date=datetime(2017, 5, 30, 23, 00), value=3.3, notification_type='email') + non_letter_rates, letter_rates = get_rates_for_billing() rate = get_rate(non_letter_rates=non_letter_rates, letter_rates=letter_rates, notification_type='sms', - date=datetime.utcnow()) + date=date(2017, 6, 1)) letter_rate = get_rate(non_letter_rates=non_letter_rates, letter_rates=letter_rates, notification_type='letter', crown=True, letter_page_count=1, - date=datetime.utcnow()) + date=date(2017, 6, 1)) assert rate == 2.2 assert letter_rate == Decimal('0.3')