@Test
 public void sameJobCanNotBeScheduledTwice() throws SchedulerException {
   try {
     expectedException.expect(JobAlreadyScheduledException.class);
     schedulingService.scheduleJob(
         GROUP_NAME, new SourceConfig(TEST_JOB, TEST_JOB, 100, Collections.emptyMap()));
     schedulingService.scheduleJob(
         GROUP_NAME, new SourceConfig(TEST_JOB, TEST_JOB, 100, Collections.emptyMap()));
   } finally {
     schedulingService.cancelJobs(GROUP_NAME);
   }
 }
  @Test
  public void cancelJob() throws SchedulerException, InterruptedException {
    MutableInt mutableInt = new MutableInt(0);
    HashMap<String, Object> map = new HashMap<>();
    map.put(TestJob.COUNTER, mutableInt);

    schedulingService.scheduleJob(GROUP_NAME, new SourceConfig(TEST_JOB, TEST_JOB, 100, map));
    assertTrue(schedulingService.checkJobExists(TEST_JOB, GROUP_NAME));

    schedulingService.cancelJobs(GROUP_NAME);
    assertFalse(schedulingService.checkJobExists(TEST_JOB, GROUP_NAME));
  }
  @Test
  public void scheduleJobShouldRunAtLeastThreeTimes()
      throws SchedulerException, InterruptedException {
    MutableInt mutableInt = new MutableInt(0);
    HashMap<String, Object> map = new HashMap<>();
    map.put(TestJob.COUNTER, mutableInt);

    schedulingService.scheduleJob(GROUP_NAME, new SourceConfig(TEST_JOB, TEST_JOB, 100, map));
    Thread.sleep(500);
    schedulingService.cancelJobs(GROUP_NAME);
    assertThat(mutableInt.getValue()).isGreaterThan(3);
  }
  @Test
  public void sourceJobShouldBeCanceled() throws SchedulerException, InterruptedException {
    // this test should find no widget and therefore cancel the job
    when(widgetConfigRepository.exists(GROUP_NAME)).thenReturn(false);

    schedulingService.scheduleJob(
        GROUP_NAME, new SourceConfig(TEST_JOB, TEST_JOB, 100, Collections.emptyMap()));
    Thread.sleep(200); // time for scheduling service to cancel the job

    assertFalse(schedulingService.checkJobExists(TEST_JOB, GROUP_NAME));
    verify(sourceDataRepository).deleteByWidgetId(eq(GROUP_NAME));
  }