"""Test ows-royalties requests.""" from datetime import datetime from typing import Any import httpx import pytest from owsclient.test import OwsClientMock from sync_contract_sap.error_handling import OwsServiceException from sync_contract_sap.ows_royalties import ( SERVICE, get_contract_by_id, get_sap_formatted_contract_by_id, update_contract_sap_created_at, ) def test_get_sap_formatted_contract_by_id( mock_sap_formatted_contract: dict[str, Any], ows_client_mock: OwsClientMock, ) -> None: """Test get_sap_formatted_contract_by_id. success case """ contract_id = 1 request_url = f'/contract/{contract_id}/sap' ows_client_mock.get(SERVICE, request_url).mock( return_value=httpx.Response(200, json=mock_sap_formatted_contract) ) res = get_sap_formatted_contract_by_id(contract_id) assert res == mock_sap_formatted_contract def test_get_sap_formatted_contract_by_id_failure( ows_client_mock: OwsClientMock, ) -> None: """Test get_sap_formatted_contract_by_id raises on non-200 response.""" contract_id = 1 request_url = f'/contract/{contract_id}/sap' ows_client_mock.get(SERVICE, request_url).mock( return_value=httpx.Response(400, json='error') ) with pytest.raises( OwsServiceException, match=f'ERROR in GET /contract/{contract_id}/sap' ): get_sap_formatted_contract_by_id(contract_id) def test_get_contract_by_id( mock_contract: dict[str, Any], ows_client_mock: OwsClientMock, ) -> None: """Test get_contract_by_id. success case """ contract_id = 1 request_url = f'/contract/{contract_id}' ows_client_mock.get(SERVICE, request_url).mock( return_value=httpx.Response(200, json=mock_contract) ) res = get_contract_by_id(contract_id) assert res == mock_contract def test_get_contract_by_id_failure(ows_client_mock: OwsClientMock) -> None: """Test get_contract_by_id raises on non-200 response.""" contract_id = 1 request_url = f'/contract/{contract_id}' ows_client_mock.get(SERVICE, request_url).mock( return_value=httpx.Response(400, json='error') ) with pytest.raises( OwsServiceException, match=f'ERROR in GET /contract/{contract_id}' ): get_contract_by_id(contract_id) def test_update_contract_sap_created_at( mock_contract: dict[str, Any], ows_client_mock: OwsClientMock, ) -> None: """Test update_contract_sap_created_at. success case """ contract_id = 11 request_url = f'/contract/{contract_id}' ows_client_mock.put(SERVICE, request_url).mock( return_value=httpx.Response(200, json=mock_contract) ) res = update_contract_sap_created_at( contract_id, datetime.now().strftime('%Y-%m-%dT%H:%M:%S.%f%z') ) assert res == mock_contract def test_update_contract_sap_created_at_failure( ows_client_mock: OwsClientMock, ) -> None: """Test update_contract_sap_created_at raises on non-200 response.""" contract_id = 11 request_url = f'/contract/{contract_id}' ows_client_mock.put(SERVICE, request_url).mock( return_value=httpx.Response(400, json='error') ) with pytest.raises( OwsServiceException, match=f'ERROR in PUT /contract/{contract_id}' ): update_contract_sap_created_at( contract_id, datetime.now().strftime('%Y-%m-%dT%H:%M:%S.%f%z') )