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 KaiserEngineSellLandTest {
12 private KaiserEngine engine;
13
14 @BeforeEach
15 void createNewEngineUnderTest() {
16 this.engine = new KaiserEngine();
17 }
18
19 @Test
20 void sellLandDoesNothingIfZeroIsGiven() {
21 BigDecimal costB4 = engine.getCost();
22 BigDecimal areaB4 = engine.getArea();
23 BigDecimal supplyB4 = engine.getSupplies();
24
25 engine.sellLand(0L);
26
27 assertThat(engine.getArea()).isEqualTo(areaB4);
28 assertThat(engine.getSupplies()).isEqualTo(supplyB4);
29 assertThat(engine.getCost()).isEqualTo(costB4);
30 }
31
32 @Test
33 void sellLandDoesNothingIfNegativeValueIsGiven() {
34 BigDecimal costB4 = engine.getCost();
35 BigDecimal areaB4 = engine.getArea();
36 BigDecimal supplyB4 = engine.getSupplies();
37
38 engine.sellLand(-1234L);
39
40 assertThat(engine.getArea()).isEqualTo(areaB4);
41 assertThat(engine.getSupplies()).isEqualTo(supplyB4);
42 assertThat(engine.getCost()).isEqualTo(costB4);
43 }
44 @Test
45 void sellLandWithNotEnoughLandAsArgumentInducesNoChanges() {
46 BigDecimal costB4 = engine.getCost();
47 BigDecimal areaB4 = engine.getArea();
48 BigDecimal supplyB4 = engine.getSupplies();
49
50 Exception exception = assertThrows(IllegalArgumentException.class, () -> engine.sellLand(Long.MAX_VALUE));
51
52 String expectedMessage = "Not Enough Land";
53 assertThat(exception.getMessage()).contains(expectedMessage);
54 assertThat(engine.getArea()).isEqualTo(areaB4);
55 assertThat(engine.getSupplies()).isEqualTo(supplyB4);
56 assertThat(engine.getCost()).isEqualTo(costB4);
57 }
58
59 @Test
60 void sellLandRegularUseCaseAndSetPriceToZeroAfterwards() {
61 BigDecimal areaB4 = engine.getArea();
62 BigDecimal supplyB4 = engine.getSupplies();
63 engine.sellLand(4L);
64
65 assertThat(engine.getArea()).isEqualTo(areaB4.subtract(BigDecimal.valueOf(4L)));
66 assertThat(engine.getSupplies()).isEqualTo(supplyB4.add(engine.getYield().multiply(BigDecimal.valueOf(4L))));
67 assertThat(engine.getCost()).isEqualTo(BigDecimal.ZERO);
68 }
69 }