"""Tests for OwsService client.""" from unittest.mock import patch import httpx from owsclient.test import OwsClientMock import pytest from src.connectors.ows_service import OwsService from src.utils.constants import DEFAULT_HEADERS from src.utils.error_handling import OwsServiceException from tests.conftest import CONTRACT_ID from tests.unit.connectors.test_ows_payee import ACCOUNT_PAYEE_ID FAKE_SERVICE = 'fake-service' # Remove the m2m token manager OwsService._ows_client.m2m_token_manager = None # noqa def test_get(ows_client_mock: OwsClientMock, tax_details_fixture): """Testing GET requests.""" path = f'/account-payee/{ACCOUNT_PAYEE_ID}/tax-details' OwsService._service = FAKE_SERVICE ows_client_mock.get(FAKE_SERVICE, path=path).mock( return_value=httpx.Response(status_code=200, json=tax_details_fixture) ) res = OwsService.get(path) assert res == tax_details_fixture def test_get_with_params(ows_client_mock: OwsClientMock, tax_details_fixture): """Testing GET requests with query parameters.""" path = f'/account-payee/{ACCOUNT_PAYEE_ID}/tax-details' params = {'contract_id': CONTRACT_ID} OwsService._service = FAKE_SERVICE ows_client_mock.get(FAKE_SERVICE, path=path, params=params).mock( return_value=httpx.Response(status_code=200, json=tax_details_fixture) ) res = OwsService.get(path, params=params) assert res == tax_details_fixture def test_put(ows_client_mock: OwsClientMock): """Testing PUT requests.""" path = f'/statement-attachment/{1}' data = { 'file_location': 's3://filename.csv', 'report_custom_status': 'testing', } response_json = {'success': True} OwsService._service = FAKE_SERVICE ows_client_mock.put(FAKE_SERVICE, path=path, json=data).mock( return_value=httpx.Response(status_code=200, json=response_json) ) res = OwsService.put(path, data) assert res == response_json def test_request_error(ows_client_mock: OwsClientMock): """Test a request that fails.""" path = f'/account-payee/{ACCOUNT_PAYEE_ID}/tax-details' text = 'Forbidden: Unauthorized access' message = f'{FAKE_SERVICE} error: 401 response from get {path}: {text}' OwsService._service = FAKE_SERVICE ows_client_mock.get(FAKE_SERVICE, path=path).mock( return_value=httpx.Response(status_code=401, text=text) ) with pytest.raises(OwsServiceException) as excinfo: OwsService.get(path) assert excinfo.value.message == message @patch('src.connectors.ows_service.OWS_CLIENT_TOKEN', new=None) def test_get_request_headers_without_token(): """Test getting request headers without a token set.""" result = OwsService._get_request_headers() assert result == DEFAULT_HEADERS @patch('src.connectors.ows_service.OWS_CLIENT_TOKEN', new='abcdef') def test_get_request_headers_with_token(): """Test getting request headers with a token set.""" expected = DEFAULT_HEADERS | {'authorization': 'Bearer abcdef'} result = OwsService._get_request_headers() assert result == expected