"""Test SAPAccountProcessor.""" 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_account_processor import SAPAccountProcessor @patch('sync_contract_sap.sap_account_processor.get_sap_basic_auth') @patch( 'sync_contract_sap.sap_account_processor.SAPAccountProcessor._get_account_for_sap' ) @patch( 'sync_contract_sap.sap_account_processor.SAPAccountProcessor._upsert_account_to_sap' ) @patch('sync_contract_sap.sap_account_processor.update_account_sap_created_at') @patch('sync_contract_sap.sap_account_processor.datetime') def test_processor_process( mock_datetime: Any, mock_update_account_sap_created_at: Any, mock_upsert_account: Any, mock_get_account_for_sap: Any, mock_get_basic_auth: Any, mock_sap_formatted_account: dict[str, Any], ) -> None: """Test SAPAccountProcessor.process.""" account_id = 11 mock_sap_account_body = { 'BusGroup': constants.SAP_BUS_GROUP, 'To_Clnt_Acct': [mock_sap_formatted_account], } mock_get_account_for_sap.return_value = mock_sap_account_body processor = SAPAccountProcessor() mock_datetime.now.return_value = datetime(2022, 2, 1, 10, 9, 8) processor.process(account_id) mock_get_basic_auth.assert_called_once() mock_get_account_for_sap.assert_called_once_with(account_id) mock_upsert_account.assert_called_once_with(mock_sap_account_body) mock_update_account_sap_created_at.assert_called_once_with( account_id, mock_datetime.now.return_value.isoformat() ) @patch('sync_contract_sap.sap_account_processor.requests.Session') def test_upsert_account_to_sap( mock_session: Any, mock_sap_formatted_account: dict[str, Any] ) -> None: """Test SAPAccountProcessor._upsert_account_to_sap.""" mock_body = { 'BusGroup': constants.SAP_BUS_GROUP, 'To_Clnt_Acct': [mock_sap_formatted_account], } 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 = SAPAccountProcessor() processor._upsert_account_to_sap(mock_body) session.get.assert_called_once_with( f'{constants.SAP_URL}{constants.SAP_ACCOUNTS_METADATA_ENDPOINT}', headers={constants.CSRF_HEADER_KEY: 'fetch'}, ) session.post.assert_called_once_with( f'{constants.SAP_URL}{constants.SAP_ACCOUNTS_POST_ENDPOINT}', headers={constants.CSRF_HEADER_KEY: 'csrf-token'}, json=mock_body, ) @patch('sync_contract_sap.sap_account_processor.get_sap_formatted_account') def test_get_account_for_sap( mock_get_formatted_account: Any, mock_sap_formatted_account: dict[str, Any] ) -> None: """Test SAPAccountProcessor._get_account_for_sap.""" account_id = 11 mock_get_formatted_account.return_value = mock_sap_formatted_account processor = SAPAccountProcessor() processor._get_account_for_sap(account_id) mock_get_formatted_account.assert_called_once_with(account_id)