"""Functional tests for GET /reports/contract-subtotal-aggregations endpoint.""" import json from oto import status import pytest from tests.testutils import db @pytest.mark.parametrize( "report_run_id, collaborator_dp_enabled, expected_count, expected_amount", [ # Basic request without filter (1, None, 2, 800.0), # With collaborator_dp_enabled=False filter (1, False, 2, 800.0), # With collaborator_dp_enabled=True filter (1, True, 0, 0.0), # Different report run (2, None, 1, 800.0), # Report run with no contracts (999, None, 0, 0.0), ], ) @db.test_schema_default_seed def test_get_report_contract_subtotal_aggregations_success( auth_client, report_run_id, collaborator_dp_enabled, expected_count, expected_amount, ): """Test successful requests to get report contract subtotal aggregations.""" query_string = {"report_run_id": report_run_id} if collaborator_dp_enabled is not None: query_string["collaborator_dp_enabled"] = collaborator_dp_enabled result = auth_client.get( "/reports/contract-subtotal-aggregations", query_string=query_string, ) result_data = json.loads(result.data.decode()) assert result.status_code == status.OK assert "total_count" in result_data assert "currency_agnostic_total_amount" in result_data assert result_data["total_count"] == expected_count assert result_data["currency_agnostic_total_amount"] == expected_amount @pytest.mark.parametrize( "query_string", [ # Missing report_run_id parameter ({}), # Invalid report_run_id (non-numeric string) ({"report_run_id": "not_a_number"}), # Invalid collaborator_dp_enabled (invalid boolean string) ({"report_run_id": 1, "collaborator_dp_enabled": "maybe"}), ], ) def test_get_report_contract_subtotal_aggregations_failure(auth_client, query_string): """Test error cases for get report contract subtotal aggregations.""" result = auth_client.get( "/reports/contract-subtotal-aggregations", query_string=query_string, ) assert result.status_code == status.BAD_REQUEST