mirror of
https://github.com/GSA/notifications-api.git
synced 2026-01-31 15:15:38 -05:00
Merge pull request #3528 from alphagov/tidy-up-usage-tests-181934027
Minor refactorings to usage API tests
This commit is contained in:
@@ -1,15 +1,11 @@
|
||||
from calendar import monthrange
|
||||
from datetime import datetime
|
||||
from datetime import date, datetime
|
||||
|
||||
import pytest
|
||||
from freezegun import freeze_time
|
||||
|
||||
from app.billing.rest import update_free_sms_fragment_limit_data
|
||||
from app.dao.annual_billing_dao import dao_get_free_sms_fragment_limit_for_year
|
||||
from app.dao.date_util import (
|
||||
get_current_financial_year_start_year,
|
||||
get_month_start_and_end_date_in_utc,
|
||||
)
|
||||
from app.dao.date_util import get_current_financial_year_start_year
|
||||
from tests.app.db import (
|
||||
create_annual_billing,
|
||||
create_ft_billing,
|
||||
@@ -125,35 +121,18 @@ def test_update_free_sms_fragment_limit_data(client, sample_service):
|
||||
assert annual_billing.free_sms_fragment_limit == 9999
|
||||
|
||||
|
||||
def set_up_monthly_data():
|
||||
def test_get_yearly_usage_by_monthly_from_ft_billing(admin_request, notify_db_session):
|
||||
service = create_service()
|
||||
create_annual_billing(service_id=service.id, free_sms_fragment_limit=1, financial_year_start=2016)
|
||||
|
||||
sms_template = create_template(service=service, template_type="sms")
|
||||
email_template = create_template(service=service, template_type="email")
|
||||
letter_template = create_template(service=service, template_type="letter")
|
||||
|
||||
for month in range(1, 13):
|
||||
mon = str(month).zfill(2)
|
||||
for day in range(1, monthrange(2016, month)[1] + 1):
|
||||
d = str(day).zfill(2)
|
||||
create_ft_billing(bst_date='2016-{}-{}'.format(mon, d),
|
||||
template=sms_template,
|
||||
billable_unit=1,
|
||||
rate=0.162)
|
||||
create_ft_billing(bst_date='2016-{}-{}'.format(mon, d),
|
||||
template=email_template,
|
||||
rate=0)
|
||||
create_ft_billing(bst_date='2016-{}-{}'.format(mon, d),
|
||||
template=letter_template,
|
||||
billable_unit=1,
|
||||
rate=0.33,
|
||||
postage='second')
|
||||
|
||||
create_annual_billing(service_id=service.id, free_sms_fragment_limit=4, financial_year_start=2016)
|
||||
return service
|
||||
|
||||
|
||||
def test_get_yearly_usage_by_monthly_from_ft_billing(admin_request, notify_db_session):
|
||||
service = set_up_monthly_data()
|
||||
for dt in (date(2016, 4, 28), date(2016, 11, 10), date(2017, 2, 26)):
|
||||
create_ft_billing(bst_date=dt, template=sms_template, rate=0.0162)
|
||||
create_ft_billing(bst_date=dt, template=email_template, billable_unit=0, rate=0)
|
||||
create_ft_billing(bst_date=dt, template=letter_template, rate=0.33, postage='second')
|
||||
|
||||
json_response = admin_request.get(
|
||||
'billing.get_yearly_usage_by_monthly_from_ft_billing',
|
||||
@@ -161,7 +140,7 @@ def test_get_yearly_usage_by_monthly_from_ft_billing(admin_request, notify_db_se
|
||||
year=2016
|
||||
)
|
||||
|
||||
assert len(json_response) == 18
|
||||
assert len(json_response) == 6 # 3 billed months for SMS and letters
|
||||
|
||||
email_rows = [row for row in json_response if row['notification_type'] == 'email']
|
||||
assert len(email_rows) == 0
|
||||
@@ -171,57 +150,26 @@ def test_get_yearly_usage_by_monthly_from_ft_billing(admin_request, notify_db_se
|
||||
|
||||
assert letter_row["month"] == "April"
|
||||
assert letter_row["notification_type"] == "letter"
|
||||
assert letter_row["billing_units"] == 30
|
||||
assert letter_row["chargeable_units"] == 30
|
||||
assert letter_row["notifications_sent"] == 30
|
||||
assert letter_row["billing_units"] == 1
|
||||
assert letter_row["chargeable_units"] == 1
|
||||
assert letter_row["notifications_sent"] == 1
|
||||
assert letter_row["rate"] == 0.33
|
||||
assert letter_row["postage"] == "second"
|
||||
assert letter_row["cost"] == 9.9
|
||||
assert letter_row["cost"] == 0.33
|
||||
assert letter_row["free_allowance_used"] == 0
|
||||
assert letter_row["charged_units"] == 30
|
||||
assert letter_row["charged_units"] == 1
|
||||
|
||||
assert sms_row["month"] == "April"
|
||||
assert sms_row["notification_type"] == "sms"
|
||||
assert sms_row["billing_units"] == 30
|
||||
assert sms_row["chargeable_units"] == 30
|
||||
assert sms_row["notifications_sent"] == 30
|
||||
assert sms_row["rate"] == 0.162
|
||||
assert sms_row["billing_units"] == 1
|
||||
assert sms_row["chargeable_units"] == 1
|
||||
assert sms_row["notifications_sent"] == 1
|
||||
assert sms_row["rate"] == 0.0162
|
||||
assert sms_row["postage"] == "none"
|
||||
# free allowance is 4, so (30 - 4) * 0.162
|
||||
assert sms_row["cost"] == 4.212
|
||||
assert sms_row["free_allowance_used"] == 4
|
||||
assert sms_row["charged_units"] == 26
|
||||
|
||||
|
||||
def set_up_yearly_data():
|
||||
service = create_service()
|
||||
sms_template = create_template(service=service, template_type="sms")
|
||||
email_template = create_template(service=service, template_type="email")
|
||||
letter_template = create_template(service=service, template_type="letter")
|
||||
|
||||
for month in range(1, 13):
|
||||
mon = str(month).zfill(2)
|
||||
for day in range(1, monthrange(2016, month)[1] + 1):
|
||||
d = str(day).zfill(2)
|
||||
create_ft_billing(bst_date='2016-{}-{}'.format(mon, d),
|
||||
template=sms_template,
|
||||
rate=0.0162)
|
||||
create_ft_billing(bst_date='2016-{}-{}'.format(mon, d),
|
||||
template=sms_template,
|
||||
rate_multiplier=2,
|
||||
rate=0.0162)
|
||||
create_ft_billing(bst_date='2016-{}-{}'.format(mon, d),
|
||||
template=email_template,
|
||||
billable_unit=0,
|
||||
rate=0)
|
||||
create_ft_billing(bst_date='2016-{}-{}'.format(mon, d),
|
||||
template=letter_template,
|
||||
rate=0.33,
|
||||
postage='second')
|
||||
start_date, end_date = get_month_start_and_end_date_in_utc(datetime(2016, int(mon), 1))
|
||||
|
||||
create_annual_billing(service_id=service.id, free_sms_fragment_limit=4, financial_year_start=2016)
|
||||
return service
|
||||
# free allowance is 1
|
||||
assert sms_row["cost"] == 0
|
||||
assert sms_row["free_allowance_used"] == 1
|
||||
assert sms_row["charged_units"] == 0
|
||||
|
||||
|
||||
def test_get_yearly_billing_usage_summary_from_ft_billing_returns_400_if_missing_year(admin_request, sample_service):
|
||||
@@ -247,7 +195,17 @@ def test_get_yearly_billing_usage_summary_from_ft_billing_returns_empty_list_if_
|
||||
|
||||
|
||||
def test_get_yearly_billing_usage_summary_from_ft_billing(admin_request, notify_db_session):
|
||||
service = set_up_yearly_data()
|
||||
service = create_service()
|
||||
create_annual_billing(service_id=service.id, free_sms_fragment_limit=1, financial_year_start=2016)
|
||||
|
||||
sms_template = create_template(service=service, template_type="sms")
|
||||
email_template = create_template(service=service, template_type="email")
|
||||
letter_template = create_template(service=service, template_type="letter")
|
||||
|
||||
for dt in (date(2016, 4, 28), date(2016, 11, 10), date(2017, 2, 26)):
|
||||
create_ft_billing(bst_date=dt, template=sms_template, rate=0.0162)
|
||||
create_ft_billing(bst_date=dt, template=email_template, billable_unit=0, rate=0)
|
||||
create_ft_billing(bst_date=dt, template=letter_template, rate=0.33, postage='second')
|
||||
|
||||
json_response = admin_request.get(
|
||||
'billing.get_yearly_billing_usage_summary_from_ft_billing',
|
||||
@@ -258,9 +216,9 @@ def test_get_yearly_billing_usage_summary_from_ft_billing(admin_request, notify_
|
||||
assert len(json_response) == 3
|
||||
|
||||
assert json_response[0]['notification_type'] == 'email'
|
||||
assert json_response[0]['billing_units'] == 275
|
||||
assert json_response[0]['billing_units'] == 3
|
||||
assert json_response[0]['chargeable_units'] == 0
|
||||
assert json_response[0]['notifications_sent'] == 275
|
||||
assert json_response[0]['notifications_sent'] == 3
|
||||
assert json_response[0]['rate'] == 0
|
||||
assert json_response[0]['letter_total'] == 0
|
||||
assert json_response[0]['cost'] == 0
|
||||
@@ -268,21 +226,21 @@ def test_get_yearly_billing_usage_summary_from_ft_billing(admin_request, notify_
|
||||
assert json_response[0]['charged_units'] == 0
|
||||
|
||||
assert json_response[1]['notification_type'] == 'letter'
|
||||
assert json_response[1]['billing_units'] == 275
|
||||
assert json_response[1]['chargeable_units'] == 275
|
||||
assert json_response[1]['notifications_sent'] == 275
|
||||
assert json_response[1]['billing_units'] == 3
|
||||
assert json_response[1]['chargeable_units'] == 3
|
||||
assert json_response[1]['notifications_sent'] == 3
|
||||
assert json_response[1]['rate'] == 0.33
|
||||
assert json_response[1]['letter_total'] == 90.75
|
||||
assert json_response[1]['cost'] == 90.75
|
||||
assert json_response[1]['letter_total'] == 0.99
|
||||
assert json_response[1]['cost'] == 0.99
|
||||
assert json_response[1]['free_allowance_used'] == 0
|
||||
assert json_response[1]['charged_units'] == 275
|
||||
assert json_response[1]['charged_units'] == 3
|
||||
|
||||
assert json_response[2]['notification_type'] == 'sms'
|
||||
assert json_response[2]['billing_units'] == 825
|
||||
assert json_response[2]['chargeable_units'] == 825
|
||||
assert json_response[2]['notifications_sent'] == 550
|
||||
assert json_response[2]['billing_units'] == 3
|
||||
assert json_response[2]['chargeable_units'] == 3
|
||||
assert json_response[2]['notifications_sent'] == 3
|
||||
assert json_response[2]['rate'] == 0.0162
|
||||
assert json_response[2]['letter_total'] == 0
|
||||
assert json_response[2]['cost'] == 13.3002
|
||||
assert json_response[2]['free_allowance_used'] == 4
|
||||
assert json_response[2]['charged_units'] == 821
|
||||
assert json_response[2]['cost'] == 0.0324
|
||||
assert json_response[2]['free_allowance_used'] == 1
|
||||
assert json_response[2]['charged_units'] == 2
|
||||
|
||||
@@ -50,18 +50,13 @@ def set_up_yearly_data():
|
||||
for dt in (date(2016, 3, 31), date(2017, 4, 1)):
|
||||
create_ft_billing(bst_date=dt, template=sms_template, rate=0.163)
|
||||
create_ft_billing(bst_date=dt, template=email_template, rate=0, billable_unit=0)
|
||||
create_ft_billing(bst_date=dt, template=letter_template, rate=0.34, postage='second')
|
||||
create_ft_billing(bst_date=dt, template=letter_template, rate=0.31, postage='second')
|
||||
|
||||
start_date = date(2016, 4, 1)
|
||||
end_date = date(2017, 4, 1)
|
||||
|
||||
for n in range((end_date - start_date).days):
|
||||
dt = start_date + timedelta(days=n)
|
||||
|
||||
# a selection of dates that represent the extreme ends of the financial year
|
||||
# and some arbitrary dates in between
|
||||
for dt in (date(2016, 4, 1), date(2016, 4, 29), date(2017, 2, 6), date(2017, 3, 31)):
|
||||
create_ft_billing(bst_date=dt, template=sms_template, rate=0.162)
|
||||
create_ft_billing(bst_date=dt, template=email_template, rate=0, billable_unit=0)
|
||||
create_ft_billing(bst_date=dt, template=letter_template, rate=0.33, postage='second')
|
||||
create_ft_billing(bst_date=dt, template=letter_template, rate=0.30, postage='second')
|
||||
|
||||
return service
|
||||
@@ -426,15 +421,15 @@ def test_get_rate_for_letters_when_page_count_is_zero(notify_db_session):
|
||||
|
||||
def test_fetch_monthly_billing_for_year(notify_db_session):
|
||||
service = set_up_yearly_data()
|
||||
create_annual_billing(service_id=service.id, free_sms_fragment_limit=10, financial_year_start=2016)
|
||||
create_annual_billing(service_id=service.id, free_sms_fragment_limit=1, financial_year_start=2016)
|
||||
results = fetch_monthly_billing_for_year(service.id, 2016)
|
||||
|
||||
assert len(results) == 48
|
||||
assert len(results) == 9 # 3 billed months for each type
|
||||
|
||||
assert str(results[0].month) == "2016-04-01"
|
||||
assert results[0].notification_type == 'email'
|
||||
assert results[0].notifications_sent == 30
|
||||
assert results[0].billable_units == 30
|
||||
assert results[0].notifications_sent == 2
|
||||
assert results[0].billable_units == 2
|
||||
assert results[0].chargeable_units == 0
|
||||
assert results[0].rate == Decimal('0')
|
||||
assert results[0].cost == Decimal('0')
|
||||
@@ -443,37 +438,27 @@ def test_fetch_monthly_billing_for_year(notify_db_session):
|
||||
|
||||
assert str(results[1].month) == "2016-04-01"
|
||||
assert results[1].notification_type == 'letter'
|
||||
assert results[1].notifications_sent == 30
|
||||
assert results[1].billable_units == 30
|
||||
assert results[1].chargeable_units == 30
|
||||
assert results[1].notifications_sent == 2
|
||||
assert results[1].billable_units == 2
|
||||
assert results[1].chargeable_units == 2
|
||||
assert results[1].rate == Decimal('0.30')
|
||||
assert results[1].cost == Decimal('9')
|
||||
assert results[1].cost == Decimal('0.60')
|
||||
assert results[1].free_allowance_used == 0
|
||||
assert results[1].charged_units == 30
|
||||
assert results[1].charged_units == 2
|
||||
|
||||
assert str(results[1].month) == "2016-04-01"
|
||||
assert results[2].notification_type == 'letter'
|
||||
assert results[2].notifications_sent == 30
|
||||
assert results[2].billable_units == 30
|
||||
assert results[2].chargeable_units == 30
|
||||
assert results[2].rate == Decimal('0.33')
|
||||
assert results[2].cost == Decimal('9.9')
|
||||
assert results[2].free_allowance_used == 0
|
||||
assert results[2].charged_units == 30
|
||||
assert str(results[2].month) == "2016-04-01"
|
||||
assert results[2].notification_type == 'sms'
|
||||
assert results[2].notifications_sent == 2
|
||||
assert results[2].billable_units == 2
|
||||
assert results[2].chargeable_units == 2
|
||||
assert results[2].rate == Decimal('0.162')
|
||||
# free allowance is 1
|
||||
assert results[2].cost == Decimal('0.162')
|
||||
assert results[2].free_allowance_used == 1
|
||||
assert results[2].charged_units == 1
|
||||
|
||||
assert str(results[3].month) == "2016-04-01"
|
||||
assert results[3].notification_type == 'sms'
|
||||
assert results[3].notifications_sent == 30
|
||||
assert results[3].billable_units == 30
|
||||
assert results[3].chargeable_units == 30
|
||||
assert results[3].rate == Decimal('0.162')
|
||||
# free allowance is 10, so (30 - 10) * 0.162
|
||||
assert results[3].cost == Decimal('3.24')
|
||||
assert results[3].free_allowance_used == 10
|
||||
assert results[3].charged_units == 20
|
||||
|
||||
assert str(results[4].month) == "2016-05-01"
|
||||
assert str(results[47].month) == "2017-03-01"
|
||||
assert str(results[3].month) == "2017-02-01"
|
||||
assert str(results[8].month) == "2017-03-01"
|
||||
|
||||
|
||||
def test_fetch_monthly_billing_for_year_variable_rates(notify_db_session):
|
||||
@@ -552,10 +537,10 @@ def test_fetch_billing_totals_for_year(notify_db_session):
|
||||
create_annual_billing(service_id=service.id, free_sms_fragment_limit=1000, financial_year_start=2016)
|
||||
results = fetch_billing_totals_for_year(service_id=service.id, year=2016)
|
||||
|
||||
assert len(results) == 4
|
||||
assert len(results) == 3
|
||||
assert results[0].notification_type == 'email'
|
||||
assert results[0].notifications_sent == 365
|
||||
assert results[0].billable_units == 365
|
||||
assert results[0].notifications_sent == 4
|
||||
assert results[0].billable_units == 4
|
||||
assert results[0].chargeable_units == 0
|
||||
assert results[0].rate == Decimal('0')
|
||||
assert results[0].cost == Decimal('0')
|
||||
@@ -563,31 +548,22 @@ def test_fetch_billing_totals_for_year(notify_db_session):
|
||||
assert results[0].charged_units == 0
|
||||
|
||||
assert results[1].notification_type == 'letter'
|
||||
assert results[1].notifications_sent == 365
|
||||
assert results[1].billable_units == 365
|
||||
assert results[1].chargeable_units == 365
|
||||
assert results[1].notifications_sent == 4
|
||||
assert results[1].billable_units == 4
|
||||
assert results[1].chargeable_units == 4
|
||||
assert results[1].rate == Decimal('0.3')
|
||||
assert results[1].cost == Decimal('109.5')
|
||||
assert results[1].cost == Decimal('1.2')
|
||||
assert results[1].free_allowance_used == 0
|
||||
assert results[1].charged_units == 365
|
||||
assert results[1].charged_units == 4
|
||||
|
||||
assert results[2].notification_type == 'letter'
|
||||
assert results[2].notifications_sent == 365
|
||||
assert results[2].billable_units == 365
|
||||
assert results[2].chargeable_units == 365
|
||||
assert results[2].rate == Decimal('0.33')
|
||||
assert results[2].cost == Decimal('120.45')
|
||||
assert results[2].free_allowance_used == 0
|
||||
assert results[2].charged_units == 365
|
||||
|
||||
assert results[3].notification_type == 'sms'
|
||||
assert results[3].notifications_sent == 365
|
||||
assert results[3].billable_units == 365
|
||||
assert results[3].chargeable_units == 365
|
||||
assert results[3].rate == Decimal('0.162')
|
||||
assert results[3].cost == Decimal('0')
|
||||
assert results[3].free_allowance_used == 365
|
||||
assert results[3].charged_units == 0
|
||||
assert results[2].notification_type == 'sms'
|
||||
assert results[2].notifications_sent == 4
|
||||
assert results[2].billable_units == 4
|
||||
assert results[2].chargeable_units == 4
|
||||
assert results[2].rate == Decimal('0.162')
|
||||
assert results[2].cost == Decimal('0')
|
||||
assert results[2].free_allowance_used == 4
|
||||
assert results[2].charged_units == 0
|
||||
|
||||
|
||||
def test_fetch_billing_totals_for_year_uses_current_annual_billing(notify_db_session):
|
||||
@@ -601,7 +577,7 @@ def test_fetch_billing_totals_for_year_uses_current_annual_billing(notify_db_ses
|
||||
if result.notification_type == 'sms'
|
||||
)
|
||||
|
||||
assert result.chargeable_units == 365
|
||||
assert result.chargeable_units == 4
|
||||
assert result.cost > 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user