"""Unit tests for ows-payment requests.""" from unittest.mock import patch import httpx import pytest from owsclient.test import OwsClientMock from commit_ledger_account_contract.constants.constants import ( LEDGER_EVENT_TYPES, PAYMENT_GROUP_TYPES, ) from commit_ledger_account_contract.ows_payment import ( SERVICE, get_payment_group_payment_data, get_worksheet_payment_custom_data, ) @patch('commit_ledger_account_contract.ows_payment.raise_service_error') def test_get_payment_group_payment_data_debit_success( mock_raise_service_error, mock_payment_group_payment_data, ows_client_mock: OwsClientMock, ): """Test successfully getting payment group payment debit data.""" ledger_event_type = LEDGER_EVENT_TYPES.DEBIT payment_group_type = PAYMENT_GROUP_TYPES.PAYMENT target_id = 1 path = f'/payment-group-payment-batch/{target_id}/{payment_group_type}/debit' ows_client_mock.get( SERVICE, path, ).mock( return_value=httpx.Response( 200, json=mock_payment_group_payment_data, ) ) res = get_payment_group_payment_data( ledger_event_type, payment_group_type, target_id ) assert res == mock_payment_group_payment_data mock_raise_service_error.assert_not_called() @patch('commit_ledger_account_contract.ows_payment.raise_service_error') def test_get_payment_group_payment_data_credit_success( mock_raise_service_error, mock_payment_group_payment_data, ows_client_mock: OwsClientMock, ): """Test successfully getting payment group payment credit data.""" ledger_event_type = LEDGER_EVENT_TYPES.CREDIT payment_group_type = PAYMENT_GROUP_TYPES.PAYMENT target_id = 1 path = f'/payment-group-payment-account/{target_id}/{payment_group_type}/credit' ows_client_mock.get( SERVICE, path, ).mock( return_value=httpx.Response( 200, json=mock_payment_group_payment_data, ) ) res = get_payment_group_payment_data( ledger_event_type, payment_group_type, target_id ) assert res == mock_payment_group_payment_data mock_raise_service_error.assert_not_called() def test_get_payment_group_payment_data_unknown_ledger_event_type_error(): """Test failure when called with an unknown ledger event type.""" ledger_event_type = 'UNKNOWN' payment_group_type = PAYMENT_GROUP_TYPES.PAYMENT target_id = 1 with pytest.raises(Exception) as e: get_payment_group_payment_data(ledger_event_type, payment_group_type, target_id) assert str(e) == 'Unknown ledger_event_type: UNKNOWN' @patch('commit_ledger_account_contract.ows_payment.raise_service_error') def test_get_payment_group_payment_data_service_error( mock_raise_service_error, ows_client_mock: OwsClientMock, ): """Test service failure when getting payment group payment data.""" ledger_event_type = LEDGER_EVENT_TYPES.CREDIT payment_group_type = PAYMENT_GROUP_TYPES.PAYMENT target_id = 1 path = f'/payment-group-payment-account/{target_id}/{payment_group_type}/credit' ows_client_mock.get( SERVICE, path, ).mock( return_value=httpx.Response( 404, json={'message': 'not found'}, ) ) get_payment_group_payment_data(ledger_event_type, payment_group_type, target_id) mock_raise_service_error.assert_called_once_with(f'ERROR in GET {path}', SERVICE) @patch('commit_ledger_account_contract.ows_payment.raise_service_error') def test_get_worksheet_payment_custom_data_success( mock_raise_service_error, ows_client_mock: OwsClientMock, ): """Test successfully getting worksheet payment custom data.""" worksheet_payment_custom_id = 1 path = f'/payment/custom/{worksheet_payment_custom_id}' test_data = { 'account_id': 1, 'contract_id': 2, 'currency_code': '', 'amount': '100.00', 'amount_after_withholding_and_vat': '100.00', 'vat_amount': '10.00', 'withholding_tax_amount': '-5.00', 'activity_statement_period_id': 3, 'statement_period_id': 4, 'payment_name': '', 'worksheet_payment_custom_id': worksheet_payment_custom_id, } ows_client_mock.get( SERVICE, path, ).mock( return_value=httpx.Response( 200, json=test_data, ) ) res = get_worksheet_payment_custom_data(worksheet_payment_custom_id) assert res == test_data mock_raise_service_error.assert_not_called() @patch('commit_ledger_account_contract.ows_payment.raise_service_error') def test_get_worksheet_payment_custom_data_service_error( mock_raise_service_error, ows_client_mock: OwsClientMock, ): """Test service failure when getting worksheet payment custom data.""" worksheet_payment_custom_id = 1 path = f'/payment/custom/{worksheet_payment_custom_id}' ows_client_mock.get( SERVICE, path, ).mock( return_value=httpx.Response( 404, json={'message': 'not found'}, ) ) get_worksheet_payment_custom_data(worksheet_payment_custom_id) mock_raise_service_error.assert_called_once_with(f'ERROR in GET {path}', SERVICE)