"""Test ows-payee requests.""" from http import HTTPStatus import httpx from owsclient.test import OwsClientMock import pytest from src.connectors import ows_payee from src.connectors.exceptions import OwsPayeeException from src.models.payee import Payee, PayeeEntityType from tests.unit.factories import KycNotificationCreateResponseFactory @pytest.mark.parametrize('expected_status', (HTTPStatus.OK, HTTPStatus.BAD_REQUEST)) def test_create_kyc_notification( expected_status: HTTPStatus, ows_client_mock: OwsClientMock ) -> None: """Test create_kyc_notification.""" data_obj = KycNotificationCreateResponseFactory.build() payee = Payee( payee_type=PayeeEntityType.account_payee, payee_id=str(data_obj.account_payee_id), ) data_dict = { k: v for k, v in data_obj.model_dump(mode='json').items() if v is not None } request_fields = ( 'file_upload_link', 'requirement_id', 'requirement_type_id', 'sub_requirement_id', 'possible_sub_requirement_types', 'sub_requirement_status_id', 'entity_reference_id', 'entity_reference_type_id', ) request_data = {key: data_dict[key] for key in request_fields if key in data_dict} path = f'/{payee.url_basename}/{payee.payee_id}/kyc-notification' ows_client_mock.post('ows-payee', path, json=request_data).mock( return_value=httpx.Response(expected_status, json=data_dict) ) if expected_status == HTTPStatus.OK: result = ows_payee.create_kyc_notification(payee, **request_data) assert result == data_obj else: with pytest.raises(OwsPayeeException): ows_payee.create_kyc_notification(payee, **request_data) @pytest.mark.parametrize( 'expected_status', (HTTPStatus.NO_CONTENT, HTTPStatus.BAD_REQUEST) ) def test_delete_kyc_notifications( expected_status: HTTPStatus, ows_client_mock: OwsClientMock ) -> None: """Test delete_kyc_notifications.""" payee = Payee(payee_type=PayeeEntityType.account_payee, payee_id='132') path = f'/{payee.url_basename}/{payee.payee_id}/kyc-notification' ows_client_mock.delete('ows-payee', path).mock( return_value=httpx.Response(expected_status) ) if expected_status == HTTPStatus.NO_CONTENT: ows_payee.delete_kyc_notifications(payee) else: with pytest.raises(OwsPayeeException): ows_payee.delete_kyc_notifications(payee) def test_get_payee_details( ows_client_mock: OwsClientMock, ) -> None: """Test get_payee_details method success.""" payoneer_client_reference_id = '00000000-0000-4000-8000-000000000000' payee_id = 123 ows_client_mock.post( 'ows-payee', '/payee/dataloader', json={'payoneer_client_reference_ids': [payoneer_client_reference_id]}, ).mock( return_value=httpx.Response( HTTPStatus.OK, json={'payees': [{'data': {'payee_id': payee_id}}]}, ) ) result = ows_payee.get_payee(payoneer_client_reference_id) assert result.payee_id == payee_id