"""Functional tests for PATCH /abacus-statement-period//dp-payments endpoint.""" import http import json from collaborator.constants import error from collaborator.constants.features import ABACUS_COLLABORATORS from collaborator.schemas.abacus_statement_period import ( PatchDpPaymentsForAbacusStatementPeriodSchema, ) from collaborator.schemas.dp_payment import DpPaymentAction from tests.testutils import db, mock_auth @db.test_schema_default_seed def test_patch_dp_payments_success(auth_client, mock_features, mock_account, mocker): """Test successfully replacing DP payments for a statement period.""" abacus_statement_period_id = 1 mock_auth(mocker, mock_account.id) mock_features({ABACUS_COLLABORATORS: True}) result = auth_client.patch( f"/abacus-statement-period/{abacus_statement_period_id}/dp-payments", content_type="application/json", data=json.dumps( PatchDpPaymentsForAbacusStatementPeriodSchema( action_name=DpPaymentAction.APPROVE, ).dump() ), ) assert result.status_code == http.HTTPStatus.OK result_data = json.loads(result.data.decode()) assert result_data["total_count"] == 3 assert result_data["payments"][0]["approved_date"] is not None assert result_data["payments"][1]["approved_date"] is not None assert result_data["payments"][0]["approved_by"] is not None assert result_data["payments"][1]["approved_by"] is not None @db.test_schema_default_seed def test_patch_dp_payments_feature_disabled(auth_client, mock_account, mocker): """Test patch returns 403 when feature flag is disabled.""" abacus_statement_period_id = 1 mock_auth(mocker, mock_account.id) result = auth_client.patch( f"/abacus-statement-period/{abacus_statement_period_id}/dp-payments", content_type="application/json", data=json.dumps( PatchDpPaymentsForAbacusStatementPeriodSchema( action_name=DpPaymentAction.APPROVE, ).dump() ), ) assert result.status_code == http.HTTPStatus.FORBIDDEN result_data = json.loads(result.data.decode()) assert result_data["code"] == error.ERROR_CODE_AUTHORIZATION assert result_data["message"] == error.ERROR_MESSAGE_FORBIDDEN_USER