package uk.ac.ebi.ep.xml.generator; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Query; import static org.hamcrest.CoreMatchers.is; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.batch.core.BatchStatus; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.StepExecution; import org.springframework.batch.test.JobLauncherTestUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import static org.springframework.test.util.MatcherAssertionErrors.assertThat; import uk.ac.ebi.ep.data.testConfig.SpringDataMockConfig; import uk.ac.ebi.ep.xml.config.MockProteinBatchConfig; import uk.ac.ebi.ep.xml.config.MockXmlConfig; import uk.ac.ebi.ep.xml.config.ProteinBatchConfig; import uk.ac.ebi.ep.xml.config.XmlConfigParams; import uk.ac.ebi.ep.xml.validator.EnzymePortalXmlValidator; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {MockProteinBatchConfig.class, MockXmlConfig.class, JobTestRunnerConfig.class, SpringDataMockConfig.class}) public class ProteinCentricBatchIT { @Autowired private JobLauncherTestUtils jobLauncherTestUtils; @Autowired private EntityManagerFactory entityManagerFactory; @Autowired private XmlConfigParams mockXmlConfigParams; private EntityManager entityManager; @Before public void setUp(){ entityManager = entityManagerFactory.createEntityManager(); } @After public void closeResources() { entityManager.close(); } @Test public void successfulJobRun() throws Exception { int expectedEntries = countEntries(); JobExecution jobExecution = jobLauncherTestUtils.launchJob(); BatchStatus status = jobExecution.getStatus(); assertThat(status, is(BatchStatus.COMPLETED)); StepExecution step = getStepByName(ProteinBatchConfig.PROTEIN_CENTRIC_DB_TO_XML_STEP, jobExecution); assertThat(step.getReadCount(), is(expectedEntries)); assertThat(step.getWriteCount(), is(expectedEntries)); assertThat(step.getSkipCount(), is(0)); printXml(); } @Test public void validatesXmlFromSuccessfulJobRun() throws Exception { JobExecution jobExecution = jobLauncherTestUtils.launchJob(); BatchStatus status = jobExecution.getStatus(); assertThat(status, is(BatchStatus.COMPLETED)); String xmlFilePath = mockXmlConfigParams.getProteinCentricXmlDir(); String[] ebeyeXSDs = mockXmlConfigParams.getEbeyeXSDs().split(","); printXml(); assertThat(EnzymePortalXmlValidator.validateXml(xmlFilePath, ebeyeXSDs), is(true)); } private StepExecution getStepByName(String stepName, JobExecution jobExecution) { for (StepExecution stepExecution : jobExecution.getStepExecutions()) { if (stepExecution.getStepName().equals(stepName)) { return stepExecution; } } throw new IllegalArgumentException("Step name not recognized: " + stepName); } private int countEntries() { Query query = entityManager.createQuery("select count(u.dbentryId) from UniprotEntry u"); return ((Long) query.getSingleResult()).intValue(); } private void printXml() throws IOException { try (FileReader fileReader = new FileReader(mockXmlConfigParams.getProteinCentricXmlDir()); BufferedReader bufferedReader = new BufferedReader(fileReader)) { String line; while ((line = bufferedReader.readLine()) != null) { System.out.println(line); } } } }