"""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 abacus_contract.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