1 package de.juplo.kafka;
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;
10 import java.util.Arrays;
11 import java.util.stream.IntStream;
12 import java.util.stream.Stream;
14 import static org.assertj.core.api.Assertions.*;
17 public class AdderBusinessLogicTest
20 @DisplayName("An empty Optional should be returned, for a non-existing sum")
21 public void testGetSumReturnsEmptyOptionalForNonExistingSum()
23 AdderBusinessLogic adder = new AdderBusinessLogic();
24 assertThat(adder.getSum("foo")).isEmpty();
28 @DisplayName("A non-empty Optional should be returned, for an existing sum")
29 public void testGetSumReturnsNonEmptyOptionalForExistingSum()
31 AdderBusinessLogic adder = new AdderBusinessLogic();
32 adder.addToSum("foo", 6);
33 assertThat(adder.getSum("foo")).isNotEmpty();
37 @DisplayName("A sum can be calculated, if it does exist")
38 public void testCalculatePossibleIfSumExists()
40 AdderBusinessLogic adder = new AdderBusinessLogic();
41 adder.addToSum("foo", 6);
42 assertThatNoException().isThrownBy(() -> adder.calculate("foo"));
46 @DisplayName("An existing sum is removed, if ended")
47 public void testCalculateRemovesSumIfSumExists()
49 AdderBusinessLogic adder = new AdderBusinessLogic();
50 adder.addToSum("foo", 6);
51 adder.calculate("foo");
52 assertThat(adder.getSum("foo")).isEmpty();
56 @DisplayName("An existing sum returns a non-null value, if calculated")
57 public void testCalculateReturnsNonNullValueIfSumExists()
59 AdderBusinessLogic adder = new AdderBusinessLogic();
60 adder.addToSum("foo", 6);
61 assertThat(adder.calculate("foo")).isNotNull();
65 @DisplayName("Ending a non-existing sum, causes an IllegalStateException")
66 public void testCalculateCausesExceptionIfNotExists()
68 AdderBusinessLogic adder = new AdderBusinessLogic();
69 assertThatIllegalStateException().isThrownBy(() -> adder.calculate("foo"));
73 @DisplayName("Adding a null-value to a sum causes an IllegalArgumentException")
74 public void testAddToSumWithNullValueCausesException()
76 AdderBusinessLogic adder = new AdderBusinessLogic();
77 assertThatIllegalArgumentException().isThrownBy(() -> adder.addToSum("foo", null));
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)
85 AdderBusinessLogic adder = new AdderBusinessLogic();
86 assertThatIllegalArgumentException().isThrownBy(() -> adder.addToSum("foo", value));
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)
94 AdderBusinessLogic adder = new AdderBusinessLogic();
95 assertThatNoException().isThrownBy(() -> adder.addToSum("foo", value));
98 @ParameterizedTest(name = "{index}: Summing up {0}")
99 @DisplayName("Adds up numbers correctly")
100 @MethodSource("numbersProvider")
101 public void testAddToSumAddsUpNumbersCorrectlyIfSumExists(int... numbers)
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);
111 static Stream<Arguments> numbersProvider() {
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()));