Merge pull request #8888 from mikebski/BAEL-3646

[BAEL-3646] Conditional Flow in Spring Batch
This commit is contained in:
Jonathan Cook
2020-04-05 16:53:25 +02:00
committed by GitHub
13 changed files with 458 additions and 0 deletions
@@ -0,0 +1,56 @@
package org.baeldung.conditionalflow;
import org.baeldung.conditionalflow.config.NumberInfoConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.test.JobLauncherTestUtils;
import org.springframework.batch.test.context.SpringBatchTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import org.springframework.test.context.support.DirtiesContextTestExecutionListener;
import java.util.Collection;
import java.util.Iterator;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@RunWith(SpringRunner.class)
@SpringBatchTest
@EnableAutoConfiguration
@ContextConfiguration(classes = { NumberInfoConfig.class })
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class })
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
public class DeciderJobIntegrationTest {
@Autowired
private JobLauncherTestUtils jobLauncherTestUtils;
@Test
public void givenNumberGeneratorDecider_whenDeciderRuns_thenStatusIsNotify() throws Exception {
JobExecution jobExecution = jobLauncherTestUtils.launchJob();
Collection<StepExecution> actualStepExecutions = jobExecution.getStepExecutions();
ExitStatus actualJobExitStatus = jobExecution.getExitStatus();
assertEquals("COMPLETED", actualJobExitStatus.getExitCode()
.toString());
assertEquals(2, actualStepExecutions.size());
boolean notifyStepDidRun = false;
Iterator<StepExecution> iterator = actualStepExecutions.iterator();
while (iterator.hasNext() && !notifyStepDidRun) {
if (iterator.next()
.getStepName()
.equals("Notify step")) {
notifyStepDidRun = true;
}
}
assertTrue(notifyStepDidRun);
}
}
@@ -0,0 +1,71 @@
package org.baeldung.conditionalflow.model;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
class NumberInfoUnitTest {
@Test
void givenPositive_whenFrom_isPositive() {
assertTrue(NumberInfo.from(1)
.isPositive());
assertTrue(NumberInfo.from(11)
.isPositive());
assertFalse(NumberInfo.from(0)
.isPositive());
}
@Test
void givenNegative_whenFrom_isNegative() {
assertFalse(NumberInfo.from(-1)
.isPositive());
assertFalse(NumberInfo.from(-10)
.isPositive());
}
@Test
void givenEven_whenFrom_isEven() {
assertTrue(NumberInfo.from(0)
.isEven());
assertTrue(NumberInfo.from(-2)
.isEven());
assertTrue(NumberInfo.from(2)
.isEven());
assertTrue(NumberInfo.from(-22)
.isEven());
assertTrue(NumberInfo.from(22)
.isEven());
}
@Test
void givenOdd_whenFrom_isOdd() {
assertFalse(NumberInfo.from(1)
.isEven());
assertFalse(NumberInfo.from(-1)
.isEven());
assertFalse(NumberInfo.from(13)
.isEven());
assertFalse(NumberInfo.from(-13)
.isEven());
assertFalse(NumberInfo.from(31)
.isEven());
assertFalse(NumberInfo.from(-51)
.isEven());
}
@Test
void giveGeneratedInt_whenFrom_isNumberFromGenerator() {
for (int i = -100; i < 100; i++) {
assertEquals(i, NumberInfo.from(i)
.getNumber());
}
}
}
@@ -0,0 +1,16 @@
package org.baeldung.conditionalflow.step;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.baeldung.conditionalflow.model.NumberInfo;
import org.junit.jupiter.api.Test;
class NumberInfoClassifierUnitTest {
@Test
void givenNumberInfo_whenProcess_thenConvertsToInteger() throws Exception {
NumberInfoClassifier nic = new NumberInfoClassifier();
assertEquals(Integer.valueOf(4), nic.process(NumberInfo.from(4)));
assertEquals(Integer.valueOf(-4), nic.process(NumberInfo.from(-4)));
}
}
@@ -0,0 +1,21 @@
package org.baeldung.conditionalflow.step;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import org.baeldung.conditionalflow.model.NumberInfo;
import org.junit.jupiter.api.Test;
public class NumberInfoGeneratorUnitTest {
@Test
public void givenArray_whenGenerator_correctOrderAndValue() {
int[] numbers = new int[] { 1, -2, 4, -10 };
NumberInfoGenerator numberGenerator = new NumberInfoGenerator(numbers);
assertEquals(new NumberInfo(numbers[0]), numberGenerator.read());
assertEquals(new NumberInfo(numbers[1]), numberGenerator.read());
assertEquals(new NumberInfo(numbers[2]), numberGenerator.read());
assertEquals(new NumberInfo(numbers[3]), numberGenerator.read());
assertNull(numberGenerator.read());
}
}