"""Unit testcases for ContractLifecycleAutomationProcessor processor.""" from datetime import date from unittest.mock import call from unittest.mock import MagicMock from unittest.mock import patch from contract_lifecycle_automation.constants.contract_lifecycle_automation import \ NO_CONTRACT_LIFECYCLES_ACTIVATION from contract_lifecycle_automation.constants.contract_lifecycle_automation import \ NO_CONTRACT_LIFECYCLES_RENEWAL from contract_lifecycle_automation.constants.contract_lifecycle_automation import \ NO_CONTRACT_LIFECYCLES_TERMINATION from contract_lifecycle_automation.processor import \ ContractLifecycleAutomationProcessor def test_get_contract_lifecycles_ids(mock_terminable_contract_lifecycles): """Test _get_contract_lifecycles_ids method.""" contract_lifecycle_automation = ContractLifecycleAutomationProcessor() res = contract_lifecycle_automation._get_contract_lifecycles_ids( mock_terminable_contract_lifecycles ) assert res == [1, 2, 3] @patch('contract_lifecycle_automation.processor.config') def test_get_contract_lifecycles_and_ids( mock_config, mock_terminable_contract_lifecycles ): """Test getting contract lifecycles and ids.""" mock_endpoint_response_1 = { 'items': mock_terminable_contract_lifecycles[0:2], 'total_count': len(mock_terminable_contract_lifecycles) } mock_endpoint_response_2 = { 'items': mock_terminable_contract_lifecycles[2:2], 'total_count': len(mock_terminable_contract_lifecycles) } mock_get = MagicMock( side_effect=[ mock_endpoint_response_1, mock_endpoint_response_2 ] ) mock_config.BATCH_SIZE = 2 ContractLifecycleAutomationProcessor._get_contract_lifecycles_ids = MagicMock( side_effect=[list([1, 2]), list([3])] ) contract_lifecycle_automation = ContractLifecycleAutomationProcessor() res = contract_lifecycle_automation._get_contract_lifecycles_and_ids( mock_get ) assert res == [1, 2, 3] mock_get.assert_has_calls([call(2, 0), call(2, 2)]) ContractLifecycleAutomationProcessor._get_contract_lifecycles_ids \ .assert_has_calls([ call(mock_terminable_contract_lifecycles[0:2]), call(mock_terminable_contract_lifecycles[2:2]), ]) @patch('contract_lifecycle_automation.processor.config') def test_get_contract_lifecycles_and_ids_no_records(mock_config): """Test getting contract lifecycles and ids. returns empty list when there are no records. """ mock_config.BATCH_SIZE = 3 mock_endpoint_response = { 'items': [], 'total_count': 0 } mock_get = MagicMock(return_value=mock_endpoint_response) ContractLifecycleAutomationProcessor._get_contract_lifecycles_ids = MagicMock() contract_lifecycle_automation = ContractLifecycleAutomationProcessor() res = contract_lifecycle_automation._get_contract_lifecycles_and_ids( mock_get ) assert res == [] mock_get.assert_has_calls([call(3, 0)]) ContractLifecycleAutomationProcessor._get_contract_lifecycles_ids \ .assert_not_called() @patch('contract_lifecycle_automation.processor.get_terminable_contract_lifecycles') @patch('contract_lifecycle_automation.processor.bulk_terminate_contract_lifecycles') @patch('contract_lifecycle_automation.processor.config') def test_terminate_contract_lifecycles(mock_config, mock_bulk_terminate, mock_get): """Test terminating contract lifecycles.""" mock_config.BATCH_SIZE = 3 ContractLifecycleAutomationProcessor._get_contract_lifecycles_and_ids = MagicMock( return_value=[1, 2, 3, 4, 5, 6] ) contract_lifecycle_automation = ContractLifecycleAutomationProcessor() contract_lifecycle_automation._terminate_contract_lifecycles() ContractLifecycleAutomationProcessor._get_contract_lifecycles_and_ids \ .assert_called_once_with(mock_get) mock_bulk_terminate.assert_has_calls([call([1, 2, 3]), call([4, 5, 6])]) @patch('contract_lifecycle_automation.processor.logger') def test_terminate_contract_lifecycles_no_records(mock_logger): """Test terminating contract lifecycles when there are no contract lifecycles.""" ContractLifecycleAutomationProcessor._get_contract_lifecycles_and_ids = MagicMock( return_value=[] ) contract_lifecycle_automation = ContractLifecycleAutomationProcessor() contract_lifecycle_automation._terminate_contract_lifecycles() mock_logger.info.assert_called_once_with( NO_CONTRACT_LIFECYCLES_TERMINATION.format(str(date.today())) ) @patch('contract_lifecycle_automation.processor.get_activable_contract_lifecycles') @patch('contract_lifecycle_automation.processor.bulk_activate_contract_lifecycles') @patch('contract_lifecycle_automation.processor.config') def test_activate_contract_lifecycles(mock_config, mock_bulk_activate, mock_get): """Test activating contract lifecycles.""" mock_config.BATCH_SIZE = 2 ContractLifecycleAutomationProcessor._get_contract_lifecycles_and_ids = MagicMock( return_value=[1, 2, 3, 4, 5, 6] ) contract_lifecycle_automation = ContractLifecycleAutomationProcessor() contract_lifecycle_automation._activate_contract_lifecycles() ContractLifecycleAutomationProcessor._get_contract_lifecycles_and_ids \ .assert_called_once_with(mock_get) mock_bulk_activate.assert_has_calls([call([1, 2]), call([3, 4]), call([5, 6])]) @patch('contract_lifecycle_automation.processor.logger') def test_activate_contract_lifecycles_no_records(mock_logger): """Test activating contract lifecycles when there are no contract lifecycles.""" ContractLifecycleAutomationProcessor._get_contract_lifecycles_and_ids = MagicMock( return_value=[] ) contract_lifecycle_automation = ContractLifecycleAutomationProcessor() contract_lifecycle_automation._activate_contract_lifecycles() mock_logger.info.assert_called_once_with( NO_CONTRACT_LIFECYCLES_ACTIVATION.format(str(date.today())) ) @patch('contract_lifecycle_automation.processor.get_renewable_contract_lifecycles') @patch('contract_lifecycle_automation.processor.bulk_renew_contract_lifecycles') @patch('contract_lifecycle_automation.processor.config') def test_renew_contract_lifecycles(mock_config, mock_bulk_renew, mock_get): """Test renewing contract lifecycles.""" mock_config.BATCH_SIZE = 6 ContractLifecycleAutomationProcessor._get_contract_lifecycles_and_ids = MagicMock( return_value=[1, 2, 3, 4, 5, 6] ) contract_lifecycle_automation = ContractLifecycleAutomationProcessor() contract_lifecycle_automation._renew_contract_lifecycles() ContractLifecycleAutomationProcessor._get_contract_lifecycles_and_ids \ .assert_called_once_with(mock_get) mock_bulk_renew.assert_has_calls([call([1, 2, 3, 4, 5, 6])]) @patch('contract_lifecycle_automation.processor.logger') def test_renew_contract_lifecycles_no_records(mock_logger): """Test renewing contract lifecycles when there are no contract lifecycles.""" ContractLifecycleAutomationProcessor._get_contract_lifecycles_and_ids = MagicMock( return_value=[] ) contract_lifecycle_automation = ContractLifecycleAutomationProcessor() contract_lifecycle_automation._renew_contract_lifecycles() mock_logger.info.assert_called_once_with( NO_CONTRACT_LIFECYCLES_RENEWAL.format(str(date.today())) ) @patch('contract_lifecycle_automation.processor.logger') def test_process(mock_logger): """Test process method.""" ContractLifecycleAutomationProcessor._activate_contract_lifecycles = MagicMock( return_value=True ) ContractLifecycleAutomationProcessor._renew_contract_lifecycles = MagicMock( return_value=True ) ContractLifecycleAutomationProcessor._terminate_contract_lifecycles = MagicMock( return_value=True ) contract_lifecycle_automation = ContractLifecycleAutomationProcessor() contract_lifecycle_automation.process() ContractLifecycleAutomationProcessor._activate_contract_lifecycles \ .assert_called_once() ContractLifecycleAutomationProcessor._renew_contract_lifecycles \ .assert_called_once() ContractLifecycleAutomationProcessor._terminate_contract_lifecycles \ .assert_called_once() mock_logger.info.assert_has_calls([ call('Starting Contract Lifecycles Termination...'), call('\n'), call('Starting Contract Lifecycles Activation...'), call('\n'), call('Starting Contract Lifecycles Renewal...'), ])