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 KaiserEngineBuyLandTest {
12 private KaiserEngine engine;
13
14 @BeforeEach
15 void createNewEngineUnderTest() {
16 this.engine = new KaiserEngine();
17 }
18
19 @Test
20 void buyLandDoesNothingIfZeroIsGiven() {
21 BigDecimal costB4 = engine.getCost();
22 BigDecimal areaB4 = engine.getArea();
23 BigDecimal supplyB4 = engine.getSupplies();
24
25 engine.buyLand(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 buyLandDoesNothingIfNegativeInputIsGiven() {
34 BigDecimal costB4 = engine.getCost();
35 BigDecimal areaB4 = engine.getArea();
36 BigDecimal supplyB4 = engine.getSupplies();
37
38 engine.buyLand(-3456L);
39
40 assertThat(engine.getArea()).isEqualTo(areaB4);
41 assertThat(engine.getSupplies()).isEqualTo(supplyB4);
42 assertThat(engine.getCost()).isEqualTo(costB4);
43 }
44
45 @Test
46 void buyLandWithMoreThanCashAsArgumentInducesNoChanges() {
47 BigDecimal costB4 = engine.getCost();
48 BigDecimal areaB4 = engine.getArea();
49 BigDecimal supplyB4 = engine.getSupplies();
50
51 Exception exception = assertThrows(IllegalArgumentException.class, () -> engine.buyLand(Long.MAX_VALUE));
52
53 String expectedMessage = "Not Enough Supplies";
54 assertThat(exception.getMessage()).contains(expectedMessage);
55 assertThat(engine.getArea()).isEqualTo(areaB4);
56 assertThat(engine.getSupplies()).isEqualTo(supplyB4);
57 assertThat(engine.getCost()).isEqualTo(costB4);
58 }
59
60 @Test
61 void buyLandRegularUseCaseAndSetPriceToZeroAfterwards() {
62 BigDecimal areaB4 = engine.getArea();
63 BigDecimal supplyB4 = engine.getSupplies();
64 engine.buyLand(4L);
65
66 assertThat(engine.getArea()).isEqualTo(areaB4.add(BigDecimal.valueOf(4L)));
67 assertThat(engine.getSupplies()).isEqualTo(supplyB4.subtract(engine.getYield().multiply(BigDecimal.valueOf(4L))));
68 assertThat(engine.getCost()).isEqualTo(BigDecimal.ZERO);
69 }
70
71 }