package org.molgenis.data.jobs; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.molgenis.data.jobs.model.JobExecution; import org.molgenis.data.jobs.model.JobExecutionMetaData; import org.molgenis.test.data.AbstractMolgenisSpringTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.mail.MailSender; import org.springframework.mail.SimpleMailMessage; import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import static org.testng.Assert.assertTrue; @ContextConfiguration(classes = { ProgressImplTest.Config.class }) public class ProgressImplTest extends AbstractMolgenisSpringTest { @Autowired private JobExecutionMetaData jobExecutionMeta; private ProgressImpl progress; @Mock private JobExecutionUpdater updater; @Mock private MailSender mailSender; private JobExecution jobExecution; @BeforeClass public void beforeClass() { MockitoAnnotations.initMocks(this); } @BeforeMethod public void beforeMethod() { jobExecution = new JobExecution(jobExecutionMeta) { }; jobExecution.setIdentifier("ABCDE"); jobExecution.setType("Annotator"); progress = new ProgressImpl(jobExecution, updater, mailSender); } @Test public void testLog() { progress.start(); progress.status("Working...."); progress.success(); System.out.println(jobExecution.getLog()); assertTrue(jobExecution.getLog().contains("- Execution started." + System.lineSeparator())); assertTrue(jobExecution.getLog().contains("- Working...." + System.lineSeparator())); assertTrue(jobExecution.getLog().contains("- Execution successful. Time spent: ")); } @Test public void testMailSuccess() { jobExecution.setSuccessEmail("a@b.c,d@e.f"); progress.start(); progress.status("Working...."); progress.success(); System.out.println(jobExecution.getLog()); assertTrue(jobExecution.getLog().contains("- Execution started." + System.lineSeparator())); assertTrue(jobExecution.getLog().contains("- Working...." + System.lineSeparator())); assertTrue(jobExecution.getLog().contains("- Execution successful. Time spent: ")); SimpleMailMessage mail = new SimpleMailMessage(); mail.setTo(new String[] { "a@b.c", "d@e.f" }); mail.setSubject("Annotator job succeeded."); mail.setText(jobExecution.getLog()); Mockito.verify(mailSender).send(mail); } @Test public void testMailFailed() { jobExecution.setFailureEmail("a@b.c,d@e.f"); progress.start(); progress.status("Working...."); Exception ex = new IllegalArgumentException("blah"); progress.failed(ex); System.out.println(jobExecution.getLog()); assertTrue(jobExecution.getLog().contains("- Execution started." + System.lineSeparator())); assertTrue(jobExecution.getLog().contains("- Working...." + System.lineSeparator())); assertTrue(jobExecution.getLog().contains("- Failed")); assertTrue(jobExecution.getLog().contains(ex.getMessage())); SimpleMailMessage mail = new SimpleMailMessage(); mail.setTo(new String[] { "a@b.c", "d@e.f" }); mail.setSubject("Annotator job failed."); mail.setText(jobExecution.getLog()); Mockito.verify(mailSender).send(mail); } @Configuration @ComponentScan({ "org.molgenis.data.populate", "org.molgenis.data.jobs.model" }) public static class Config { } }