ROT: Übersehene Erwartung an SumBusinesLogic.endSum(String) ergänzt
[demos/kafka/training] / src / test / java / de / juplo / kafka / SumBusinessLogicTest.java
index e65ee83..ca8716e 100644 (file)
@@ -2,6 +2,14 @@ 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.*;
 
@@ -10,7 +18,7 @@ public class SumBusinessLogicTest
 {
   @Test
   @DisplayName("A new sum can be started, if it does not exist")
-  public void testCanStartSumIfNotExists()
+  public void testStartSumPossibleIfNotExists()
   {
     SumBusinessLogic sumBusinessLogic = new SumBusinessLogic();
     assertThatNoException().isThrownBy(() -> sumBusinessLogic.startSum("foo"));
@@ -27,7 +35,7 @@ public class SumBusinessLogicTest
 
   @Test
   @DisplayName("An empty Optional should be returned, for a non-existing sum")
-  public void testEmptyOptionalForNonExistingSum()
+  public void testGetSumReturnsEmptyOptionalForNonExistingSum()
   {
     SumBusinessLogic sumBusinessLogic = new SumBusinessLogic();
     assertThat(sumBusinessLogic.getSum("foo")).isEmpty();
@@ -35,7 +43,7 @@ public class SumBusinessLogicTest
 
   @Test
   @DisplayName("A non-empty Optional should be returned, for an existing sum")
-  public void testNonEmptyOptionalForExistingSum()
+  public void testGetSumReturnsNonEmptyOptionalForExistingSum()
   {
     SumBusinessLogic sumBusinessLogic = new SumBusinessLogic();
     sumBusinessLogic.startSum("foo");
@@ -44,13 +52,23 @@ public class SumBusinessLogicTest
 
   @Test
   @DisplayName("A sum can be ended, if it does exist")
-  public void testCanEndIfSumExists()
+  public void testEndSumPossibleIfSumExists()
   {
     SumBusinessLogic sumBusinessLogic = new SumBusinessLogic();
     sumBusinessLogic.startSum("foo");
     assertThatNoException().isThrownBy(() -> sumBusinessLogic.endSum("foo"));
   }
 
+  @Test
+  @DisplayName("An existing sum is removed, if ended")
+  public void testEndSumRemovesSumIfSumExists()
+  {
+    SumBusinessLogic sumBusinessLogic = new SumBusinessLogic();
+    sumBusinessLogic.startSum("foo");
+    sumBusinessLogic.endSum("foo");
+    assertThat(sumBusinessLogic.getSum("foo")).isEmpty();
+  }
+
   @Test
   @DisplayName("An existing Sum returns a non-null value, if ended")
   public void testEndSumReturnsNonNullValueIfSumExists()
@@ -76,4 +94,59 @@ public class SumBusinessLogicTest
     SumBusinessLogic sumBusinessLogic = new SumBusinessLogic();
     assertThatIllegalStateException().isThrownBy(() -> sumBusinessLogic.endSum("foo"));
   }
+
+  @Test
+  @DisplayName("Adding to a non-existent sum causes an IllegalStateException")
+  public void testAddToSumCausesExceptionIfNotExists()
+  {
+    SumBusinessLogic sumBusinessLogic = new SumBusinessLogic();
+    assertThatIllegalStateException().isThrownBy(() -> sumBusinessLogic.addToSum("foo", 1));
+  }
+
+  @Test
+  @DisplayName("Adding a null-value to an existing sum causes an IllegalArgumentException")
+  public void testAddSumWithNullValueToExistingSumCausesException()
+  {
+    SumBusinessLogic sumBusinessLogic = new SumBusinessLogic();
+    sumBusinessLogic.startSum("foo");
+    assertThatIllegalArgumentException().isThrownBy(() -> sumBusinessLogic.addToSum("foo", null));
+  }
+
+  @ParameterizedTest(name = "{index}: Adding {0}")
+  @DisplayName("Adding a non-positive value to an existing sum causes an IllegalArgumentException")
+  @ValueSource(ints = { 0, -1, -6, -66, Integer.MIN_VALUE })
+  public void testAddSumWithNonPositiveValueToExistingSumCausesException(int value)
+  {
+    SumBusinessLogic sumBusinessLogic = new SumBusinessLogic();
+    sumBusinessLogic.startSum("foo");
+    assertThatIllegalArgumentException().isThrownBy(() -> sumBusinessLogic.addToSum("foo", value));
+  }
+
+  @Test
+  @DisplayName("Can add a positive value to an existing sum")
+  public void testAddSumWithPositiveValuePossibleIfSumExists()
+  {
+    SumBusinessLogic sumBusinessLogic = new SumBusinessLogic();
+    sumBusinessLogic.startSum("foo");
+    assertThatIllegalArgumentException().isThrownBy(() -> sumBusinessLogic.addToSum("foo", -1));
+  }
+
+  @ParameterizedTest(name = "{index}: Summing up {0}")
+  @DisplayName("Adds up numbers correctly")
+  @MethodSource("numbersProvider")
+  public void testAddSumAddsUpNumbersCorrectlyIfSumExists(int... numbers)
+  {
+    long expectedResult = Arrays.stream(numbers).sum();
+    SumBusinessLogic sumBusinessLogic = new SumBusinessLogic();
+    sumBusinessLogic.startSum("foo");
+    Arrays.stream(numbers).forEach(number -> sumBusinessLogic.addToSum("foo", number));
+    assertThat(sumBusinessLogic.endSum("foo")).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()));
+  }
 }