"""Test ows-payee requests.""" from http import HTTPStatus import httpx from owsclient.test import OwsClientMock import pytest from src.exceptions import OwsPayeeException from src.models import MovePayoneerProgramResponse, PayoneerStatusResponse from src.ows_payee import ( get_payoneer_payee_status, move_payoneer_program, release_payee_payoneer_program, reset_banking_states, ) def test_get_payoneer_payee_status_success(ows_client_mock: OwsClientMock) -> None: """Test successfully getting Payoneer status.""" account_payee_id = 1 program_id = 2 mock_status_response = { 'result': { 'account_id': '3676945', 'status': {'type': 1, 'description': 'Active'}, 'registration_date': '2021-05-05', 'payout_method': {'type': 'BANK', 'currency': 'USD'}, } } ows_client_mock.get( 'ows-payee', f'/account-payee/{account_payee_id}/program/{program_id}/payoneer-status/', ).mock(return_value=httpx.Response(HTTPStatus.OK, json=mock_status_response)) res = get_payoneer_payee_status(account_payee_id, program_id) assert res == PayoneerStatusResponse.model_validate(mock_status_response).result def test_get_payoneer_payee_status_failure(ows_client_mock: OwsClientMock) -> None: """Test failure getting Payoneer.""" account_payee_id = 1 program_id = 2 ows_client_mock.get( 'ows-payee', f'/account-payee/{account_payee_id}/program/{program_id}/payoneer-status/', ).mock(return_value=httpx.Response(HTTPStatus.BAD_REQUEST)) with pytest.raises( OwsPayeeException, match=f'ERROR in GET /account-payee/{account_payee_id}' f'/program/{program_id}/payoneer-status/', ): get_payoneer_payee_status(account_payee_id, program_id) def test_move_payoneer_program_success(ows_client_mock: OwsClientMock) -> None: """Test move Payoneer program success.""" account_payee_id = 1 existing_payoneer_program_id = 2 new_payoneer_program_id = 3 mock_move_program_response = { 'result': { 'payee_id': '1', 'adopted_to_partner_id': 3, 'adopted_payee_id': '1', 'date_adopted': '2021-03-24T14:45:43-04:00', } } ows_client_mock.post( 'ows-payee', f'/account-payee/{account_payee_id}/move-payoneer-program/', json={'existing_payoneer_program_id': 2, 'new_payoneer_program_id': 3}, ).mock(return_value=httpx.Response(HTTPStatus.OK, json=mock_move_program_response)) res = move_payoneer_program( account_payee_id, existing_payoneer_program_id, new_payoneer_program_id ) assert ( res == MovePayoneerProgramResponse.model_validate(mock_move_program_response).result ) def test_move_payoneer_program_failure(ows_client_mock: OwsClientMock) -> None: """Test move Payoneer program failure.""" account_payee_id = 1 existing_payoneer_program_id = 2 new_payoneer_program_id = 3 ows_client_mock.post( 'ows-payee', f'/account-payee/{account_payee_id}/move-payoneer-program/', json={'existing_payoneer_program_id': 2, 'new_payoneer_program_id': 3}, ).mock(return_value=httpx.Response(HTTPStatus.BAD_REQUEST)) with pytest.raises( OwsPayeeException, match='Failed to move payee payoneer program:', ): move_payoneer_program( account_payee_id, existing_payoneer_program_id, new_payoneer_program_id ) def test_release_payee_payoneer_program_success( ows_client_mock: OwsClientMock, ) -> None: """Test release payee from specific payoneer program success.""" account_payee_id = 105 payoneer_program_id = 77 ows_client_mock.delete( 'ows-payee', f'/account-payee/{account_payee_id}/payoneer-account', json={'payoneer_program_id': payoneer_program_id}, ).mock(return_value=httpx.Response(HTTPStatus.OK)) release_payee_payoneer_program(account_payee_id, payoneer_program_id) def test_release_payee_payoneer_program_failure(ows_client_mock: OwsClientMock) -> None: """Test release payee from payoneer program failure.""" account_payee_id = 1 payoneer_program_id = 77 ows_client_mock.delete( 'ows-payee', f'/account-payee/{account_payee_id}/payoneer-account', ).mock(return_value=httpx.Response(HTTPStatus.BAD_REQUEST, json={'error': 'test'})) with pytest.raises( OwsPayeeException, match='Failed to release payee from payoneer program: {"error": "test"}', ): release_payee_payoneer_program(account_payee_id, payoneer_program_id) def test_release_payee_payoneer_program_failure_with_program_id( ows_client_mock: OwsClientMock, ) -> None: """Test release payee from specific payoneer program failure.""" account_payee_id = 1 payoneer_program_id = 77 ows_client_mock.delete( 'ows-payee', f'/account-payee/{account_payee_id}/payoneer-account', json={'payoneer_program_id': payoneer_program_id}, ).mock(return_value=httpx.Response(HTTPStatus.BAD_REQUEST, json={'error': 'test'})) with pytest.raises( OwsPayeeException, match='Failed to release payee from payoneer program: {"error": "test"}', ): release_payee_payoneer_program(account_payee_id, payoneer_program_id) def test_reset_banking_states_success(ows_client_mock: OwsClientMock) -> None: """Successfully reset banking states (HTTP 200).""" account_payee_id = 123 path = f'/account-payee/{account_payee_id}/reset-banking-states/' ows_client_mock.post('ows-payee', path).mock( return_value=httpx.Response(HTTPStatus.OK) ) reset_banking_states(account_payee_id) def test_reset_banking_states_failure(ows_client_mock: OwsClientMock) -> None: """Reset banking states failure returns error and raises OwsPayeeException.""" account_payee_id = 456 path = f'/account-payee/{account_payee_id}/reset-banking-states/' ows_client_mock.post('ows-payee', path).mock( return_value=httpx.Response(HTTPStatus.BAD_REQUEST, json={'error': 'test'}) ) with pytest.raises( OwsPayeeException, match='Failed to reset banking states: {"error": "test"}', ): reset_banking_states(account_payee_id)