Die App führt die Berechnung aus
[demos/kafka/training] / src / test / java / de / juplo / kafka / AdderBusinessLogicTest.java
1 package de.juplo.kafka;
2
3 import org.junit.jupiter.api.DisplayName;
4 import org.junit.jupiter.api.Test;
5 import org.junit.jupiter.params.ParameterizedTest;
6 import org.junit.jupiter.params.provider.Arguments;
7 import org.junit.jupiter.params.provider.MethodSource;
8 import org.junit.jupiter.params.provider.ValueSource;
9
10 import java.util.Arrays;
11 import java.util.stream.IntStream;
12 import java.util.stream.Stream;
13
14 import static org.assertj.core.api.Assertions.*;
15
16
17 public class AdderBusinessLogicTest
18 {
19   @Test
20   @DisplayName("An empty Optional should be returned, for a non-existing sum")
21   public void testGetSumReturnsEmptyOptionalForNonExistingSum()
22   {
23     AdderBusinessLogic adder = new AdderBusinessLogic();
24     assertThat(adder.getSum("foo")).isEmpty();
25   }
26
27   @Test
28   @DisplayName("A non-empty Optional should be returned, for an existing sum")
29   public void testGetSumReturnsNonEmptyOptionalForExistingSum()
30   {
31     AdderBusinessLogic adder = new AdderBusinessLogic();
32     adder.addToSum("foo", 6);
33     assertThat(adder.getSum("foo")).isNotEmpty();
34   }
35
36   @Test
37   @DisplayName("A sum can be calculated, if it does exist")
38   public void testCalculatePossibleIfSumExists()
39   {
40     AdderBusinessLogic adder = new AdderBusinessLogic();
41     adder.addToSum("foo", 6);
42     assertThatNoException().isThrownBy(() -> adder.calculate("foo"));
43   }
44
45   @Test
46   @DisplayName("An existing sum is removed, if ended")
47   public void testCalculateRemovesSumIfSumExists()
48   {
49     AdderBusinessLogic adder = new AdderBusinessLogic();
50     adder.addToSum("foo", 6);
51     adder.calculate("foo");
52     assertThat(adder.getSum("foo")).isEmpty();
53   }
54
55   @Test
56   @DisplayName("An existing sum returns a non-null value, if calculated")
57   public void testCalculateReturnsNonNullValueIfSumExists()
58   {
59     AdderBusinessLogic adder = new AdderBusinessLogic();
60     adder.addToSum("foo", 6);
61     assertThat(adder.calculate("foo")).isNotNull();
62   }
63
64   @Test
65   @DisplayName("Ending a non-existing sum, causes an IllegalStateException")
66   public void testCalculateCausesExceptionIfNotExists()
67   {
68     AdderBusinessLogic adder = new AdderBusinessLogic();
69     assertThatIllegalStateException().isThrownBy(() -> adder.calculate("foo"));
70   }
71
72   @Test
73   @DisplayName("Adding a null-value to a sum causes an IllegalArgumentException")
74   public void testAddToSumWithNullValueCausesException()
75   {
76     AdderBusinessLogic adder = new AdderBusinessLogic();
77     assertThatIllegalArgumentException().isThrownBy(() -> adder.addToSum("foo", null));
78   }
79
80   @ParameterizedTest(name = "{index}: Adding {0}")
81   @DisplayName("Adding a non-positive value to a sum causes an IllegalArgumentException")
82   @ValueSource(ints = { 0, -1, -6, -66, Integer.MIN_VALUE })
83   public void testAddToSumWithNonPositiveValueCausesException(int value)
84   {
85     AdderBusinessLogic adder = new AdderBusinessLogic();
86     assertThatIllegalArgumentException().isThrownBy(() -> adder.addToSum("foo", value));
87   }
88
89   @ParameterizedTest(name = "{index}: Adding {0}")
90   @DisplayName("Can add a positive value to a sum")
91   @ValueSource(ints = { 1, 3, 6, 66, 7, 9 })
92   public void testAddToSumWithPositiveValuePossible(int value)
93   {
94     AdderBusinessLogic adder = new AdderBusinessLogic();
95     assertThatNoException().isThrownBy(() -> adder.addToSum("foo", value));
96   }
97
98   @ParameterizedTest(name = "{index}: Summing up {0}")
99   @DisplayName("Adds up numbers correctly")
100   @MethodSource("numbersProvider")
101   public void testAddToSumAddsUpNumbersCorrectlyIfSumExists(int... numbers)
102   {
103     long expectedResult = Arrays.stream(numbers).sum();
104     AdderBusinessLogic adder = new AdderBusinessLogic();
105     Arrays.stream(numbers).forEach(number -> adder.addToSum("foo", number));
106     AdderResult result = adder.calculate("foo");
107     assertThat(result.number).isEqualTo(numbers[numbers.length-1]);
108     assertThat(result.sum).isEqualTo(expectedResult);
109   }
110
111   static Stream<Arguments> numbersProvider() {
112     return Stream.of(
113         Arguments.of((Object) IntStream.rangeClosed(1,9).toArray()),
114         Arguments.of((Object) IntStream.rangeClosed(1,19).toArray()),
115         Arguments.of((Object) IntStream.rangeClosed(1,66).toArray()));
116   }
117 }