@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));
  }
  @Before
  public void setup() throws SchedulerException {
    ApplicationContext applicationContext = mock(ApplicationContext.class);

    // introduce repositorys
    widgetConfigRepository = mock(WidgetConfigRepository.class);
    when(widgetConfigRepository.exists(GROUP_NAME)).thenReturn(true);
    when(applicationContext.getBean(WidgetConfigRepository.class))
        .thenReturn(widgetConfigRepository);

    sourceDataRepository = mock(SourceDataRepository.class);
    when(applicationContext.getBean(SchedulingService.class)).thenReturn(schedulingService);

    schedulingService =
        new SchedulingService(applicationContext, widgetConfigRepository, sourceDataRepository);
    schedulingService.setupScheduling();
    schedulingService.registerJob(TEST_JOB, TestJob.class);
    when(applicationContext.getBean(SchedulingService.class)).thenReturn(schedulingService);
  }