Die App führt die Berechnung aus
[demos/kafka/training] / src / test / java / de / juplo / kafka / AdderBusinessLogicTest.java
diff --git a/src/test/java/de/juplo/kafka/AdderBusinessLogicTest.java b/src/test/java/de/juplo/kafka/AdderBusinessLogicTest.java
new file mode 100644 (file)
index 0000000..8e49263
--- /dev/null
@@ -0,0 +1,117 @@
+package de.juplo.kafka;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.params.provider.ValueSource;
+
+import java.util.Arrays;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.*;
+
+
+public class AdderBusinessLogicTest
+{
+  @Test
+  @DisplayName("An empty Optional should be returned, for a non-existing sum")
+  public void testGetSumReturnsEmptyOptionalForNonExistingSum()
+  {
+    AdderBusinessLogic adder = new AdderBusinessLogic();
+    assertThat(adder.getSum("foo")).isEmpty();
+  }
+
+  @Test
+  @DisplayName("A non-empty Optional should be returned, for an existing sum")
+  public void testGetSumReturnsNonEmptyOptionalForExistingSum()
+  {
+    AdderBusinessLogic adder = new AdderBusinessLogic();
+    adder.addToSum("foo", 6);
+    assertThat(adder.getSum("foo")).isNotEmpty();
+  }
+
+  @Test
+  @DisplayName("A sum can be calculated, if it does exist")
+  public void testCalculatePossibleIfSumExists()
+  {
+    AdderBusinessLogic adder = new AdderBusinessLogic();
+    adder.addToSum("foo", 6);
+    assertThatNoException().isThrownBy(() -> adder.calculate("foo"));
+  }
+
+  @Test
+  @DisplayName("An existing sum is removed, if ended")
+  public void testCalculateRemovesSumIfSumExists()
+  {
+    AdderBusinessLogic adder = new AdderBusinessLogic();
+    adder.addToSum("foo", 6);
+    adder.calculate("foo");
+    assertThat(adder.getSum("foo")).isEmpty();
+  }
+
+  @Test
+  @DisplayName("An existing sum returns a non-null value, if calculated")
+  public void testCalculateReturnsNonNullValueIfSumExists()
+  {
+    AdderBusinessLogic adder = new AdderBusinessLogic();
+    adder.addToSum("foo", 6);
+    assertThat(adder.calculate("foo")).isNotNull();
+  }
+
+  @Test
+  @DisplayName("Ending a non-existing sum, causes an IllegalStateException")
+  public void testCalculateCausesExceptionIfNotExists()
+  {
+    AdderBusinessLogic adder = new AdderBusinessLogic();
+    assertThatIllegalStateException().isThrownBy(() -> adder.calculate("foo"));
+  }
+
+  @Test
+  @DisplayName("Adding a null-value to a sum causes an IllegalArgumentException")
+  public void testAddToSumWithNullValueCausesException()
+  {
+    AdderBusinessLogic adder = new AdderBusinessLogic();
+    assertThatIllegalArgumentException().isThrownBy(() -> adder.addToSum("foo", null));
+  }
+
+  @ParameterizedTest(name = "{index}: Adding {0}")
+  @DisplayName("Adding a non-positive value to a sum causes an IllegalArgumentException")
+  @ValueSource(ints = { 0, -1, -6, -66, Integer.MIN_VALUE })
+  public void testAddToSumWithNonPositiveValueCausesException(int value)
+  {
+    AdderBusinessLogic adder = new AdderBusinessLogic();
+    assertThatIllegalArgumentException().isThrownBy(() -> adder.addToSum("foo", value));
+  }
+
+  @ParameterizedTest(name = "{index}: Adding {0}")
+  @DisplayName("Can add a positive value to a sum")
+  @ValueSource(ints = { 1, 3, 6, 66, 7, 9 })
+  public void testAddToSumWithPositiveValuePossible(int value)
+  {
+    AdderBusinessLogic adder = new AdderBusinessLogic();
+    assertThatNoException().isThrownBy(() -> adder.addToSum("foo", value));
+  }
+
+  @ParameterizedTest(name = "{index}: Summing up {0}")
+  @DisplayName("Adds up numbers correctly")
+  @MethodSource("numbersProvider")
+  public void testAddToSumAddsUpNumbersCorrectlyIfSumExists(int... numbers)
+  {
+    long expectedResult = Arrays.stream(numbers).sum();
+    AdderBusinessLogic adder = new AdderBusinessLogic();
+    Arrays.stream(numbers).forEach(number -> adder.addToSum("foo", number));
+    AdderResult result = adder.calculate("foo");
+    assertThat(result.number).isEqualTo(numbers[numbers.length-1]);
+    assertThat(result.sum).isEqualTo(expectedResult);
+  }
+
+  static Stream<Arguments> numbersProvider() {
+    return Stream.of(
+        Arguments.of((Object) IntStream.rangeClosed(1,9).toArray()),
+        Arguments.of((Object) IntStream.rangeClosed(1,19).toArray()),
+        Arguments.of((Object) IntStream.rangeClosed(1,66).toArray()));
+  }
+}