"""Test ows-ledger requests.""" from unittest.mock import patch import httpx from owsclient.test import OwsClientMock from payoneer_payments_payout.ows_ledger import ( debit_ledger, post_flowthrough_sub_ledger, ) @patch('payoneer_payments_payout.ows_ledger.raise_service_error') def test_debit_ledger_success( mock_raise_service_error, mock_debit_ledger, ows_client_mock: OwsClientMock ): """Test successfully posted payments to payoneer.""" post_body = mock_debit_ledger mock_response = {'result': 'Payments Created'} request_url = '/ledger/bulk' ows_client_mock.post('ows-ledger', request_url, json=post_body).mock( return_value=httpx.Response( 201, json=mock_response ) ) res = debit_ledger(post_body) assert res == mock_response mock_raise_service_error.assert_not_called() @patch('payoneer_payments_payout.ows_ledger.app_logger') @patch('payoneer_payments_payout.ows_ledger.raise_service_error') def test_debit_ledger_bad_request_failure( mock_raise_service_error, mock_app_logger, mock_debit_ledger, mock_debit_ledger_bad_response, ows_client_mock: OwsClientMock ): """Test failure posting payments to payoneer.""" post_body = mock_debit_ledger request_url = '/ledger/bulk' ows_client_mock.post('ows-ledger', request_url, json=post_body).mock( return_value=httpx.Response( 400, json=mock_debit_ledger_bad_response ) ) debit_ledger(post_body) mock_raise_service_error.assert_called_once_with( 'ERROR in POST /ledger/bulk', 'ows-ledger' ) @patch('payoneer_payments_payout.ows_ledger.raise_service_error') def test_post_flowthrough_sub_ledger_success( mock_raise_service_error, mock_debit_ledger, ows_client_mock: OwsClientMock ): """Test successfully posted entries to flowthrough sub-ledger.""" post_body = mock_debit_ledger mock_response = {'result': 'Entries Created'} request_url = '/ledger-contract-flowthrough/bulk' ows_client_mock.post('ows-ledger', request_url, json=post_body).mock( return_value=httpx.Response( 201, json=mock_response ) ) res = post_flowthrough_sub_ledger(post_body) assert res == mock_response mock_raise_service_error.assert_not_called() @patch('payoneer_payments_payout.ows_ledger.app_logger') @patch('payoneer_payments_payout.ows_ledger.raise_service_error') def test_post_flowthrough_sub_ledger_failure( mock_raise_service_error, mock_app_logger, mock_debit_ledger, mock_debit_ledger_bad_response, ows_client_mock: OwsClientMock ): """Test failure posting entries to flowthrough sub-ledger.""" post_body = mock_debit_ledger request_url = '/ledger-contract-flowthrough/bulk' ows_client_mock.post('ows-ledger', request_url, json=post_body).mock( return_value=httpx.Response( 400, json=mock_debit_ledger_bad_response ) ) post_flowthrough_sub_ledger(post_body) mock_raise_service_error.assert_called_once_with( 'ERROR in POST /ledger-contract-flowthrough/bulk', 'ows-ledger' )