"""Test SAPContractProcessor.""" from datetime import datetime from typing import Any from unittest.mock import MagicMock, patch from sync_contract_sap import constants from sync_contract_sap.sap_contract_processor import SAPContractProcessor @patch('sync_contract_sap.sap_contract_processor.get_sap_basic_auth') @patch( 'sync_contract_sap.sap_contract_processor.SAPContractProcessor' '._get_contract_for_sap' ) @patch( 'sync_contract_sap.sap_contract_processor.SAPContractProcessor' '._upsert_contract_to_sap' ) @patch('sync_contract_sap.sap_contract_processor.update_contract_sap_created_at') @patch('sync_contract_sap.sap_contract_processor.datetime') def test_processor_process( mock_datetime: Any, mock_update_contract_sap_created_at: Any, mock_upsert_contract: Any, mock_get_contract_for_sap: Any, mock_get_basic_auth: Any, mock_sap_formatted_contract: dict[str, Any], ) -> None: """Test SAPContractProcessor.process.""" contract_id = 1 mock_sap_contract_body = { 'BusGroup': constants.SAP_BUS_GROUP, 'To_Contract': [mock_sap_formatted_contract], } mock_get_contract_for_sap.return_value = mock_sap_contract_body mock_datetime.now.return_value = datetime(2022, 2, 1, 10, 9, 8) processor = SAPContractProcessor() processor.process(contract_id) mock_get_basic_auth.assert_called_once() mock_get_contract_for_sap.assert_called_once() mock_upsert_contract.assert_called_once_with(mock_sap_contract_body) mock_update_contract_sap_created_at.assert_called_once_with( contract_id, mock_datetime.now.return_value.isoformat() ) @patch('sync_contract_sap.sap_contract_processor.requests.Session') def test_upsert_contract_to_sap( mock_session: Any, mock_sap_formatted_contract: dict[str, Any] ) -> None: """Test SAPContractProcessor._upsert_contract_to_sap.""" mock_body = { 'BusGroup': constants.SAP_BUS_GROUP, 'To_Contract': [mock_sap_formatted_contract], } mock_session.return_value = MagicMock( get=MagicMock( return_value=MagicMock( headers={constants.CSRF_HEADER_KEY: 'csrf-token'}, status_code=200 ) ), post=MagicMock(return_value=MagicMock(status_code=201)), ) session = mock_session() processor = SAPContractProcessor() processor._upsert_contract_to_sap(mock_body) session.get.assert_called_once_with( f'{constants.SAP_URL}{constants.SAP_CONTRACTS_METADATA_ENDPOINT}', headers={constants.CSRF_HEADER_KEY: 'fetch'}, ) session.post.assert_called_once_with( f'{constants.SAP_URL}{constants.SAP_CONTRACTS_POST_ENDPOINT}', headers={constants.CSRF_HEADER_KEY: 'csrf-token'}, json=mock_body, ) @patch('sync_contract_sap.sap_contract_processor.get_sap_formatted_contract_by_id') def test_get_contract_for_sap( mock_get_formatted_account: Any, mock_sap_formatted_account: dict[str, Any] ) -> None: """Test SAPContractProcessor._get_contract_for_sap.""" contract_id = 1 mock_get_formatted_account.return_value = mock_sap_formatted_account processor = SAPContractProcessor() processor._get_contract_for_sap(contract_id) mock_get_formatted_account.assert_called_once_with(contract_id)