def test_fetch_monthly_billing_for_year_adds_data_for_today(notify_db_session): service = create_service() template = create_template(service=service, template_type="email") for i in range(1, 32): create_ft_billing(utc_date='2018-07-{}'.format(i), service=service, template=template, notification_type='email', rate=0.162) create_notification(template=template, status='delivered') assert db.session.query(FactBilling.bst_date).count() == 31 results = fetch_monthly_billing_for_year(service_id=service.id, year=2018) assert db.session.query(FactBilling.bst_date).count() == 32 assert len(results) == 2
def test_get_provider_contains_correct_fields(client, sample_template): create_ft_billing('2018-06-01', sample_template, provider='mmg', billable_unit=1) response = client.get('/provider-details', headers=[create_authorization_header()]) json_resp = json.loads(response.get_data(as_text=True))['provider_details'] allowed_keys = { "id", "created_by_name", "display_name", "identifier", "priority", 'notification_type', "active", "updated_at", "supports_international", "current_month_billable_sms" } assert len(json_resp) == 4 assert allowed_keys == set(json_resp[0].keys())
def test_get_organisation_services_usage_sort_active_first( admin_request, notify_db_session): org = create_organisation(name='Organisation without live services') service = create_service(service_name='live service') archived_service = create_service(service_name='archived_service') template = create_template(service=service) dao_add_service_to_organisation(service=service, organisation_id=org.id) dao_add_service_to_organisation(service=archived_service, organisation_id=org.id) create_annual_billing(service_id=service.id, free_sms_fragment_limit=10, financial_year_start=2019) create_ft_billing(bst_date=datetime.utcnow().date(), template=template, billable_unit=19, rate=0.060, notifications_sent=19) response = admin_request.get( 'organisation.get_organisation_services_usage', organisation_id=org.id, **{"year": 2019}) assert len(response) == 1 assert len(response['services']) == 2 first_service = response['services'][0] assert first_service['service_id'] == str(archived_service.id) assert first_service['service_name'] == archived_service.name assert first_service['active'] is True last_service = response['services'][1] assert last_service['service_id'] == str(service.id) assert last_service['service_name'] == service.name assert last_service['active'] is True dao_archive_service(service_id=archived_service.id) response_after_archive = admin_request.get( 'organisation.get_organisation_services_usage', organisation_id=org.id, **{"year": 2019}) first_service = response_after_archive['services'][0] assert first_service['service_id'] == str(service.id) assert first_service['service_name'] == service.name assert first_service['active'] is True last_service = response_after_archive['services'][1] assert last_service['service_id'] == str(archived_service.id) assert last_service['service_name'] == archived_service.name assert last_service['active'] is False
def test_fetch_sms_free_allowance_remainder_with_two_services( notify_db_session): service = create_service(service_name='has free allowance') template = create_template(service=service) org = create_organisation(name="Org for {}".format(service.name)) dao_add_service_to_organisation(service=service, organisation_id=org.id) create_annual_billing(service_id=service.id, free_sms_fragment_limit=10, financial_year_start=2016) create_ft_billing(template=template, bst_date=datetime(2016, 4, 20), billable_unit=2, rate=0.11) create_ft_billing(template=template, bst_date=datetime(2016, 5, 20), billable_unit=3, rate=0.11) service_2 = create_service(service_name='used free allowance') template_2 = create_template(service=service_2) org_2 = create_organisation(name="Org for {}".format(service_2.name)) dao_add_service_to_organisation(service=service_2, organisation_id=org_2.id) create_annual_billing(service_id=service_2.id, free_sms_fragment_limit=20, financial_year_start=2016) create_ft_billing(template=template_2, bst_date=datetime(2016, 4, 20), billable_unit=12, rate=0.11) create_ft_billing(template=template_2, bst_date=datetime(2016, 4, 22), billable_unit=10, rate=0.11) create_ft_billing(template=template_2, bst_date=datetime(2016, 5, 20), billable_unit=3, rate=0.11) results = fetch_sms_free_allowance_remainder(datetime(2016, 5, 1)).all() assert len(results) == 2 service_result = [row for row in results if row[0] == service.id] assert service_result[0] == (service.id, 10, 2, 8) service_2_result = [row for row in results if row[0] == service_2.id] assert service_2_result[0] == (service_2.id, 20, 22, 0)
def test_delete_billing_data(notify_db_session): service_1 = create_service(service_name="1") service_2 = create_service(service_name="2") sms_template = create_template(service_1, "sms") email_template = create_template(service_1, "email") other_service_template = create_template(service_2, "sms") existing_rows_to_delete = [ # noqa create_ft_billing("2018-01-01", "sms", sms_template, service_1, billable_unit=1), create_ft_billing("2018-01-01", "email", email_template, service_1, billable_unit=2), ] other_day = create_ft_billing("2018-01-02", "sms", sms_template, service_1, billable_unit=3) other_service = create_ft_billing("2018-01-01", "sms", other_service_template, service_2, billable_unit=4) delete_billing_data_for_service_for_day("2018-01-01", service_1.id) current_rows = FactBilling.query.all() assert sorted(x.billable_units for x in current_rows) == sorted([other_day.billable_units, other_service.billable_units])
def test_fetch_sms_billing_for_all_services_for_first_quarter( notify_db_session): # This test is useful because the inner query resultset is empty. service = create_service(service_name='a - has free allowance') template = create_template(service=service) org = create_organisation(name="Org for {}".format(service.name)) dao_add_service_to_organisation(service=service, organisation_id=org.id) create_annual_billing(service_id=service.id, free_sms_fragment_limit=25000, financial_year_start=2019) create_ft_billing(template=template, bst_date=datetime(2019, 4, 20), billable_unit=44, rate=0.11) results = fetch_sms_billing_for_all_services(datetime(2019, 4, 1), datetime(2019, 5, 30)) assert len(results) == 1 assert results[0] == (org.name, org.id, service.name, service.id, 25000, Decimal('0.11'), 25000, 44, 0, Decimal('0'))
def test_delete_billing_data(notify_db_session): service_1 = create_service(service_name='1') service_2 = create_service(service_name='2') sms_template = create_template(service_1, 'sms') email_template = create_template(service_1, 'email') other_service_template = create_template(service_2, 'sms') existing_rows_to_delete = [ # noqa create_ft_billing('2018-01-01', sms_template, billable_unit=1), create_ft_billing('2018-01-01', email_template, billable_unit=2) ] other_day = create_ft_billing('2018-01-02', sms_template, billable_unit=3) other_service = create_ft_billing('2018-01-01', other_service_template, billable_unit=4) delete_billing_data_for_service_for_day('2018-01-01', service_1.id) current_rows = FactBilling.query.all() assert sorted(x.billable_units for x in current_rows) == sorted( [other_day.billable_units, other_service.billable_units] )
def test_dao_get_provider_stats_counts_billable_sms_within_last_month_with_rate_multiplier(setup_provider_details): sms_provider = next((provider for provider in setup_provider_details if provider.notification_type == 'sms'), None) service = create_service(service_name='1') sms_template = create_template(service, 'sms') create_ft_billing( '2018-06-05', 'sms', sms_template, service, provider=sms_provider.identifier, billable_unit=4, rate_multiplier=2 ) results = dao_get_provider_stats() sms_provider_result = next((result for result in results if result.identifier == sms_provider.identifier), None) assert sms_provider_result.current_month_billable_sms == 8
def test_dao_get_provider_stats_ignores_billable_sms_older_than_1_month( setup_provider_details): sms_provider = next((provider for provider in setup_provider_details if provider.notification_type == 'sms'), None) service = create_service(service_name='1') sms_template = create_template(service, 'sms') create_ft_billing('2017-06-05', 'sms', sms_template, service, provider=sms_provider.identifier, billable_unit=4) results = dao_get_provider_stats() sms_provider_result = next( (result for result in results if result.identifier == sms_provider.identifier), None) assert sms_provider_result.current_month_billable_sms == 0
def test_fetch_monthly_billing_for_year(notify_db_session): service = create_service() template = create_template(service=service, template_type="sms") for i in range(1, 31): create_ft_billing( utc_date="2018-06-{}".format(i), service=service, template=template, notification_type="sms", rate_multiplier=2, rate=0.162, ) for i in range(1, 32): create_ft_billing( utc_date="2018-07-{}".format(i), service=service, template=template, notification_type="sms", rate=0.158, ) results = fetch_monthly_billing_for_year(service_id=service.id, year=2018) assert len(results) == 2 assert str(results[0].month) == "2018-06-01" assert results[0].notifications_sent == 30 assert results[0].billable_units == Decimal("60") assert results[0].rate == Decimal("0.162") assert results[0].notification_type == "sms" assert results[0].postage == "none" assert str(results[1].month) == "2018-07-01" assert results[1].notifications_sent == 31 assert results[1].billable_units == Decimal("31") assert results[1].rate == Decimal("0.158") assert results[1].notification_type == "sms" assert results[1].postage == "none"
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") start_date = date(2016, 3, 31) end_date = date(2017, 4, 2) for n in range((end_date - start_date).days): dt = start_date + timedelta(days=n) create_ft_billing(bst_date=dt, template=sms_template, rate=0.162) create_ft_billing(bst_date=dt, template=email_template, rate=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
def test_get_yearly_usage_by_monthly_from_ft_billing(client, notify_db_session): 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(utc_date='2016-{}-{}'.format(mon, d), service=service, template=sms_template, notification_type='sms', billable_unit=1, rate=0.162) create_ft_billing(utc_date='2016-{}-{}'.format(mon, d), service=service, template=email_template, notification_type='email', rate=0) create_ft_billing(utc_date='2016-{}-{}'.format(mon, d), service=service, template=letter_template, notification_type='letter', billable_unit=1, rate=0.33, postage='second') response = client.get('service/{}/billing/ft-monthly-usage?year=2016'.format(service.id), headers=[('Content-Type', 'application/json'), create_authorization_header()]) json_resp = json.loads(response.get_data(as_text=True)) ft_letters = [x for x in json_resp if x['notification_type'] == 'letter'] ft_sms = [x for x in json_resp if x['notification_type'] == 'sms'] ft_email = [x for x in json_resp if x['notification_type'] == 'email'] keys = [x.keys() for x in ft_sms][0] expected_sms_april = {"month": "April", "notification_type": "sms", "billing_units": 30, "rate": 0.162, "postage": "none" } expected_letter_april = {"month": "April", "notification_type": "letter", "billing_units": 30, "rate": 0.33, "postage": "second" } for k in keys: assert ft_sms[0][k] == expected_sms_april[k] assert ft_letters[0][k] == expected_letter_april[k] assert len(ft_email) == 0
def test_fetch_usage_year_for_organisation_only_returns_data_for_live_services( notify_db_session): org = create_organisation(name='Organisation without live services') live_service = create_service(restricted=False) sms_template = create_template(service=live_service) trial_service = create_service(restricted=True, service_name='trial_service') email_template = create_template(service=trial_service, template_type='email') trial_sms_template = create_template(service=trial_service, template_type='sms') trial_letter_template = create_template(service=trial_service, template_type='letter') dao_add_service_to_organisation(service=live_service, organisation_id=org.id) dao_add_service_to_organisation(service=trial_service, organisation_id=org.id) create_ft_billing(bst_date=datetime.utcnow().date(), template=sms_template, rate=0.0158, billable_unit=19, notifications_sent=19) create_ft_billing(bst_date=datetime.utcnow().date(), template=email_template, billable_unit=0, notifications_sent=100) create_ft_billing(bst_date=datetime.utcnow().date(), template=trial_sms_template, billable_unit=200, rate=0.0158, notifications_sent=100) create_ft_billing(bst_date=datetime.utcnow().date(), template=trial_letter_template, billable_unit=40, rate=0.30, notifications_sent=20) results = fetch_usage_year_for_organisation(organisation_id=org.id, year=2019) assert len(results) == 1 assert results[str(live_service.id)]['sms_billable_units'] == 19 assert results[str(live_service.id)]['emails_sent'] == 0
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( utc_date="2016-{}-{}".format(mon, d), service=service, template=sms_template, notification_type="sms", rate=0.0162, ) create_ft_billing( utc_date="2016-{}-{}".format(mon, d), service=service, template=sms_template, notification_type="sms", rate_multiplier=2, rate=0.0162, ) create_ft_billing( utc_date="2016-{}-{}".format(mon, d), service=service, template=email_template, notification_type="email", billable_unit=0, rate=0, ) create_ft_billing( utc_date="2016-{}-{}".format(mon, d), service=service, template=letter_template, notification_type="letter", rate=0.33, postage="second", ) start_date, end_date = get_month_start_and_end_date_in_utc(datetime(2016, int(mon), 1)) return service
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 year in (2016, 2017): for month in range(1, 13): mon = str(month).zfill(2) for day in range(1, monthrange(year, month)[1] + 1): d = str(day).zfill(2) create_ft_billing( utc_date="{}-{}-{}".format(year, mon, d), service=service, template=sms_template, notification_type="sms", rate=0.162, ) create_ft_billing( utc_date="{}-{}-{}".format(year, mon, d), service=service, template=email_template, notification_type="email", rate=0, ) create_ft_billing( utc_date="{}-{}-{}".format(year, mon, d), service=service, template=letter_template, notification_type="letter", rate=0.33, postage="second", ) create_ft_billing( utc_date="{}-{}-{}".format(year, mon, d), service=service, template=letter_template, notification_type="letter", rate=0.30, postage="second", ) return service
def test_dao_fetch_live_services_data(sample_user): org = create_organisation(organisation_type="nhs_central") service = create_service(go_live_user=sample_user, go_live_at="2014-04-20T10:00:00") template = create_template(service=service) service_2 = create_service( service_name="second", go_live_at="2017-04-20T10:00:00", go_live_user=sample_user, ) service_3 = create_service(service_name="third", go_live_at="2016-04-20T10:00:00") # below services should be filtered out: create_service(service_name="restricted", restricted=True) create_service(service_name="not_active", active=False) create_service(service_name="not_live", count_as_live=False) template2 = create_template(service=service, template_type="email") template_letter_1 = create_template(service=service, template_type="letter") template_letter_2 = create_template(service=service_2, template_type="letter") dao_add_service_to_organisation(service=service, organisation_id=org.id) # two sms billing records for 1st service within current financial year: create_ft_billing( utc_date="2019-04-20", notification_type="sms", template=template, service=service, ) create_ft_billing( utc_date="2019-04-21", notification_type="sms", template=template, service=service, ) # one sms billing record for 1st service from previous financial year, should not appear in the result: create_ft_billing( utc_date="2018-04-20", notification_type="sms", template=template, service=service, ) # one email billing record for 1st service within current financial year: create_ft_billing( utc_date="2019-04-20", notification_type="email", template=template2, service=service, ) # one letter billing record for 1st service within current financial year: create_ft_billing( utc_date="2019-04-15", notification_type="letter", template=template_letter_1, service=service, ) # one letter billing record for 2nd service within current financial year: create_ft_billing( utc_date="2019-04-16", notification_type="letter", template=template_letter_2, service=service_2, ) # 1st service: billing from 2018 and 2019 create_annual_billing(service.id, 500, 2018) create_annual_billing(service.id, 100, 2019) # 2nd service: billing from 2018 create_annual_billing(service_2.id, 300, 2018) # 3rd service: billing from 2019 create_annual_billing(service_3.id, 200, 2019) results = dao_fetch_live_services_data() assert len(results) == 3
def test_dao_fetch_live_services_data(sample_user): org = create_organisation(organisation_type='other') service = create_service(go_live_user=sample_user, go_live_at='2014-04-20T10:00:00') template = create_template(service=service) service_2 = create_service(service_name='second', go_live_at='2017-04-20T10:00:00', go_live_user=sample_user) service_3 = create_service(service_name='third', go_live_at='2016-04-20T10:00:00') # below services should be filtered out: create_service(service_name='restricted', restricted=True) create_service(service_name='not_active', active=False) create_service(service_name='not_live', count_as_live=False) template2 = create_template(service=service, template_type='email') template_letter_1 = create_template(service=service, template_type='letter') template_letter_2 = create_template(service=service_2, template_type='letter') dao_add_service_to_organisation(service=service, organisation_id=org.id) # two sms billing records for 1st service within current financial year: create_ft_billing(utc_date='2019-04-20', notification_type='sms', template=template, service=service) create_ft_billing(utc_date='2019-04-21', notification_type='sms', template=template, service=service) # one sms billing record for 1st service from previous financial year, should not appear in the result: create_ft_billing(utc_date='2018-04-20', notification_type='sms', template=template, service=service) # one email billing record for 1st service within current financial year: create_ft_billing(utc_date='2019-04-20', notification_type='email', template=template2, service=service) # one letter billing record for 1st service within current financial year: create_ft_billing(utc_date='2019-04-15', notification_type='letter', template=template_letter_1, service=service) # one letter billing record for 2nd service within current financial year: create_ft_billing(utc_date='2019-04-16', notification_type='letter', template=template_letter_2, service=service_2) # 1st service: billing from 2018 and 2019 create_annual_billing(service.id, 500, 2018) create_annual_billing(service.id, 100, 2019) # 2nd service: billing from 2018 create_annual_billing(service_2.id, 300, 2018) # 3rd service: billing from 2019 create_annual_billing(service_3.id, 200, 2019) results = dao_fetch_live_services_data() assert len(results) == 3
def test_dao_get_provider_stats(notify_db_session): service_1 = create_service(service_name='1') service_2 = create_service(service_name='2') sms_template_1 = create_template(service_1, 'sms') sms_template_2 = create_template(service_2, 'sms') create_ft_billing('2017-06-05', 'sms', sms_template_2, service_1, provider='mmg', billable_unit=4) create_ft_billing('2018-05-31', 'sms', sms_template_1, service_1, provider='sns', billable_unit=1) create_ft_billing('2018-06-01', 'sms', sms_template_1, service_1, provider='sns', rate_multiplier=2, billable_unit=1) create_ft_billing('2018-06-03', 'sms', sms_template_2, service_1, provider='mmg', billable_unit=4) create_ft_billing('2018-06-15', 'sms', sms_template_1, service_2, provider='mmg', billable_unit=1) create_ft_billing('2018-06-28', 'sms', sms_template_2, service_2, provider='sns', billable_unit=2) provider = get_provider_details_by_identifier('pinpoint') provider.priority = 50 dao_update_provider_details(provider) result = dao_get_provider_stats() assert len(result) == 7 assert result[0].identifier == 'ses' assert result[0].display_name == 'AWS SES' assert result[0].created_by_name is None assert result[0].current_month_billable_sms == 0 assert result[1].identifier == 'sns' assert result[1].display_name == 'AWS SNS' assert result[1].supports_international is False assert result[1].active is True assert result[1].current_month_billable_sms == 4 assert result[2].identifier == 'mmg' assert result[2].notification_type == 'sms' assert result[2].supports_international is True assert result[2].active is False assert result[2].current_month_billable_sms == 5 assert result[3].identifier == 'firetext' assert result[3].active is False assert result[3].current_month_billable_sms == 0 assert result[4].identifier == 'loadtesting' assert result[4].active is False assert result[4].current_month_billable_sms == 0 assert result[4].supports_international is False assert result[5].identifier == 'pinpoint' assert result[5].notification_type == 'sms' assert result[5].supports_international is False assert result[5].active is False assert result[5].current_month_billable_sms == 0
def test_fetch_sms_billing_for_all_services_with_remainder(notify_db_session): service = create_service(service_name='a - has free allowance') template = create_template(service=service) org = create_organisation(name="Org for {}".format(service.name)) dao_add_service_to_organisation(service=service, organisation_id=org.id) create_annual_billing(service_id=service.id, free_sms_fragment_limit=10, financial_year_start=2019) create_ft_billing(service=service, template=template, utc_date=datetime(2019, 4, 20), notification_type='sms', billable_unit=2, rate=0.11) create_ft_billing(service=service, template=template, utc_date=datetime(2019, 5, 20), notification_type='sms', billable_unit=2, rate=0.11) create_ft_billing(service=service, template=template, utc_date=datetime(2019, 5, 22), notification_type='sms', billable_unit=1, rate=0.11) service_2 = create_service(service_name='b - used free allowance') template_2 = create_template(service=service_2) org_2 = create_organisation(name="Org for {}".format(service_2.name)) dao_add_service_to_organisation(service=service_2, organisation_id=org_2.id) create_annual_billing(service_id=service_2.id, free_sms_fragment_limit=10, financial_year_start=2019) create_ft_billing(service=service_2, template=template_2, utc_date=datetime(2019, 4, 20), notification_type='sms', billable_unit=12, rate=0.11) create_ft_billing(service=service_2, template=template_2, utc_date=datetime(2019, 5, 20), notification_type='sms', billable_unit=3, rate=0.11) service_3 = create_service(service_name='c - partial allowance') template_3 = create_template(service=service_3) org_3 = create_organisation(name="Org for {}".format(service_3.name)) dao_add_service_to_organisation(service=service_3, organisation_id=org_3.id) create_annual_billing(service_id=service_3.id, free_sms_fragment_limit=10, financial_year_start=2019) create_ft_billing(service=service_3, template=template_3, utc_date=datetime(2019, 4, 20), notification_type='sms', billable_unit=5, rate=0.11) create_ft_billing(service=service_3, template=template_3, utc_date=datetime(2019, 5, 20), notification_type='sms', billable_unit=7, rate=0.11) service_4 = create_service(service_name='d - email only') email_template = create_template(service=service_4, template_type='email') org_4 = create_organisation(name="Org for {}".format(service_4.name)) dao_add_service_to_organisation(service=service_4, organisation_id=org_4.id) create_annual_billing(service_id=service_4.id, free_sms_fragment_limit=10, financial_year_start=2019) create_ft_billing(service=service_4, template=email_template, utc_date=datetime(2019, 5, 22), notifications_sent=5, notification_type='email', billable_unit=0, rate=0) results = fetch_sms_billing_for_all_services(datetime(2019, 5, 1), datetime(2019, 5, 31)) assert len(results) == 3 # (organisation_name, organisation_id, service_name, free_sms_fragment_limit, sms_rate, # sms_remainder, sms_billable_units, chargeable_billable_sms, sms_cost) assert results[0] == (org.name, org.id, service.name, service.id, 10, Decimal('0.11'), 8, 3, 0, Decimal('0')) assert results[1] == (org_2.name, org_2.id, service_2.name, service_2.id, 10, Decimal('0.11'), 0, 3, 3, Decimal('0.33')) assert results[2] == (org_3.name, org_3.id, service_3.name, service_3.id, 10, Decimal('0.11'), 5, 7, 2, Decimal('0.22'))
def test_dao_fetch_live_services_data(sample_user): org = create_organisation(organisation_type='nhs_central') service = create_service(go_live_user=sample_user, go_live_at='2014-04-20T10:00:00') sms_template = create_template(service=service) service_2 = create_service(service_name='second', go_live_at='2017-04-20T10:00:00', go_live_user=sample_user) service_3 = create_service(service_name='third', go_live_at='2016-04-20T10:00:00') # below services should be filtered out: create_service(service_name='restricted', restricted=True) create_service(service_name='not_active', active=False) create_service(service_name='not_live', count_as_live=False) email_template = create_template(service=service, template_type='email') template_letter_1 = create_template(service=service, template_type='letter') template_letter_2 = create_template(service=service_2, template_type='letter') dao_add_service_to_organisation(service=service, organisation_id=org.id) # two sms billing records for 1st service within current financial year: create_ft_billing(bst_date='2019-04-20', template=sms_template) create_ft_billing(bst_date='2019-04-21', template=sms_template) # one sms billing record for 1st service from previous financial year, should not appear in the result: create_ft_billing(bst_date='2018-04-20', template=sms_template) # one email billing record for 1st service within current financial year: create_ft_billing(bst_date='2019-04-20', template=email_template) # one letter billing record for 1st service within current financial year: create_ft_billing(bst_date='2019-04-15', template=template_letter_1) # one letter billing record for 2nd service within current financial year: create_ft_billing(bst_date='2019-04-16', template=template_letter_2) # 1st service: billing from 2018 and 2019 create_annual_billing(service.id, 500, 2018) create_annual_billing(service.id, 100, 2019) # 2nd service: billing from 2018 create_annual_billing(service_2.id, 300, 2018) # 3rd service: billing from 2019 create_annual_billing(service_3.id, 200, 2019) results = dao_fetch_live_services_data() assert len(results) == 3 # checks the results and that they are ordered by date: assert results == [ {'service_id': mock.ANY, 'service_name': 'Sample service', 'organisation_name': 'test_org_1', 'organisation_type': 'nhs_central', 'consent_to_research': None, 'contact_name': 'Test User', 'contact_email': '*****@*****.**', 'contact_mobile': '+447700900986', 'live_date': datetime(2014, 4, 20, 10, 0), 'sms_volume_intent': None, 'email_volume_intent': None, 'letter_volume_intent': None, 'sms_totals': 2, 'email_totals': 1, 'letter_totals': 1, 'free_sms_fragment_limit': 100}, {'service_id': mock.ANY, 'service_name': 'third', 'organisation_name': None, 'consent_to_research': None, 'organisation_type': None, 'contact_name': None, 'contact_email': None, 'contact_mobile': None, 'live_date': datetime(2016, 4, 20, 10, 0), 'sms_volume_intent': None, 'email_volume_intent': None, 'letter_volume_intent': None, 'sms_totals': 0, 'email_totals': 0, 'letter_totals': 0, 'free_sms_fragment_limit': 200}, {'service_id': mock.ANY, 'service_name': 'second', 'organisation_name': None, 'consent_to_research': None, 'contact_name': 'Test User', 'contact_email': '*****@*****.**', 'contact_mobile': '+447700900986', 'live_date': datetime(2017, 4, 20, 10, 0), 'sms_volume_intent': None, 'organisation_type': None, 'email_volume_intent': None, 'letter_volume_intent': None, 'sms_totals': 0, 'email_totals': 0, 'letter_totals': 1, 'free_sms_fragment_limit': 300} ]
def test_dao_get_provider_stats(notify_db_session): service_1 = create_service(service_name='1') service_2 = create_service(service_name='2') sms_template_1 = create_template(service_1, 'sms') sms_template_2 = create_template(service_2, 'sms') create_ft_billing('2017-06-05', sms_template_2, provider='firetext', billable_unit=4) create_ft_billing('2018-05-31', sms_template_1, provider='mmg', billable_unit=1) create_ft_billing('2018-06-01', sms_template_1, provider='mmg', rate_multiplier=2, billable_unit=1) create_ft_billing('2018-06-03', sms_template_2, provider='firetext', billable_unit=4) create_ft_billing('2018-06-15', sms_template_1, provider='firetext', billable_unit=1) create_ft_billing('2018-06-28', sms_template_2, provider='mmg', billable_unit=2) result = dao_get_provider_stats() assert len(result) == 4 assert result[0].identifier == 'ses' assert result[0].display_name == 'AWS SES' assert result[0].created_by_name is None assert result[0].current_month_billable_sms == 0 assert result[1].identifier == 'firetext' assert result[1].notification_type == 'sms' assert result[1].supports_international is False assert result[1].active is True assert result[1].current_month_billable_sms == 5 assert result[2].identifier == 'mmg' assert result[2].display_name == 'MMG' assert result[2].supports_international is True assert result[2].active is True assert result[2].current_month_billable_sms == 4 assert result[3].identifier == 'dvla' assert result[3].current_month_billable_sms == 0 assert result[3].supports_international is False
def set_up_data_for_all_cases(): 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") create_ft_billing(utc_date='2018-05-16', notification_type='sms', template=sms_template, service=service, rate_multiplier=1, international=False, rate=0.162, billable_unit=1, notifications_sent=1) create_ft_billing(utc_date='2018-05-17', notification_type='sms', template=sms_template, service=service, rate_multiplier=2, international=False, rate=0.162, billable_unit=2, notifications_sent=1) create_ft_billing(utc_date='2018-05-16', notification_type='sms', template=sms_template, service=service, rate_multiplier=2, international=False, rate=0.0150, billable_unit=2, notifications_sent=1) create_ft_billing(utc_date='2018-05-16', notification_type='email', template=email_template, service=service, rate_multiplier=1, international=False, rate=0, billable_unit=0, notifications_sent=1) create_ft_billing(utc_date='2018-05-16', notification_type='letter', template=letter_template, service=service, rate_multiplier=1, international=False, rate=0.33, billable_unit=1, notifications_sent=1, postage='second') create_ft_billing(utc_date='2018-05-17', notification_type='letter', template=letter_template, service=service, rate_multiplier=1, international=False, rate=0.36, billable_unit=2, notifications_sent=1, postage='second') create_ft_billing(utc_date='2018-05-18', notification_type='letter', template=letter_template, service=service, rate_multiplier=1, international=False, rate=0.39, billable_unit=3, notifications_sent=1, postage='first') return service
def test_dao_get_provider_stats(notify_db_session): service_1 = create_service(service_name="1") service_2 = create_service(service_name="2") sms_template_1 = create_template(service_1, "sms") sms_template_2 = create_template(service_2, "sms") create_ft_billing("2017-06-05", "sms", sms_template_2, service_1, provider="mmg", billable_unit=4) create_ft_billing("2018-05-31", "sms", sms_template_1, service_1, provider="sns", billable_unit=1) create_ft_billing( "2018-06-01", "sms", sms_template_1, service_1, provider="sns", rate_multiplier=2, billable_unit=1, ) create_ft_billing("2018-06-03", "sms", sms_template_2, service_1, provider="mmg", billable_unit=4) create_ft_billing("2018-06-15", "sms", sms_template_1, service_2, provider="mmg", billable_unit=1) create_ft_billing("2018-06-28", "sms", sms_template_2, service_2, provider="sns", billable_unit=2) provider = get_provider_details_by_identifier("pinpoint") provider.priority = 50 dao_update_provider_details(provider) result = dao_get_provider_stats() assert len(result) == 7 assert result[0].identifier == "ses" assert result[0].display_name == "AWS SES" assert result[0].created_by_name is None assert result[0].current_month_billable_sms == 0 assert result[1].identifier == "sns" assert result[1].display_name == "AWS SNS" assert result[1].supports_international is False assert result[1].active is True assert result[1].current_month_billable_sms == 4 assert result[2].identifier == "mmg" assert result[2].notification_type == "sms" assert result[2].supports_international is True assert result[2].active is False assert result[2].current_month_billable_sms == 5 assert result[3].identifier == "firetext" assert result[3].active is False assert result[3].current_month_billable_sms == 0 assert result[4].identifier == "loadtesting" assert result[4].active is False assert result[4].current_month_billable_sms == 0 assert result[4].supports_international is False assert result[5].identifier == "pinpoint" assert result[5].notification_type == "sms" assert result[5].supports_international is False assert result[5].active is False assert result[5].current_month_billable_sms == 0