package be.raildelays.javafx.controller.batch;
import be.raildelays.batch.service.BatchStartAndRecoveryService;
import be.raildelays.javafx.service.BatchScheduledService;
import be.raildelays.javafx.test.JavaFXThreadingRule;
import be.raildelays.javafx.test.GraphicalTest;
import javafx.fxml.FXMLLoader;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.springframework.batch.core.BatchStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.step.job.JobParametersExtractor;
import org.springframework.batch.test.MetaDataInstanceFactory;
import static org.easymock.EasyMock.*;
/**
* @author Almex
*/
@Category(GraphicalTest.class)
@RunWith(BlockJUnit4ClassRunner.class)
public abstract class AbstractBatchControllerIT<T extends AbstractBatchController> {
protected T controller;
@Rule
public JavaFXThreadingRule javafxRule = new JavaFXThreadingRule();
protected BatchScheduledService service;
protected JobParametersExtractor extractor;
protected BatchStartAndRecoveryService recoveryService;
protected FXMLLoader rootLoader;
@Before
public void setUp() throws Exception {
recoveryService = createMock(BatchStartAndRecoveryService.class);
service = new BatchScheduledService();
service.setService(recoveryService);
extractor = createMock(JobParametersExtractor.class);
controller.setJobName("foo");
controller.setService(service);
controller.setPropertiesExtractor(extractor);
rootLoader.setControllerFactory(clazz -> controller);
rootLoader.load();
}
@Test
public void testDoAbandon() throws Exception {
JobExecution jobExecution = MetaDataInstanceFactory.createJobExecution();
jobExecution.setStatus(BatchStatus.ABANDONED);
expect(recoveryService.startNewInstance(anyString(), anyObject())).andReturn(jobExecution);
expect(recoveryService.abandon(anyLong())).andReturn(jobExecution);
replay(recoveryService);
service.start("foo", new JobParameters());
controller.doAbandon();
}
@Test
public void testDoStart() throws Exception {
JobExecution jobExecution = MetaDataInstanceFactory.createJobExecution();
jobExecution.setStatus(BatchStatus.STARTING);
expect(extractor.getJobParameters(null, null)).andReturn(new JobParameters());
expect(recoveryService.startNewInstance(anyString(), anyObject())).andReturn(jobExecution);
replay(recoveryService, extractor);
controller.doStart();
}
@Test
public void testDoRestart() throws Exception {
controller.doRestart();
}
@Test
public void testDoStop() throws Exception {
JobExecution jobExecution = MetaDataInstanceFactory.createJobExecution();
jobExecution.setStatus(BatchStatus.STOPPING);
expect(recoveryService.startNewInstance(anyString(), anyObject())).andReturn(jobExecution);
expect(recoveryService.stop(anyLong())).andReturn(jobExecution);
replay(recoveryService);
service.start("foo", new JobParameters());
controller.doStop();
}
@Test
public void testDestroy() throws Exception {
controller.destroy();
}
}