1 package de.aikiit.game.kaiser;
2
3 import org.junit.jupiter.api.BeforeEach;
4 import org.junit.jupiter.api.Test;
5
6 import java.math.BigDecimal;
7
8 import static org.assertj.core.api.Assertions.assertThat;
9 import static org.junit.jupiter.api.Assertions.assertThrows;
10
11 public class KaiserEngineFeedToPopulationTest {
12 private KaiserEngine engine;
13
14 @BeforeEach
15 void createNewEngineUnderTest() {
16 this.engine = new KaiserEngine();
17 }
18
19 @Test
20 void feedToPopulationDoesNothingIfZeroIsGiven() {
21 BigDecimal costB4 = engine.getCost();
22 BigDecimal supplyB4 = engine.getSupplies();
23
24 engine.feedToPopulation(0L);
25
26 assertThat(engine.getSupplies()).isEqualTo(supplyB4);
27 assertThat(engine.getCost()).isEqualTo(costB4);
28 }
29
30 @Test
31 void feedToPopulationDoesNothingIfNegativeValueIsGiven() {
32 BigDecimal costB4 = engine.getCost();
33 BigDecimal areaB4 = engine.getArea();
34 BigDecimal supplyB4 = engine.getSupplies();
35
36 engine.feedToPopulation(-1234L);
37
38 assertThat(engine.getArea()).isEqualTo(areaB4);
39 assertThat(engine.getSupplies()).isEqualTo(supplyB4);
40 assertThat(engine.getCost()).isEqualTo(costB4);
41 }
42
43 @Test
44 void feedToPopulationWithNotEnoughSupplyAsArgumentInducesNoChanges() {
45 BigDecimal costB4 = engine.getCost();
46 BigDecimal supplyB4 = engine.getSupplies();
47
48 Exception exception = assertThrows(IllegalArgumentException.class, () -> engine.feedToPopulation(Long.MAX_VALUE));
49
50 String expectedMessage = "Not Enough in Stock";
51 assertThat(exception.getMessage()).contains(expectedMessage);
52 assertThat(engine.getSupplies()).isEqualTo(supplyB4);
53 assertThat(engine.getCost()).isEqualTo(costB4);
54 }
55
56 @Test
57 void feedToPopulationRegularUseCaseAndSetPriceToOneAfterwards() {
58 BigDecimal supplyB4 = engine.getSupplies();
59 engine.feedToPopulation(4L);
60
61 assertThat(engine.getSupplies()).isEqualTo(supplyB4.subtract(BigDecimal.valueOf(4L)));
62 assertThat(engine.getCost()).isEqualTo(BigDecimal.ONE);
63 }
64
65
66 }