From a5599d80fc8396c75b87df60f9d08e58066b95e8 Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Fri, 9 May 2025 21:04:18 +0200 Subject: [PATCH] test: Added some tests --- .idea/misc.xml | 2 +- pom.xml | 7 ++ src/main/java/cz/jull/Game.java | 37 +++++--- src/main/java/cz/jull/Main.java | 86 +++++++++++++++++-- .../NotSufficientsCoinsException.java | 7 ++ src/main/java/cz/jull/market/Market.java | 7 +- .../java/cz/jull/NotSufficientCoinsTest.java | 14 +++ 7 files changed, 143 insertions(+), 17 deletions(-) create mode 100644 src/main/java/cz/jull/exceptions/NotSufficientsCoinsException.java create mode 100644 src/test/java/cz/jull/NotSufficientCoinsTest.java diff --git a/.idea/misc.xml b/.idea/misc.xml index f88aef9..eda147d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/pom.xml b/pom.xml index b4cd863..3bb56f6 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,13 @@ 1.18.38 provided + + + org.junit.jupiter + junit-jupiter-api + 5.8.2 + test + \ No newline at end of file diff --git a/src/main/java/cz/jull/Game.java b/src/main/java/cz/jull/Game.java index 84753e5..3fd7c9d 100644 --- a/src/main/java/cz/jull/Game.java +++ b/src/main/java/cz/jull/Game.java @@ -49,11 +49,18 @@ public class Game { public void build(Item item) { if (!player.getInventory().contains(item)) { - System.out.println(" "); // TODO + System.out.println(" never "); // TODO return; } if (item.canBuild(this)) { + if (List.of(Item.WHEAT_SEEDS, Item.HOPS_SEEDS, Item.GRAPEVINE_SEEDS, Item.WHEAT_FARMLAND, Item.HOPS_FARMLAND, Item.VINEYARD).contains(item)) { + for (int i = 0; i < waterType.getFarmlandAndVineyardCount() ; i++) { + buildings.add(item); + player.getInventory().remove(item); + } + return; + } buildings.add(item); player.getInventory().remove(item); } @@ -75,18 +82,24 @@ public class Game { public void harvest(Item item) { switch (item) { case WHEAT_FARMLAND -> { - buildings.remove(Item.WHEAT_SEEDS); - player.getInventory().add(Item.WHEAT); + for (int i = 0; i < waterType.getFarmlandAndVineyardCount() ; i++) { + buildings.remove(Item.WHEAT_SEEDS); + player.getInventory().add(Item.WHEAT); + } } case HOPS_FARMLAND -> { - buildings.remove(Item.HOPS_SEEDS); - player.getInventory().add(Item.HOPS); + for (int i = 0; i < waterType.getFarmlandAndVineyardCount() ; i++) { + buildings.remove(Item.HOPS_SEEDS); + player.getInventory().add(Item.HOPS); + } } case VINEYARD -> { - buildings.remove(Item.GRAPEVINE_SEEDS); - player.getInventory().add(Item.GRAPEVINE); + for (int i = 0; i < waterType.getFarmlandAndVineyardCount() ; i++) { + buildings.remove(Item.GRAPEVINE_SEEDS); + player.getInventory().add(Item.GRAPEVINE); + } } } } @@ -102,24 +115,28 @@ public class Game { long coalFactoryProducedMoney = 0; long cheeseFactoryProducedMoney = 0; + if (!buildings.contains(item)) { + System.out.println(" cant produce"); //TODO + return; + } switch (item) { case BAKERY -> { long wheatSum = player.getInventory().stream().filter(item1 -> item1 == Item.WHEAT).count(); - player.getInventory().remove(Item.WHEAT); + player.getInventory().removeIf(i -> i == Item.WHEAT); bakeryProducedMoney = (wheatSum * item.getPrice()/2); player.setCoins(player.getCoins() + bakeryProducedMoney); } case PUB -> { long hopsSum = player.getInventory().stream().filter(item1 -> item1 == Item.HOPS).count(); - player.getInventory().remove(Item.HOPS); + player.getInventory().removeIf(i -> i == Item.HOPS); pubProducedMoney = (hopsSum * item.getPrice()/2); player.setCoins(player.getCoins() + pubProducedMoney); } case WINERY -> { long grapevineSum = player.getInventory().stream().filter(item1 -> item1 == Item.GRAPEVINE).count(); - player.getInventory().remove(Item.GRAPEVINE); + player.getInventory().removeIf(i -> i == Item.GRAPEVINE); wineryProducedMoney = (grapevineSum * item.getPrice()/2); player.setCoins(player.getCoins() + wineryProducedMoney); } diff --git a/src/main/java/cz/jull/Main.java b/src/main/java/cz/jull/Main.java index e468001..989f9d3 100644 --- a/src/main/java/cz/jull/Main.java +++ b/src/main/java/cz/jull/Main.java @@ -6,7 +6,8 @@ public class Main { public static void main(String[] args) { Game game = new Game(); game.generateStats(); - System.out.println(game.getPlayer().getCoins()); + System.out.println("coins: " + game.getPlayer().getCoins()); + System.out.println(); try { game.getMarket().buyItem(game, Item.CHURCH); @@ -14,9 +15,33 @@ public class Main { } catch (ItemNotAvailableException e) { throw new RuntimeException(e); } - System.out.println(game.getPlayer().getCoins()); + System.out.println("coins: " + game.getPlayer().getCoins()); + System.out.println("inventory: " + game.getPlayer().getInventory()); + System.out.println(); - System.out.println(game.getPlayer().getInventory()); + game.build(Item.CHURCH); + + System.out.println("coins: " + game.getPlayer().getCoins()); + System.out.println("inventory: " + game.getPlayer().getInventory()); + System.out.println("buildings: " + game.getBuildings()); + System.out.println(); + + try { + game.getMarket().buyItem(game, Item.VILLAGER_HOUSE); + + } catch (ItemNotAvailableException e) { + throw new RuntimeException(e); + } + System.out.println("coins: " + game.getPlayer().getCoins()); + System.out.println("inventory: " + game.getPlayer().getInventory()); + System.out.println(); + + game.build(Item.VILLAGER_HOUSE); + + System.out.println("coins: " + game.getPlayer().getCoins()); + System.out.println("inventory: " + game.getPlayer().getInventory()); + System.out.println("buildings: " + game.getBuildings()); + System.out.println(); try { game.getMarket().buyItem(game, Item.WHEAT_FARMLAND); @@ -24,8 +49,59 @@ public class Main { } catch (ItemNotAvailableException e) { throw new RuntimeException(e); } - System.out.println(game.getPlayer().getInventory()); - System.out.println(game.getPlayer().getCoins()); + System.out.println("coins: " + game.getPlayer().getCoins()); + System.out.println("inventory: " + game.getPlayer().getInventory()); + System.out.println(); + + game.build(Item.WHEAT_FARMLAND); + + System.out.println("coins: " + game.getPlayer().getCoins()); + System.out.println("inventory: " + game.getPlayer().getInventory()); + System.out.println("buildings: " + game.getBuildings()); + System.out.println(); + + try { + game.getMarket().buyItem(game, Item.WHEAT_SEEDS); + + } catch (ItemNotAvailableException e) { + throw new RuntimeException(e); + } + System.out.println("coins: " + game.getPlayer().getCoins()); + System.out.println("inventory: " + game.getPlayer().getInventory()); + System.out.println(); + + game.build(Item.WHEAT_SEEDS); + + System.out.println("coins: " + game.getPlayer().getCoins()); + System.out.println("inventory: " + game.getPlayer().getInventory()); + System.out.println("buildings: " + game.getBuildings()); + System.out.println(); + + game.harvest(Item.WHEAT_FARMLAND); + + System.out.println("coins: " + game.getPlayer().getCoins()); + System.out.println("inventory: " + game.getPlayer().getInventory()); + System.out.println("buildings: " + game.getBuildings()); + System.out.println(); + + try { + game.getMarket().buyItem(game, Item.BAKERY); + } catch (ItemNotAvailableException e) { + System.out.println(" cant buy bakery"); + } + + System.out.println("coins: " + game.getPlayer().getCoins()); + System.out.println("inventory: " + game.getPlayer().getInventory()); + System.out.println("buildings: " + game.getBuildings()); + System.out.println(); + + game.produce(Item.BAKERY); + + System.out.println("coins: " + game.getPlayer().getCoins()); + System.out.println("inventory: " + game.getPlayer().getInventory()); + System.out.println("buildings: " + game.getBuildings()); + System.out.println(); + } } \ No newline at end of file diff --git a/src/main/java/cz/jull/exceptions/NotSufficientsCoinsException.java b/src/main/java/cz/jull/exceptions/NotSufficientsCoinsException.java new file mode 100644 index 0000000..9c21dee --- /dev/null +++ b/src/main/java/cz/jull/exceptions/NotSufficientsCoinsException.java @@ -0,0 +1,7 @@ +package cz.jull.exceptions; + +public class NotSufficientsCoinsException extends RuntimeException { + public NotSufficientsCoinsException(String message) { + super(message); + } +} diff --git a/src/main/java/cz/jull/market/Market.java b/src/main/java/cz/jull/market/Market.java index 1b5aca1..8882b3b 100644 --- a/src/main/java/cz/jull/market/Market.java +++ b/src/main/java/cz/jull/market/Market.java @@ -4,6 +4,7 @@ import cz.jull.Game; import cz.jull.Item; import cz.jull.Player; import cz.jull.exceptions.ItemNotAvailableException; +import cz.jull.exceptions.NotSufficientsCoinsException; import cz.jull.surroundings.PathType; import cz.jull.surroundings.SoilType; import cz.jull.surroundings.WaterType; @@ -22,7 +23,11 @@ public class Market { player.getInventory().remove(item); } - public void buyItem(Game game, Item item) throws ItemNotAvailableException { + public void buyItem(Game game, Item item) throws ItemNotAvailableException, NotSufficientsCoinsException { + if (game.getPlayer().getCoins() < item.getPrice()) { + throw new NotSufficientsCoinsException("Not enough coins"); + } + if (!item.getCanBeBoughtFunction().apply(game)) { System.out.println(" "); //TODO return; diff --git a/src/test/java/cz/jull/NotSufficientCoinsTest.java b/src/test/java/cz/jull/NotSufficientCoinsTest.java new file mode 100644 index 0000000..d497f9c --- /dev/null +++ b/src/test/java/cz/jull/NotSufficientCoinsTest.java @@ -0,0 +1,14 @@ +package cz.jull; + +import cz.jull.exceptions.NotSufficientsCoinsException; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + +public class NotSufficientCoinsTest { + @Test + public void notSufficientCoins() { + Game game = new Game(); + game.getPlayer().setCoins(1); + assertThrows(NotSufficientsCoinsException.class, () -> game.getMarket().buyItem(game, Item.AXE)); + } +}