"""Tests for ows_abacus_account.""" import httpx from owsclient.test import OwsClientMock from unittest.mock import patch from json_contract_file_import.ows_abacus_account import create_account from json_contract_file_import.ows_abacus_account import get_account from json_contract_file_import.ows_abacus_account import update_account from json_contract_file_import.ows_abacus_account import update_account_payment_term def test_create_account( ows_client_mock: OwsClientMock, ) -> None: """Test successful create account.""" mock_response = { 'account_id': 1001, 'account_name': 'An Account, not a Vendor', 'created_by': '', 'sap_created_at': None, 'account_payee_id': 3, 'account_payment_term_id': 3 } account_data = { 'account_id': 1001, 'account_name': 'An Account, not a Vendor', 'currency_code': 'USD', 'creation_source': 'json-contract-file-import' } ows_client_mock.post( 'ows-abacus-account', '/account', json=account_data, ).mock( return_value=httpx.Response( 201, json=mock_response, ) ) response = create_account(account_data) assert response.status_code == 201 assert response.json() == mock_response @patch('json_contract_file_import.ows_abacus_account.logger') def test_create_account_not_status_201( mock_logger, ows_client_mock: OwsClientMock, ) -> None: """Test failed create account with status code not 201.""" mock_response = { 'error': 'Failed to create account.', } account_data = { 'account_id': 1001, 'account_name': 'An Account, not a Vendor', 'currency_code': 'USD', 'creation_source': 'json-contract-file-import' } ows_client_mock.post( 'ows-abacus-account', '/account', json=account_data, ).mock( return_value=httpx.Response( 500, json=mock_response, ) ) response = create_account(account_data) assert response.status_code == 500 assert response.json() == mock_response mock_logger.error.assert_called_once_with( 'ows-abacus-account error: {"error": "Failed to create account."}') def test_update_account( ows_client_mock: OwsClientMock, ) -> None: """Test successful update account.""" mock_response = { 'account_id': 1001, 'account_name': 'An Account, not a Vendor', 'created_by': '', 'sap_created_at': None, 'account_payee_id': 3, 'account_payment_term_id': 3 } account_data = { 'account_name': 'An Account, not a Vendor', } ows_client_mock.put( 'ows-abacus-account', '/account/1001', json=account_data, ).mock( return_value=httpx.Response( 200, json=mock_response, ) ) response = update_account(1001, account_data) assert response.status_code == 200 assert response.json() == mock_response @patch('json_contract_file_import.ows_abacus_account.logger') def test_update_account_failed( mock_logger, ows_client_mock: OwsClientMock, ) -> None: """Test failed account update.""" mock_response = { 'error': 'Failed to update account.', } account_data = { 'account_name': 'An Account, not a Vendor', } ows_client_mock.put( 'ows-abacus-account', '/account/1001', json=account_data, ).mock( return_value=httpx.Response( 500, json=mock_response, ) ) response = update_account(1001, account_data) assert response.status_code == 500 assert response.json() == mock_response mock_logger.error.assert_called_once_with( 'ows-abacus-account error: {"error": "Failed to update account."}') def test_get_account( ows_client_mock: OwsClientMock, ) -> None: """Test successful get account.""" mock_response = { 'account_id': 1001, 'account_name': 'An Account, not a Vendor', 'created_by': '', 'sap_created_at': None, 'account_payee_id': 3, 'account_payment_term_id': 3 } ows_client_mock.get( 'ows-abacus-account', '/account/1001', ).mock( return_value=httpx.Response( 200, json=mock_response, ) ) response = get_account(1001) assert response.status_code == 200 assert response.json() == mock_response @patch('json_contract_file_import.ows_abacus_account.logger') def test_get_account_failed( mock_logger, ows_client_mock: OwsClientMock, ) -> None: """Test failed get account.""" mock_response = { 'error': 'Failed to get account.', } ows_client_mock.get( 'ows-abacus-account', '/account/1001' ).mock( return_value=httpx.Response( 500, json=mock_response, ) ) response = get_account(1001) assert response.status_code == 500 assert response.json() == mock_response mock_logger.error.assert_called_once_with( 'ows-abacus-account error: {"error": "Failed to get account."}') def test_update_account_payment_term_success( ows_client_mock: OwsClientMock, ) -> None: """Test successful updating payment term.""" account_payment_term_id = 8 mock_response = { 'account_id': 39, 'currency_code': 'EUR', 'payment_entity_id': 1, 'payment_minimum': '250.00', 'payment_schedule': '60_days_after_month_end', 'agreement_type_id': None, 'account_payment_term_id': account_payment_term_id } payment_term_data = { 'payment_minimum': 250, 'payment_schedule': '60_days_after_month_end', } ows_client_mock.put( 'ows-abacus-account', f'/account-payment-term/{account_payment_term_id}', json=payment_term_data, ).mock( return_value=httpx.Response( 200, json=mock_response, ) ) response = update_account_payment_term( account_payment_term_id, payment_term_data, ) assert response.status_code == 200 assert response.json() == mock_response @patch('json_contract_file_import.ows_abacus_account.logger') def test_update_account_payment_term_not_status_200( mock_logger, ows_client_mock: OwsClientMock, ) -> None: """Test failed updating payment term with status not 200.""" account_payment_term_id = 12 mock_response = { 'error': 'Failed to update payment term.', } payment_term_data = { 'payment_minimum': 250, 'payment_schedule': '60_days_after_month_end' } ows_client_mock.put( 'ows-abacus-account', f'/account-payment-term/{account_payment_term_id}', json=payment_term_data, ).mock( return_value=httpx.Response( 500, json=mock_response, ) ) response = update_account_payment_term( account_payment_term_id, payment_term_data, ) assert response.status_code == 500 assert response.json() == mock_response mock_logger.error.assert_called_once_with( 'ows-abacus-account error: {"error": "Failed to update payment term."}')