From 7fc85108cfdc640dd2a4ed58e83c4a1993f70b2e Mon Sep 17 00:00:00 2001 From: Tobias Kunze Date: Thu, 4 Dec 2025 16:53:23 +0100 Subject: [PATCH] Reduce test verbosity --- src/tests/test_compute_plans.py | 190 ++++++++++---------------------- 1 file changed, 59 insertions(+), 131 deletions(-) diff --git a/src/tests/test_compute_plans.py b/src/tests/test_compute_plans.py index 1954176..2f67b20 100644 --- a/src/tests/test_compute_plans.py +++ b/src/tests/test_compute_plans.py @@ -187,28 +187,68 @@ def test_build_billing_annotations_empty(): @pytest.mark.django_db -def test_hour_unit(): +@pytest.mark.parametrize( + "unit_key,expected_display", + [ + ("hour", "Hour"), + ("day", "Day"), + ("year", "Year"), + ], +) +def test_billing_unit_choices(unit_key, expected_display): choices = dict(ComputePlanAssignment.BILLING_UNIT_CHOICES) - assert "hour" in choices - assert str(choices["hour"]) == "Hour" + assert unit_key in choices + assert str(choices[unit_key]) == expected_display @pytest.mark.django_db -def test_all_billing_units(): +def test_billing_unit_month(): + """Month has a special display format with additional info.""" choices = dict(ComputePlanAssignment.BILLING_UNIT_CHOICES) - - assert "hour" in choices - assert "day" in choices assert "month" in choices - assert "year" in choices - - assert str(choices["hour"]) == "Hour" - assert str(choices["day"]) == "Day" assert "Month" in str(choices["month"]) - assert str(choices["year"]) == "Year" -def test_build_billing_annotations_by_service_grouping(): +@pytest.mark.parametrize( + "invoice_grouping,org_name,osb_guid,expected_group_desc,expected_item_desc", + [ + pytest.param( + InvoiceGroupingChoice.BY_SERVICE, + "ACME Corp", + "some-guid", + "Servala Service: Redis", + "MyProdRedis on Exoscale Geneva (CH-GVA-2)", + id="by_service", + ), + pytest.param( + InvoiceGroupingChoice.BY_ORGANIZATION, + "ACME", + "01998651-dc86-7d43-9e49-cdb790fcc4f0", + "Organization: ACME (01998651-dc86-7d43-9e49-cdb790fcc4f0)", + "MyProdRedis on Geneva (CH-GVA-2) [Org: 01998651-dc86-7d43-9e49-cdb790fcc4f0]", + id="by_organization_with_guid", + ), + pytest.param( + InvoiceGroupingChoice.BY_ORGANIZATION, + "ACME Corp", + None, + "Organization: ACME Corp", + "MyProdRedis on Geneva (CH-GVA-2)", + id="by_organization_without_guid", + ), + pytest.param( + InvoiceGroupingChoice.BY_ORGANIZATION, + "ACME Corp", + "", + "Organization: ACME Corp", + "MyProdRedis on Geneva (CH-GVA-2)", + id="by_organization_with_empty_guid", + ), + ], +) +def test_build_billing_annotations_item_description( + invoice_grouping, org_name, osb_guid, expected_group_desc, expected_item_desc +): control_plane = Mock() control_plane.storage_plan_odoo_product_id = None control_plane.storage_plan_odoo_unit_id = None @@ -217,10 +257,10 @@ def test_build_billing_annotations_by_service_grouping(): control_plane.name = "Geneva (CH-GVA-2)" organization = Mock() - organization.name = "ACME Corp" - organization.osb_guid = "01998651-dc86-7d43-9e49-cdb790fcc4f0" + organization.name = org_name + organization.osb_guid = osb_guid organization.origin = Mock() - organization.origin.invoice_grouping = InvoiceGroupingChoice.BY_SERVICE + organization.origin.invoice_grouping = invoice_grouping service = Mock() service.name = "Redis" @@ -233,119 +273,8 @@ def test_build_billing_annotations_by_service_grouping(): service=service, ) - assert ( - annotations["servala.com/erp_item_group_description"] - == "Servala Service: Redis" - ) - assert ( - annotations["servala.com/erp_item_description"] - == "MyProdRedis on Exoscale Geneva (CH-GVA-2)" - ) - - -def test_build_billing_annotations_by_organization_grouping_with_osb_guid(): - control_plane = Mock() - control_plane.storage_plan_odoo_product_id = None - control_plane.storage_plan_odoo_unit_id = None - control_plane.cloud_provider = Mock() - control_plane.cloud_provider.name = "Exoscale" - control_plane.name = "Geneva (CH-GVA-2)" - - organization = Mock() - organization.name = "ACME" - organization.osb_guid = "01998651-dc86-7d43-9e49-cdb790fcc4f0" - organization.origin = Mock() - organization.origin.invoice_grouping = InvoiceGroupingChoice.BY_ORGANIZATION - - service = Mock() - service.name = "Redis" - - annotations = ServiceInstance._build_billing_annotations( - compute_plan_assignment=None, - control_plane=control_plane, - instance_name="MyProdRedis", - organization=organization, - service=service, - ) - - assert ( - annotations["servala.com/erp_item_group_description"] - == "Organization: ACME (01998651-dc86-7d43-9e49-cdb790fcc4f0)" - ) - assert ( - annotations["servala.com/erp_item_description"] - == "MyProdRedis on Geneva (CH-GVA-2) [Org: 01998651-dc86-7d43-9e49-cdb790fcc4f0]" - ) - - -def test_build_billing_annotations_by_organization_grouping_without_osb_guid(): - control_plane = Mock() - control_plane.storage_plan_odoo_product_id = None - control_plane.storage_plan_odoo_unit_id = None - control_plane.cloud_provider = Mock() - control_plane.cloud_provider.name = "Exoscale" - control_plane.name = "Geneva (CH-GVA-2)" - - organization = Mock() - organization.name = "ACME Corp" - organization.osb_guid = None # No OSB GUID - organization.origin = Mock() - organization.origin.invoice_grouping = InvoiceGroupingChoice.BY_ORGANIZATION - - service = Mock() - service.name = "Redis" - - annotations = ServiceInstance._build_billing_annotations( - compute_plan_assignment=None, - control_plane=control_plane, - instance_name="MyProdRedis", - organization=organization, - service=service, - ) - - assert ( - annotations["servala.com/erp_item_group_description"] - == "Organization: ACME Corp" - ) - assert ( - annotations["servala.com/erp_item_description"] - == "MyProdRedis on Geneva (CH-GVA-2)" - ) - - -def test_build_billing_annotations_by_organization_grouping_with_empty_osb_guid(): - control_plane = Mock() - control_plane.storage_plan_odoo_product_id = None - control_plane.storage_plan_odoo_unit_id = None - control_plane.cloud_provider = Mock() - control_plane.cloud_provider.name = "Exoscale" - control_plane.name = "Geneva (CH-GVA-2)" - - organization = Mock() - organization.name = "ACME Corp" - organization.osb_guid = "" # Empty string OSB GUID - organization.origin = Mock() - organization.origin.invoice_grouping = InvoiceGroupingChoice.BY_ORGANIZATION - - service = Mock() - service.name = "Redis" - - annotations = ServiceInstance._build_billing_annotations( - compute_plan_assignment=None, - control_plane=control_plane, - instance_name="MyProdRedis", - organization=organization, - service=service, - ) - - assert ( - annotations["servala.com/erp_item_group_description"] - == "Organization: ACME Corp" - ) - assert ( - annotations["servala.com/erp_item_description"] - == "MyProdRedis on Geneva (CH-GVA-2)" - ) + assert annotations["servala.com/erp_item_group_description"] == expected_group_desc + assert annotations["servala.com/erp_item_description"] == expected_item_desc def test_build_billing_annotations_no_item_description_without_organization(): @@ -357,13 +286,12 @@ def test_build_billing_annotations_no_item_description_without_organization(): compute_plan_assignment=None, control_plane=control_plane, instance_name="MyProdRedis", - organization=None, # No organization + organization=None, service=None, ) assert "servala.com/erp_item_group_description" not in annotations assert "servala.com/erp_item_description" not in annotations - # Storage annotations should still be there assert annotations["servala.com/erp_product_id_storage"] == "storage-product"