"""Unit tests for Contract Lifecycle Schedule Detail logic.""" from unittest.mock import patch from abacus_contract.logic import contract_lifecycle_schedule_detail as logic from tests.utils.factories import ContractLifecycleScheduleDetailFactory @patch('abacus_contract.logic.contract_lifecycle_schedule_detail.models') def test_get_contract_lifecycle_schedule_detail_by_ids(mock_models): """Test get Contract Lifecycle Schedule Detail by IDs.""" mock_contract_lifecycle_schedule_details =\ ContractLifecycleScheduleDetailFactory.create_batch(2) schedule_ids = [ schedule_detail.contract_lifecycle_schedule_detail_id for schedule_detail in mock_contract_lifecycle_schedule_details ] schedule_ids.append(99999) period_intervals = [ schedule_detail.period_interval for schedule_detail in mock_contract_lifecycle_schedule_details ] period_types = [ schedule_detail.period_type for schedule_detail in mock_contract_lifecycle_schedule_details ] mock_models.ContractLifecycleScheduleDetail.get_by_ids.return_value =\ mock_contract_lifecycle_schedule_details res = logic.get_contract_lifecycle_schedule_details_by_ids(schedule_ids) assert res.status == 200 assert res.message == [ { 'data': { 'contract_lifecycle_schedule_detail_id': schedule_ids[0], 'period_interval': period_intervals[0], 'period_type': period_types[0] }, }, { 'data': { 'contract_lifecycle_schedule_detail_id': schedule_ids[1], 'period_interval': period_intervals[1], 'period_type': period_types[1] }, }, { 'data': None } ] mock_models.ContractLifecycleScheduleDetail.get_by_ids.assert_called_once_with( schedule_ids ) @patch('abacus_contract.logic.contract_lifecycle_schedule_detail.models') def test_find_or_create_contract_lifecycle_schedule_detail_if_not_exist(mock_models): """Test create contract_lifecycle_schedule_detail if not already exist.""" mock_models.ContractLifecycleScheduleDetail \ .get_by_period_interval_and_period_type.return_value = None period_interval = 3 period_type = 'year' mock_models.ContractLifecycleScheduleDetail.create.return_value = dict( period_interval=period_interval, period_type=period_type ) res = logic.find_or_create_contract_lifecycle_schedule_detail( period_interval, period_type ) mock_models.ContractLifecycleScheduleDetail.create.assert_called_once_with( period_interval=period_interval, period_type=period_type ) assert res['period_interval'] == period_interval assert res['period_type'] == period_type @patch('abacus_contract.logic.contract_lifecycle_schedule_detail.models') def test_find_or_create_contract_lifecycle_schedule_detail_if_exist(mock_models): """Test create contract_lifecycle_schedule_detail if record already exist.""" mock_contract_lifecycle_schedule_detail =\ ContractLifecycleScheduleDetailFactory.create() mock_models.ContractLifecycleScheduleDetail \ .get_by_period_interval_and_period_type.return_value = \ mock_contract_lifecycle_schedule_detail period_interval = mock_contract_lifecycle_schedule_detail.period_interval period_type = mock_contract_lifecycle_schedule_detail.period_type res = logic.find_or_create_contract_lifecycle_schedule_detail( period_interval, period_type ) mock_models.ContractLifecycleScheduleDetail.create.assert_not_called() assert res.period_interval == period_interval assert res.period_type == period_type