"""Test LedgerEntryQueue.""" from unittest.mock import patch import httpx from owsclient.test import OwsClientMock from ledger_accounting_run_balance.ledger_entry_queue import LedgerEntryQueue def test_ledger_entry_queue_append(mock_event): """Test appending an entry to the queue.""" queue = LedgerEntryQueue(mock_event) entry = {'id': 1, 'amount': 100} queue.append(entry) assert len(queue._entries) == 1 assert queue._entries[0] == entry @patch('ledger_accounting_run_balance.requests.raise_service_error') @patch('ledger_accounting_run_balance.ledger_entry_queue.app_logger') def test_ledger_entry_queue_flush_entries_success(mock_logger, mock_raise_service_error, ows_client_mock: OwsClientMock, mock_event): """Test successfully flushing entries to the OWS service.""" entry = {'id': 1, 'amount': 100} ows_client_mock.post( 'ows-ledger', '/ledger-accounting-run-balance/{}/bulk'.format(mock_event['target_id']), ).mock(return_value=httpx.Response(201, json={'status': 'success'})) queue = LedgerEntryQueue(mock_event) queue.append(entry) response = queue.flush_entries() assert response == {'status': 'success'} mock_logger.error.assert_not_called() mock_raise_service_error.assert_not_called() @patch('ledger_accounting_run_balance.requests.raise_service_error') @patch('ledger_accounting_run_balance.ledger_entry_queue.app_logger') def test_ledger_entry_queue_flush_entries_error(mock_logger, mock_raise_service_error, ows_client_mock: OwsClientMock, mock_event): """Test flushing entries to the OWS service with an error response.""" entry = {'id': 1, 'amount': 100} ows_client_mock.post( 'ows-ledger', '/ledger-accounting-run-balance/{}/bulk'.format(mock_event['target_id']), ).mock(return_value=httpx.Response(400, text='error')) queue = LedgerEntryQueue(mock_event) queue.append(entry) response = queue.flush_entries() assert response is None assert mock_logger.error.call_count == 2 mock_raise_service_error.assert_called_once_with( f'ERROR in POST /ledger-accounting-run-balance/{mock_event["target_id"]}/bulk', 'ows-ledger' )