code: def test_update_next_schedule_run(self):
      future_time = datetime.now() + timedelta(seconds=1000)
      job_scheduler = JobScheduler(MagicMock())
      job_entry = self.get_dummy_job_catalog_entry(
          True, "job", datetime.now()
      )
  
      # job which runs just once
      job_entry.end_time = future_time
      status, next_run = job_scheduler._update_next_schedule_run(
          job_entry
      )
      self.assertEqual(
          status, False, "status for one time job should be false"
      )
  
      # recurring job with valid end date
      job_entry.end_time = future_time
      job_entry.repeat_interval = 120
      expected_next_run = datetime.now() + timedelta(seconds=120)
      status, next_run = job_scheduler._update_next_schedule_run(
          job_entry
      )
      self.assertEqual(
          status, True, "status for recurring time job should be true"
      )
      self.assertGreaterEqual(next_run, expected_next_run)
  
      # recurring job with expired end date
      job_entry.end_time = datetime.now() + timedelta(seconds=60)
      job_entry.repeat_interval = 120
      expected_next_run = datetime.now() + timedelta(seconds=120)
      status, next_run = job_scheduler._update_next_schedule_run(
          job_entry
      )
      self.assertEqual(
          status,
          False,
          "status for rexpired ecurring time job should be false",
      )
      self.assertLessEqual(next_run, datetime.now())
  
file_path: evadb/test/unit_tests/utils/test_job_scheduler.py
imports: import unittest
  from datetime import datetime, timedelta
  from mock import MagicMock
  from evadb.catalog.models.utils import JobCatalogEntry
  from evadb.utils.job_scheduler import JobScheduler
label_desc: Use image node_id 4 for calling the JobSchedulerTests obj's underlying member method code with example usage: obj.test_update_next_schedule_run() without return types