"""Functional tests for submit-to-payoneer endpoint.""" import http import json from unittest.mock import patch from collaborator.constants import error from collaborator.constants.abacus_statement_period import PAYONEER_PAYMENT_DESCRIPTION from collaborator.constants.features import ( ABACUS_COLLABORATORS_PAYONEER_API_INTEGRATION, ) from tests.testutils import db, mock_auth @db.test_schema_default_seed def test_submit_dp_payments_success(auth_client, mock_features, mock_account, mocker): """Test successfully submitting approved DP payments for a statement period.""" abacus_statement_period_id = 3 mock_auth(mocker, mock_account.id) mock_features({ABACUS_COLLABORATORS_PAYONEER_API_INTEGRATION: True}) with patch( "collaborator.models.ows.ows_payee.create_mass_payouts" ) as mock_create_mass_payouts: mock_create_mass_payouts.return_value = {} result = auth_client.post( f"/abacus-statement-period/{abacus_statement_period_id}/dp-payments/submit-to-payoneer" ) assert result.status_code == http.HTTPStatus.OK result_data = json.loads(result.data.decode()) assert result_data["submitted_count"] == 1 mock_create_mass_payouts.assert_called_once_with( 100000, [ { "client_reference_id": "split:3:1", "payee_id": "d4e5f6a7-b8c9-4def-b012-345678901234", "amount": 1000.0, "currency": "USD", "description": PAYONEER_PAYMENT_DESCRIPTION, } ], ) @db.test_schema_default_seed def test_submit_dp_payments_no_approved_payments( auth_client, mock_features, mock_account, mocker ): """Test submit returns 422 when no payments are approved for the period.""" abacus_statement_period_id = 1 mock_auth(mocker, mock_account.id) mock_features({ABACUS_COLLABORATORS_PAYONEER_API_INTEGRATION: True}) result = auth_client.post( f"/abacus-statement-period/{abacus_statement_period_id}/dp-payments/submit-to-payoneer" ) assert result.status_code == http.HTTPStatus.UNPROCESSABLE_ENTITY result_data = json.loads(result.data.decode()) assert result_data["code"] == error.ERROR_CODE_DP_PAYMENT_NOT_APPROVED @db.test_schema_default_seed def test_submit_dp_payments_feature_disabled(auth_client, mock_account, mocker): """Test submit returns 403 when feature flag is disabled.""" abacus_statement_period_id = 1 mock_auth(mocker, mock_account.id) result = auth_client.post( f"/abacus-statement-period/{abacus_statement_period_id}/dp-payments/submit-to-payoneer" ) 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