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();
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 }