def test_fetch_sms_billing_for_all_services_without_an_organisation_appears( notify_db_session, ): org, org_2, service, service_2, service_3, service_sms_only = set_up_usage_data(datetime(2019, 5, 1)) results = fetch_sms_billing_for_all_services(datetime(2019, 5, 1), datetime(2019, 5, 31)) assert len(results) == 2 # organisation_name, organisation_id, service_name, service_id, free_sms_fragment_limit, # sms_rate, sms_remainder, sms_billable_units, chargeable_billable_units, 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] == ( None, None, service_sms_only.name, service_sms_only.id, 10, Decimal("0.11"), 0, 3, 3, Decimal("0.33"), )
def test_fetch_usage_year_for_organisation(notify_db_session): fixtures = set_up_usage_data(datetime(2019, 5, 1)) service_with_emails_for_org = create_service( service_name='Service with emails for org') dao_add_service_to_organisation(service=service_with_emails_for_org, organisation_id=fixtures["org_1"].id) template = create_template(service=service_with_emails_for_org, template_type='email') create_ft_billing(bst_date=datetime(2019, 5, 1), template=template, notifications_sent=1100) results = fetch_usage_year_for_organisation(fixtures["org_1"].id, 2019) assert len(results) == 2 first_row = results[str(fixtures["service_1_sms_and_letter"].id)] assert first_row['service_id'] == fixtures["service_1_sms_and_letter"].id assert first_row['service_name'] == fixtures[ "service_1_sms_and_letter"].name assert first_row['free_sms_limit'] == 10 assert first_row['sms_remainder'] == 10 assert first_row['chargeable_billable_sms'] == 0 assert first_row['sms_cost'] == 0.0 assert first_row['letter_cost'] == 3.4 assert first_row['emails_sent'] == 0 second_row = results[str(service_with_emails_for_org.id)] assert second_row['service_id'] == service_with_emails_for_org.id assert second_row['service_name'] == service_with_emails_for_org.name assert second_row['free_sms_limit'] == 0 assert second_row['sms_remainder'] == 0 assert second_row['chargeable_billable_sms'] == 0 assert second_row['sms_cost'] == 0 assert second_row['letter_cost'] == 0 assert second_row['emails_sent'] == 1100
def test_fetch_letter_costs_for_all_services(notify_db_session): org, org_2, service, service_2, service_3, service_sms_only = set_up_usage_data(datetime(2019, 6, 1)) results = fetch_letter_costs_for_all_services(datetime(2019, 6, 1), datetime(2019, 9, 30)) assert len(results) == 3 assert results[0] == (org.name, org.id, service.name, service.id, Decimal('3.40')) assert results[1] == (org_2.name, org_2.id, service_2.name, service_2.id, Decimal('14.00')) assert results[2] == (None, None, service_3.name, service_3.id, Decimal('8.25'))
def test_fetch_letter_line_items_for_all_service(notify_db_session): org_1, org_2, service_1, service_2, service_3, service_sms_only = set_up_usage_data(datetime(2019, 6, 1)) results = fetch_letter_line_items_for_all_services(datetime(2019, 6, 1), datetime(2019, 9, 30)) assert len(results) == 5 assert results[0] == (org_1.name, org_1.id, service_1.name, service_1.id, Decimal('0.45'), 'second', 6) assert results[1] == (org_1.name, org_1.id, service_1.name, service_1.id, Decimal("0.35"), 'first', 2) assert results[2] == (org_2.name, org_2.id, service_2.name, service_2.id, Decimal("0.65"), 'second', 20) assert results[3] == (org_2.name, org_2.id, service_2.name, service_2.id, Decimal("0.50"), 'first', 2) assert results[4] == (None, None, service_3.name, service_3.id, Decimal("0.55"), 'second', 15)
def test_fetch_usage_for_one_organisation(notify_db_session): org_1, org_2, service_1, service_2, service_3, service_sms_only = set_up_usage_data( datetime(2019, 6, 1)) results = fetch_usage_by_organisation(org_1.id, datetime(2019, 6, 1), datetime(2019, 9, 30)) assert len(results) == 2 assert results[0] == (org_1.name, org_1.id, None, service_1.name, service_1.id, False, 'letter', 'test', 8, 5) assert results[1] == (org_1.name, org_1.id, None, service_1.name, service_1.id, False, 'sms', 'test', 2, 3)
def test_fetch_usage_for_all_organisation(notify_db_session): all_organisation = 0 org_1, org_2, service_1, service_2, service_3, service_sms_only = set_up_usage_data( datetime(2019, 6, 1)) results = fetch_usage_by_organisation(all_organisation, datetime(2019, 6, 1), datetime(2019, 9, 30)) assert len(results) == 5 assert results[0] == (org_1.name, org_1.id, None, service_1.name, service_1.id, False, 'letter', 'test', 8, 5) assert results[1] == (org_1.name, org_1.id, None, service_1.name, service_1.id, False, 'sms', 'test', 2, 3) assert results[2] == (org_2.name, org_2.id, None, service_2.name, service_2.id, False, 'letter', 'test', 22, 13) assert results[3] == (None, None, None, service_sms_only.name, service_sms_only.id, False, 'sms', 'test', 2, 3) assert results[4] == (None, None, None, service_3.name, service_3.id, False, 'letter', 'test', 15, 4)
def test_fetch_letter_costs_for_all_services(notify_db_session): fixtures = set_up_usage_data(datetime(2019, 6, 1)) results = fetch_letter_costs_for_all_services(datetime(2019, 6, 1), datetime(2019, 9, 30)) assert len(results) == 3 assert results[0] == (fixtures["org_1"].name, fixtures["org_1"].id, fixtures["service_1_sms_and_letter"].name, fixtures["service_1_sms_and_letter"].id, Decimal('3.40')) assert results[1] == (fixtures["org_for_service_with_letters"].name, fixtures["org_for_service_with_letters"].id, fixtures["service_with_letters"].name, fixtures["service_with_letters"].id, Decimal('14.00')) assert results[2] == (None, None, fixtures["service_with_letters_without_org"].name, fixtures["service_with_letters_without_org"].id, Decimal('24.45'))
def test_fetch_sms_billing_for_all_services_without_an_organisation_appears( notify_db_session): fixtures = set_up_usage_data(datetime(2019, 5, 1)) 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, service_id, free_sms_fragment_limit, # sms_rate, sms_remainder, sms_billable_units, chargeable_billable_units, sms_cost assert results[0] == (fixtures["org_1"].name, fixtures["org_1"].id, fixtures["service_1_sms_and_letter"].name, fixtures["service_1_sms_and_letter"].id, 10, Decimal('0.11'), 8, 3, 0, Decimal('0')) assert results[1] == (None, None, fixtures["service_with_sms_without_org"].name, fixtures["service_with_sms_without_org"].id, 10, Decimal('0.11'), 0, 3, 3, Decimal('0.33')) assert results[2] == (None, None, fixtures["service_with_sms_within_allowance"].name, fixtures["service_with_sms_within_allowance"].id, 10, Decimal('0.11'), 10, 2, 0, Decimal('0.00'))
def test_get_usage_for_all_services(notify_db_session, admin_request): org, org_2, service, service_2, service_3, service_sms_only = set_up_usage_data( datetime(2019, 5, 1)) response = admin_request.get( "platform_stats.get_usage_for_all_services", start_date="2019-05-01", end_date="2019-06-30", ) assert len(response) == 4 assert response[0]["organisation_id"] == str(org.id) assert response[0]["service_id"] == str(service.id) assert response[0]["sms_cost"] == 0 assert response[0]["sms_fragments"] == 0 assert response[0]["letter_cost"] == 3.40 assert response[0][ "letter_breakdown"] == "6 second class letters at 45p\n2 first class letters at 35p\n" assert response[1]["organisation_id"] == str(org_2.id) assert response[1]["service_id"] == str(service_2.id) assert response[1]["sms_cost"] == 0 assert response[1]["sms_fragments"] == 0 assert response[1]["letter_cost"] == 14 assert response[1][ "letter_breakdown"] == "20 second class letters at 65p\n2 first class letters at 50p\n" assert response[2]["organisation_id"] == "" assert response[2]["service_id"] == str(service_sms_only.id) assert response[2]["sms_cost"] == 0.33 assert response[2]["sms_fragments"] == 3 assert response[2]["letter_cost"] == 0 assert response[2]["letter_breakdown"] == "" assert response[3]["organisation_id"] == "" assert response[3]["service_id"] == str(service_3.id) assert response[3]["sms_cost"] == 0 assert response[3]["sms_fragments"] == 0 assert response[3]["letter_cost"] == 8.25 assert response[3][ "letter_breakdown"] == "15 second class letters at 55p\n"
def test_fetch_letter_line_items_for_all_service(notify_db_session): fixtures = set_up_usage_data(datetime(2019, 6, 1)) results = fetch_letter_line_items_for_all_services(datetime(2019, 6, 1), datetime(2019, 9, 30)) assert len(results) == 7 assert results[0] == (fixtures["org_1"].name, fixtures["org_1"].id, fixtures["service_1_sms_and_letter"].name, fixtures["service_1_sms_and_letter"].id, Decimal('0.45'), 'second', 6) assert results[1] == (fixtures["org_1"].name, fixtures["org_1"].id, fixtures["service_1_sms_and_letter"].name, fixtures["service_1_sms_and_letter"].id, Decimal("0.35"), 'first', 2) assert results[2] == (fixtures["org_for_service_with_letters"].name, fixtures["org_for_service_with_letters"].id, fixtures["service_with_letters"].name, fixtures["service_with_letters"].id, Decimal("0.65"), 'second', 20) assert results[3] == (fixtures["org_for_service_with_letters"].name, fixtures["org_for_service_with_letters"].id, fixtures["service_with_letters"].name, fixtures["service_with_letters"].id, Decimal("0.50"), 'first', 2) assert results[4] == (None, None, fixtures["service_with_letters_without_org"].name, fixtures["service_with_letters_without_org"].id, Decimal("0.35"), 'second', 2) assert results[5] == (None, None, fixtures["service_with_letters_without_org"].name, fixtures["service_with_letters_without_org"].id, Decimal("0.50"), 'first', 1) assert results[6] == (None, None, fixtures["service_with_letters_without_org"].name, fixtures["service_with_letters_without_org"].id, Decimal("1.55"), 'international', 15)
def test_get_data_for_billing_report(notify_db_session, admin_request): fixtures = set_up_usage_data(datetime(2019, 5, 1)) response = admin_request.get("platform_stats.get_data_for_billing_report", start_date='2019-05-01', end_date='2019-06-30') # we set up 6 services, but only 4 returned. service_with_emails was skipped as it had no bills to pay, # and likewise the service with SMS within allowance was skipped. too. assert len(response) == 4 assert response[0]["organisation_id"] == str(fixtures["org_1"].id) assert response[0]["service_id"] == str( fixtures["service_1_sms_and_letter"].id) assert response[0]["sms_cost"] == 0 assert response[0]["sms_fragments"] == 0 assert response[0]["letter_cost"] == 3.40 assert response[0][ "letter_breakdown"] == "6 second class letters at 45p\n2 first class letters at 35p\n" assert response[0][ "purchase_order_number"] == "service purchase order number" assert response[0]["contact_names"] == "service billing contact names" assert response[0][ "contact_email_addresses"] == "[email protected] [email protected]" assert response[0]["billing_reference"] == "service billing reference" assert response[1]["organisation_id"] == str( fixtures["org_for_service_with_letters"].id) assert response[1]["service_id"] == str( fixtures["service_with_letters"].id) assert response[1]["sms_cost"] == 0 assert response[1]["sms_fragments"] == 0 assert response[1]["letter_cost"] == 14 assert response[1][ "letter_breakdown"] == "20 second class letters at 65p\n2 first class letters at 50p\n" assert response[1]["purchase_order_number"] == "org3 purchase order number" assert response[1]["contact_names"] == "org3 billing contact names" assert response[1][ "contact_email_addresses"] == "[email protected] [email protected]" assert response[1]["billing_reference"] == "org3 billing reference" assert response[2]["organisation_id"] == "" assert response[2]["service_id"] == str( fixtures["service_with_sms_without_org"].id) assert response[2]["sms_cost"] == 0.33 assert response[2]["sms_fragments"] == 3 assert response[2]["letter_cost"] == 0 assert response[2]["letter_breakdown"] == "" assert response[2]["purchase_order_number"] == "sms purchase order number" assert response[2]["contact_names"] == "sms billing contact names" assert response[2][ "contact_email_addresses"] == "[email protected] [email protected]" assert response[2]["billing_reference"] == "sms billing reference" assert response[3]["organisation_id"] == "" assert response[3]["service_id"] == str( fixtures["service_with_letters_without_org"].id) assert response[3]["sms_cost"] == 0 assert response[3]["sms_fragments"] == 0 assert response[3]["letter_cost"] == 24.45 assert response[3]["letter_breakdown"] == ( "2 second class letters at 35p\n1 first class letters at 50p\n15 international letters at £1.55\n" ) assert response[3]["purchase_order_number"] is None