"""Unit tests for ows-moneyhub requests.""" from unittest.mock import MagicMock, patch import pytest from audience_common.owsclient import OwsClient from audience_common.owsclient.test import OwsClientMock from httpx import Response from owslogger import logger from commit_ledger_account_contract.ows_moneyhub import OwsMoneyhub from commit_ledger_account_contract.requests import OwsServiceException @pytest.fixture def mock_ows_client() -> OwsClient: """Mock ows_client.""" return OwsClient(environment='test', service_name='ows-test') @pytest.fixture def mock_ows_moneyhub(mock_ows_client: OwsClient) -> OwsMoneyhub: """Return an OwsMoneyhub mock client.""" return OwsMoneyhub(ows_client=mock_ows_client) def test__get_request_headers(mock_ows_moneyhub: OwsMoneyhub) -> None: """Test getting headers for OwsMoneyhub requests.""" res = mock_ows_moneyhub._get_request_headers() assert res == { 'Orchard-Profile-Type': 'AbacusProfile', 'Orchard-Roles': 'administrator', } @patch('commit_ledger_account_contract.ows_moneyhub.raise_service_error') def test_get_ledger_vat_summary_by_file_success( mock_raise_service_error: OwsServiceException, mock_ows_moneyhub: OwsMoneyhub, ows_client_mock: OwsClientMock, mock_ledger_vat_summary: list, ) -> None: """Test success getting a list of ledger_vat_summary items by vat_summary_file.""" headers = { 'Orchard-Profile-Type': 'AbacusProfile', 'Orchard-Roles': 'administrator', } vat_summary_file_id = 123 mock_ows_moneyhub._get_request_headers = MagicMock(return_value=headers) mock_response = Response(status_code=200, json=mock_ledger_vat_summary) ows_client_mock.get( headers=headers, path=f'/ledger-vat-summary/vat-summary-file/{vat_summary_file_id}', service_name='ows-moneyhub', ).mock(return_value=mock_response) res = mock_ows_moneyhub.get_ledger_vat_summary_by_file( vat_summary_file_id=vat_summary_file_id ) assert len(res) == len(mock_ledger_vat_summary) mock_ows_moneyhub._get_request_headers.assert_called_once() mock_raise_service_error.assert_not_called() @patch('commit_ledger_account_contract.ows_moneyhub.raise_service_error') @patch('commit_ledger_account_contract.ows_moneyhub.app_logger') def test_get_ledger_vat_summary_by_file_error( mock_logger: logger, mock_raise_service_error: OwsServiceException, mock_ows_moneyhub: OwsMoneyhub, ows_client_mock: OwsClientMock, ) -> None: """Test failure getting list of ledger_vat_summary items.""" headers = { 'Orchard-Profile-Type': 'AbacusProfile', 'Orchard-Roles': 'administrator', } mock_error = {'message': 'no thanks'} service_name = 'ows-moneyhub' vat_summary_file_id = 123 path = f'/ledger-vat-summary/vat-summary-file/{vat_summary_file_id}' mock_ows_moneyhub._get_request_headers = MagicMock(return_value=headers) mock_response = Response(status_code=404, json=mock_error) ows_client_mock.get(headers=headers, path=path, service_name=service_name).mock( return_value=mock_response ) res = mock_ows_moneyhub.get_ledger_vat_summary_by_file( vat_summary_file_id=vat_summary_file_id ) assert res == mock_error mock_logger.error.assert_called_once_with(f'moneyhub service error: {mock_error}') mock_raise_service_error.assert_called_once_with( f'ERROR IN GET {path}', service_name )