package pl.edu.icm.saos.batch.jobs.importer; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; import java.util.stream.Collectors; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; import org.springframework.batch.core.Job; import org.springframework.batch.core.JobExecution; import org.springframework.beans.factory.annotation.Autowired; import com.google.common.collect.Lists; import pl.edu.icm.saos.batch.core.JobForcingExecutor; import pl.edu.icm.saos.batch.jobs.BatchJobsTestSupport; import pl.edu.icm.saos.batch.jobs.JobExecutionAssertUtils; import pl.edu.icm.saos.common.testcommon.category.SlowTest; import pl.edu.icm.saos.importer.commoncourt.judgment.SourceCcjExternalRepository; import pl.edu.icm.saos.importer.commoncourt.judgment.remove.CcRemovedJudgmentsFinder; import pl.edu.icm.saos.persistence.common.TestPersistenceObjectFactory; import pl.edu.icm.saos.persistence.enrichment.EnrichmentTagRepository; import pl.edu.icm.saos.persistence.model.CommonCourtJudgment; import pl.edu.icm.saos.persistence.model.Judgment; import pl.edu.icm.saos.persistence.model.DeletedJudgment; import pl.edu.icm.saos.persistence.repository.JudgmentRepository; import pl.edu.icm.saos.persistence.repository.DeletedJudgmentRepository; /** * @author madryk */ @Category(SlowTest.class) public class CcJudgmentDeleteRemovedJobTest extends BatchJobsTestSupport { @Autowired private Job ccJudgmentDeleteRemovedJob; @Autowired private JobForcingExecutor jobExecutor; @Autowired private JudgmentRepository judgmentRepository; @Autowired private DeletedJudgmentRepository deletedJudgmentRepository; @Autowired private EnrichmentTagRepository enrichmentTagRepository; @Autowired private CcRemovedJudgmentsFinder ccRemovedJudgmentsFinder; @Autowired private TestPersistenceObjectFactory testPersistenceObjectFactory; private SourceCcjExternalRepository sourceCcjExternalRepository = mock(SourceCcjExternalRepository.class); @Before public void setup() { ccRemovedJudgmentsFinder.setExternalRepositoryPageSize(5); ccRemovedJudgmentsFinder.setSourceCcjExternalRepository(sourceCcjExternalRepository); } //------------------------ TESTS -------------------------- @Test public void ccJudgmentDeleteRemovedJob() throws Exception { // given int judgmentsInDbCount = 15; List<CommonCourtJudgment> judgments = testPersistenceObjectFactory.createCcJudgmentListWithRandomData(judgmentsInDbCount); List<Judgment> judgmentsInExternalRepository = Lists.newArrayList(judgments); Judgment judgmentToRemove1 = judgmentsInExternalRepository.remove(12); Judgment judgmentToRemove2 = judgmentsInExternalRepository.remove(8); Judgment judgmentToRemove3 = judgmentsInExternalRepository.remove(3); List<String> judgmentSourceIdsInExternalRepository = judgmentsInExternalRepository.stream() .map(j -> j.getSourceInfo().getSourceJudgmentId()) .collect(Collectors.toList()); testPersistenceObjectFactory.createEnrichmentTagsForJudgment(judgmentToRemove1.getId()); when(sourceCcjExternalRepository.findJudgmentIds(0, 5, null)).thenReturn(judgmentSourceIdsInExternalRepository.subList(0, 5)); when(sourceCcjExternalRepository.findJudgmentIds(1, 5, null)).thenReturn(judgmentSourceIdsInExternalRepository.subList(5, 10)); when(sourceCcjExternalRepository.findJudgmentIds(2, 5, null)).thenReturn(judgmentSourceIdsInExternalRepository.subList(10, judgmentSourceIdsInExternalRepository.size())); when(sourceCcjExternalRepository.findJudgmentIds(3, 5, null)).thenReturn(Lists.newArrayList()); // execute JobExecution execution = jobExecutor.forceStartNewJob(ccJudgmentDeleteRemovedJob); // assert JobExecutionAssertUtils.assertJobExecution(execution, 0, 3); List<DeletedJudgment> deletedJudgments = deletedJudgmentRepository.findAll(); assertEquals(3, deletedJudgments.size()); assertContainsJudgment(deletedJudgments, judgmentToRemove1); assertContainsJudgment(deletedJudgments, judgmentToRemove2); assertContainsJudgment(deletedJudgments, judgmentToRemove3); assertEquals(judgmentsInDbCount - 3, judgmentRepository.count()); assertNull(judgmentRepository.findOne(judgmentToRemove1.getId())); assertNull(judgmentRepository.findOne(judgmentToRemove2.getId())); assertNull(judgmentRepository.findOne(judgmentToRemove3.getId())); assertEquals(0, enrichmentTagRepository.findAllByJudgmentId(judgmentToRemove1.getId()).size()); } //------------------------ PRIVATE -------------------------- private void assertContainsJudgment(List<DeletedJudgment> deletedJudgments, Judgment judgment) { for (DeletedJudgment deletedJudgment : deletedJudgments) { if (deletedJudgment.getJudgmentId() == judgment.getId()) { assertEquals(judgment.getSourceInfo().getPublicationDate(), deletedJudgment.getSourceInfo().getPublicationDate()); assertEquals(judgment.getSourceInfo().getPublisher(), deletedJudgment.getSourceInfo().getPublisher()); assertEquals(judgment.getSourceInfo().getReviser(), deletedJudgment.getSourceInfo().getReviser()); assertEquals(judgment.getSourceInfo().getSourceCode(), deletedJudgment.getSourceInfo().getSourceCode()); assertEquals(judgment.getSourceInfo().getSourceJudgmentId(), deletedJudgment.getSourceInfo().getSourceJudgmentId()); assertEquals(judgment.getSourceInfo().getSourceJudgmentUrl(), deletedJudgment.getSourceInfo().getSourceJudgmentUrl()); return; } } fail("Judgment with id " + judgment.getId() + " not found among removed judgments"); } }