"""Unit tests for ows-ledger requests.""" from unittest.mock import patch import httpx import simplejson as json from owsclient.test import OwsClientMock from commit_ledger_account_contract.ows_ledger import ( SERVICE, create_ledger_entries, get_ledger_contract_advance_applied, ) @patch('commit_ledger_account_contract.ows_ledger.raise_service_error') def test_create_ledger_entries_success( mock_raise_service_error, mock_bulk_ledger_post_body, ows_client_mock: OwsClientMock, ): """Test successfully bulk creating ledger_account_contract entries.""" mock_response = {'result': 'OK'} json_post_body = json.loads(json.dumps(mock_bulk_ledger_post_body, allow_nan=False)) ows_client_mock.post( SERVICE, '/ledger/bulk', json=json_post_body, ).mock( return_value=httpx.Response(201, json=mock_response), ) res = create_ledger_entries(mock_bulk_ledger_post_body) assert res == mock_response mock_raise_service_error.assert_not_called() @patch('commit_ledger_account_contract.ows_ledger.raise_service_error') def test_create_ledger_entries_error( mock_raise_service_error, mock_bulk_ledger_post_body, ows_client_mock: OwsClientMock, ): """Test error handling when bulk creating ledger_account_contract entries.""" json_post_body = json.loads(json.dumps(mock_bulk_ledger_post_body, allow_nan=False)) ows_client_mock.post( SERVICE, '/ledger/bulk', json=json_post_body, ).mock( return_value=httpx.Response( 400, json={'message': 'mock error'}, ) ) create_ledger_entries(mock_bulk_ledger_post_body) mock_raise_service_error.assert_called_once_with( 'ERROR in POST /ledger/bulk', SERVICE ) @patch('commit_ledger_account_contract.ows_ledger.raise_service_error') def test_get_ledger_contract_advance_applied_success( mock_raise_service_error, mock_ledger_contract_advance_applied, ows_client_mock: OwsClientMock, ): """Test successfully getting ledger_contract_advance_applied by contract_advance.""" entry_type = 'debit' worksheet_id = mock_ledger_contract_advance_applied[ 'worksheet_payment_contract_advance_id' ] path = f'/ledger-contract-advance-applied/worksheet/{worksheet_id}/{entry_type}' ows_client_mock.get( SERVICE, path, ).mock(return_value=httpx.Response(200, json=mock_ledger_contract_advance_applied)) res = get_ledger_contract_advance_applied(entry_type, worksheet_id) assert res == mock_ledger_contract_advance_applied mock_raise_service_error.assert_not_called() @patch('commit_ledger_account_contract.ows_ledger.raise_service_error') def test_get_ledger_contract_advance_applied_error( mock_raise_service_error, ows_client_mock: OwsClientMock, ): """Test failure getting ledger_contract_advance_applied by contract_advance.""" entry_type = 'credit' worksheet_id = 1 path = f'/ledger-contract-advance-applied/worksheet/{worksheet_id}/{entry_type}' ows_client_mock.get( SERVICE, path, ).mock(return_value=httpx.Response(404, json={'message': 'nope'})) get_ledger_contract_advance_applied(entry_type, worksheet_id) mock_raise_service_error.assert_called_once_with(f'ERROR in GET {path}', SERVICE)