"""Functional tests for PUT /abacus-statement-period//dp-payments endpoint.""" import http import json from types import SimpleNamespace from unittest.mock import ANY, patch from collaborator.constants import error from collaborator.constants.features import ABACUS_COLLABORATORS from tests.testutils import db, mock_auth @db.test_schema_default_seed @patch("collaborator.logic.abacus_statement_period.AbacusStatementPeriodPersisterSF") def test_put_dp_payments_success( mock_abacus_sp_persister, 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}) mock_balance = SimpleNamespace( abacus_statement_period_id=abacus_statement_period_id, current_statement_period_name="Period", collaborator_id=1, collaborator_name="Collab", balance_after_tax=100.0, currency_code="USD", payoneer_program_id=10000, payoneer_program_name="Program 1", payoneer_client_reference_id="d4e5f6a7-b8c9-4def-bfab-345678901234", account_id=1234, account_name="Account", payee_id=1, agreement_type="Orchard", ) mock_abacus_sp_persister.get_direct_payment_balances.return_value = [mock_balance] result = auth_client.put( f"/abacus-statement-period/{abacus_statement_period_id}/dp-payments" ) assert result.status_code == http.HTTPStatus.OK result_data = json.loads(result.data.decode()) assert result_data == { "currency_agnostic_total_amount": mock_balance.balance_after_tax, "total_count": 1, "payments": [ { "id": ANY, "created_date": ANY, "created_by": ANY, "abacus_statement_period_id": abacus_statement_period_id, "abacus_statement_period_name": mock_balance.current_statement_period_name, "collaborator_id": mock_balance.collaborator_id, "collaborator_name": mock_balance.collaborator_name, "amount": mock_balance.balance_after_tax, "currency": mock_balance.currency_code, "payoneer_program_id": mock_balance.payoneer_program_id, "payoneer_program_name": mock_balance.payoneer_program_name, "payoneer_client_reference_id": mock_balance.payoneer_client_reference_id, "account_id": mock_balance.account_id, "account_name": mock_balance.account_name, "payee_id": mock_balance.payee_id, "collaborator_transaction_id": None, "approved_date": None, "approved_by": None, "updated_date": ANY, "updated_by": None, "agreement_type": "Orchard", "payoneer_payment_id": ANY, "payoneer_payment_status": None, "latest_payoneer_event": None, "latest_payoneer_event_reason": None, } ], } @db.test_schema_default_seed def test_put_dp_payments_feature_disabled(auth_client, mock_account, mocker): """Test PUT returns 403 when feature flag is disabled.""" abacus_statement_period_id = 1 mock_auth(mocker, mock_account.id) result = auth_client.put( f"/abacus-statement-period/{abacus_statement_period_id}/dp-payments" ) 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