View Javadoc
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  }