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.assertDoesNotThrow;
10  
11  class KaiserEngineTest {
12  
13      private KaiserEngine engine;
14  
15      @BeforeEach
16      void createNewEngineUnderTest() {
17          this.engine = new KaiserEngine();
18      }
19  
20      @Test
21      void getAreaPerCapita() {
22          assertThat(engine.getAreaPerCapita()).isEqualTo(new BigDecimal("11"));
23      }
24  
25      @Test
26      void famineReducesPopulationDependingOnScaleFactorBeingBelowZero() {
27          engine.setQ(new BigDecimal("-0.5"));
28  
29          engine.processFamine();
30  
31          assertThat(engine.getPopulation()).isEqualTo(new BigDecimal("48"));
32          assertThat(engine.getQ()).isNotEqualByComparingTo(BigDecimal.ONE);
33      }
34  
35      @Test
36      void noPopulationReductionIfScaleFactorIsTooBig() {
37          engine.setQ(new BigDecimal("12.34"));
38  
39          engine.processFamine();
40  
41          assertThat(engine.getPopulation()).isEqualTo(new BigDecimal("95"));
42          assertThat(engine.getQ()).isNotEqualByComparingTo(BigDecimal.ONE);
43      }
44  
45      @Test
46      void buyLandIgnoresNegativeInputAndChangesNothing() {
47          BigDecimal costB4 = engine.getCost();
48          BigDecimal areaB4 = engine.getArea();
49          BigDecimal supplyB4 = engine.getSupplies();
50  
51          engine.buyLand(-123L);
52  
53          assertThat(engine.getArea()).isEqualTo(areaB4);
54          assertThat(engine.getSupplies()).isEqualTo(supplyB4);
55          assertThat(engine.getCost()).isEqualTo(costB4);
56      }
57  
58      @Test
59      void calculateCostChangesPrice() {
60          BigDecimal costB4 = engine.getCost();
61  
62          engine.calculateNewPrice();
63  
64          assertThat(engine.getCost()).isNotEqualTo(costB4);
65      }
66  
67      @Test
68      void verifyThingsHappenOnConstructorDefaultsUponFirstRoundRestart() {
69          engine.startNewRound();
70  
71          assertThat(engine.getPopulation()).isEqualTo("100");
72          assertThat(engine.getCost()).isPositive(); // randomNumber
73          assertThat(engine.getArea()).isEqualTo("1000");
74          assertThat(engine.getExternalDamage()).isEqualTo("200");
75          assertThat(engine.getZYear()).isEqualTo(1);
76          assertThat(engine.getYield()).isEqualTo(engine.getCost().add(BigDecimal.valueOf(17)));
77      }
78  
79      @Test
80      void verifyPostRoundActionsDoNotProduceErrors() {
81          assertDoesNotThrow(() -> engine.finishRoundAfterActions());
82      }
83  }