Exemple #1
0
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
Exemple #3
0
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'))
Exemple #4
0
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