mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-25 00:33:41 -04:00
update fact_billing_dao::get_rate to use dates not datetimes
update unit tests too
This commit is contained in:
@@ -21,6 +21,7 @@ from app.models import (
|
|||||||
EMAIL_TYPE,
|
EMAIL_TYPE,
|
||||||
NOTIFICATION_STATUS_TYPES_BILLABLE_FOR_LETTERS
|
NOTIFICATION_STATUS_TYPES_BILLABLE_FOR_LETTERS
|
||||||
)
|
)
|
||||||
|
from app.utils import get_london_midnight_in_utc
|
||||||
|
|
||||||
|
|
||||||
def fetch_billing_totals_for_year(service_id, year):
|
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(
|
def get_rate(
|
||||||
non_letter_rates, letter_rates, notification_type, date, crown=None, letter_page_count=None, post_class='second'
|
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 notification_type == LETTER_TYPE:
|
||||||
if letter_page_count == 0:
|
if letter_page_count == 0:
|
||||||
return 0
|
return 0
|
||||||
return next(
|
return next(
|
||||||
r.rate
|
r.rate
|
||||||
for r in letter_rates if (
|
for r in letter_rates if (
|
||||||
date >= r.start_date and
|
start_of_day >= r.start_date and
|
||||||
crown == r.crown and
|
crown == r.crown and
|
||||||
letter_page_count == r.sheet_count and
|
letter_page_count == r.sheet_count and
|
||||||
post_class == r.post_class
|
post_class == r.post_class
|
||||||
@@ -245,7 +248,7 @@ def get_rate(
|
|||||||
r.rate
|
r.rate
|
||||||
for r in non_letter_rates if (
|
for r in non_letter_rates if (
|
||||||
notification_type == r.notification_type and
|
notification_type == r.notification_type and
|
||||||
date >= r.valid_from
|
start_of_day >= r.valid_from
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ from decimal import Decimal
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from freezegun import freeze_time
|
from freezegun import freeze_time
|
||||||
from sqlalchemy import desc
|
|
||||||
|
|
||||||
from app.celery.reporting_tasks import create_nightly_billing, create_nightly_notification_status
|
from app.celery.reporting_tasks import create_nightly_billing, create_nightly_notification_status
|
||||||
from app.dao.fact_billing_dao import get_rate
|
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(
|
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:
|
if notification_type == LETTER_TYPE:
|
||||||
return Decimal(2.1)
|
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')
|
old = create_letter_rate(datetime(2016, 12, 1), crown=True, sheet_count=1, rate=0.30, post_class='second')
|
||||||
letter_rates = [new, old]
|
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)
|
assert rate == Decimal(0.33)
|
||||||
|
|
||||||
|
|
||||||
def test_get_rate_for_sms_and_email(notify_db_session):
|
def test_get_rate_for_sms_and_email(notify_db_session):
|
||||||
non_letter_rates = [
|
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)
|
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)
|
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)
|
assert rate == Decimal(0)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from calendar import monthrange
|
from calendar import monthrange
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta, date
|
||||||
from freezegun import freeze_time
|
from freezegun import freeze_time
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
@@ -288,18 +288,20 @@ def test_get_rates_for_billing(notify_db_session):
|
|||||||
assert len(letter_rates) == 29
|
assert len(letter_rates) == 29
|
||||||
|
|
||||||
|
|
||||||
|
@freeze_time('2017-06-01 12:00')
|
||||||
def test_get_rate(notify_db_session):
|
def test_get_rate(notify_db_session):
|
||||||
create_rate(start_date=datetime.utcnow(), value=1.2, notification_type='email')
|
create_rate(start_date=datetime(2017, 5, 30, 23, 00), value=1.2, notification_type='email')
|
||||||
create_rate(start_date=datetime.utcnow(), value=2.2, notification_type='sms')
|
create_rate(start_date=datetime(2017, 5, 30, 23, 00), 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=3.3, notification_type='email')
|
||||||
|
|
||||||
non_letter_rates, letter_rates = get_rates_for_billing()
|
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',
|
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,
|
letter_rate = get_rate(non_letter_rates=non_letter_rates, letter_rates=letter_rates,
|
||||||
notification_type='letter',
|
notification_type='letter',
|
||||||
crown=True,
|
crown=True,
|
||||||
letter_page_count=1,
|
letter_page_count=1,
|
||||||
date=datetime.utcnow())
|
date=date(2017, 6, 1))
|
||||||
|
|
||||||
assert rate == 2.2
|
assert rate == 2.2
|
||||||
assert letter_rate == Decimal('0.3')
|
assert letter_rate == Decimal('0.3')
|
||||||
|
|||||||
Reference in New Issue
Block a user