"""Tests for ows_abacus_account.""" from unittest.mock import MagicMock from unittest.mock import patch from json_contract_file_import.abacus_state_import import _get_abacus_states_to_import from json_contract_file_import.abacus_state_import import import_abacus_states from json_contract_file_import.entity_import_result import EntityImportResult from tests.unit.utils import assert_import_result @patch('json_contract_file_import.abacus_state_import.ows_abacus_state') @patch('json_contract_file_import.abacus_state_import._get_abacus_states_to_import') def test_import_abacus_states_success(mock_get_states_to_import, mock_ows_abacus_state): """Test successful import of abacus states.""" mock_get_response = MagicMock() mock_get_response.status_code = 200 mock_get_response.json.return_value = [] mock_ows_abacus_state.get_abacus_states.return_value = mock_get_response mock_create_response = MagicMock() mock_create_response.status_code = 201 mock_create_response.text = '{"success": true}' mock_ows_abacus_state.create_abacus_states.return_value = mock_create_response states_to_import = [ { 'action_name': 'tax_eligibility', 'parent_table_id': 1, 'parent_table_name': 'account_payee' }, { 'action_name': 'payment_eligibility', 'parent_table_id': 1, 'parent_table_name': 'account_payee' } ] mock_get_states_to_import.return_value = states_to_import result = import_abacus_states(1) mock_ows_abacus_state.create_abacus_states.assert_called_once_with( states_to_import ) assert len(result) == 1 assert_import_result(result[0], EntityImportResult( EntityImportResult.ABACUS_STATE, 1, True, additional_info='{"success": true}' )) @patch('json_contract_file_import.abacus_state_import.ows_abacus_state') @patch('json_contract_file_import.abacus_state_import.logger') def test_import_abacus_states_failed_get(mock_logger, mock_ows_abacus_state): """Test import states when failed get states response.""" mock_get_response = MagicMock() mock_get_response.status_code = 400 mock_ows_abacus_state.get_abacus_states.return_value = mock_get_response result = import_abacus_states(1) assert result == [] mock_logger.error.assert_called_once_with( 'Failed response from getting existing states.') @patch('json_contract_file_import.abacus_state_import.ows_abacus_state') @patch('json_contract_file_import.abacus_state_import._get_abacus_states_to_import') def test_import_abacus_states_no_states_to_import( mock_get_states_to_import, mock_ows_abacus_state ): """Test import states when no states to import.""" mock_get_response = MagicMock() mock_get_response.status_code = 200 mock_get_response.json.return_value = [ { 'parent_table_id': 1, 'parent_table_name': 'account_payee', 'action_name': 'tax_eligibility', 'action_status': 'init' }, { 'parent_table_id': 1, 'parent_table_name': 'account_payee', 'action_name': 'payment_eligibility', 'action_status': 'init' } ] mock_ows_abacus_state.get_abacus_states.return_value = mock_get_response mock_get_states_to_import.return_value = [] result = import_abacus_states(1) assert result == [] assert not mock_ows_abacus_state.create_abacus_states.called def test_get_abacus_states_when_no_existing_states(): """Test get abacus states when no existing states.""" existing_states = [] states = _get_abacus_states_to_import(1, existing_states) assert len(states) == 2 assert states[0] == { 'action_name': 'tax_eligibility', 'parent_table_id': 1, 'parent_table_name': 'account_payee' } assert states[1] == { 'action_name': 'payment_eligibility', 'parent_table_id': 1, 'parent_table_name': 'account_payee' } def test_get_abacus_states_when_one_existing_state_is_tax_eligibility(): """Test get abacus states when one existing state is tax eligibility.""" existing_states = [ { 'abacus_state_id': 12, 'parent_table_id': 1, 'parent_table_name': 'account_payee', 'action_name': 'tax_eligibility', 'action_status': 'init', } ] states = _get_abacus_states_to_import(1, existing_states) assert len(states) == 1 assert states[0] == { 'action_name': 'payment_eligibility', 'parent_table_id': 1, 'parent_table_name': 'account_payee' } def test_get_abacus_states_when_all_states_exist(): """Test get abacus states when all states exist, no new states to add.""" existing_states = [ { 'abacus_state_id': 12, 'parent_table_id': 1, 'parent_table_name': 'account_payee', 'action_name': 'tax_eligibility', 'action_status': 'init', }, { 'abacus_state_id': 13, 'parent_table_id': 1, 'parent_table_name': 'account_payee', 'action_name': 'payment_eligibility', 'action_status': 'init', } ] states = _get_abacus_states_to_import(1, existing_states) assert len(states) == 0