@Test
  public void shouldScheduleRepeatingPeriodSchedulableJob() throws SchedulerException {
    try {
      fakeNow(new DateTime(2020, 7, 15, 10, 0, 0));

      Map<String, Object> params = new HashMap<>();
      params.put(MotechSchedulerService.JOB_ID_KEY, "job_id");
      schedulerService.scheduleRepeatingPeriodJob(
          new RepeatingPeriodSchedulableJob(
              new MotechEvent("test_event_3", params),
              newDateTime(2020, 7, 15, 12, 0, 0),
              newDateTime(2020, 7, 16, 12, 0, 0),
              new Period(4, 0, 0, 0),
              true));

      List<DateTime> fireTimes = getFireTimes("test_event_3-job_id-period");
      assertEquals(
          asList(
              new DateTime(2020, 7, 15, 12, 0, 0),
              new DateTime(2020, 7, 15, 16, 0, 0),
              new DateTime(2020, 7, 15, 20, 0, 0),
              new DateTime(2020, 7, 16, 0, 0, 0),
              new DateTime(2020, 7, 16, 4, 0, 0),
              new DateTime(2020, 7, 16, 8, 0, 0),
              new DateTime(2020, 7, 16, 12, 0, 0)),
          fireTimes);
    } finally {
      stopFakingTime();
    }
  }
  @Override
  public void scheduleRepeatingPeriodJob(
      String subject,
      Map<Object, Object> parameters,
      DateTime startTime,
      DateTime endTime,
      Period repeatPeriod,
      Boolean ignorePastFiresAtStart,
      Boolean useOriginalFireTimeAfterMisfire) {
    MotechEvent motechEvent = new MotechEvent(subject, createMotechEventParameters(parameters));
    RepeatingPeriodSchedulableJob job =
        new RepeatingPeriodSchedulableJob(
            motechEvent,
            startTime.toDate(),
            endTime.toDate(),
            repeatPeriod,
            ignorePastFiresAtStart);
    job.setUseOriginalFireTimeAfterMisfire(useOriginalFireTimeAfterMisfire);

    scheduler.scheduleRepeatingPeriodJob(job);
  }