From c91cbb303119608c617884cef7c530b671c05a5f Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Fri, 1 May 2026 18:44:40 +0200 Subject: [PATCH 1/4] Changed:GameTest.hasDrawable()-> now only on character --- src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java b/src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java index 959dd13..73d227e 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/GameTest.java @@ -141,13 +141,11 @@ class GameTest { } private boolean hasDrawableLower(Game game) { - return firstNonEventIndexOrMinusOne(game.getLowerListTribeCards()) != -1 - || !game.getLowerListBuilding().isEmpty(); + return firstNonEventIndexOrMinusOne(game.getLowerListTribeCards()) != -1; } private boolean hasDrawableUpper(Game game) { - return firstNonEventIndexOrMinusOne(game.getUpperListTribeCards()) != -1 - || !game.getUpperListBuilding().isEmpty(); + return firstNonEventIndexOrMinusOne(game.getUpperListTribeCards()) != -1; } @Test From 42a6644f8efa6e12da46893c2c2cd22cd1a787b3 Mon Sep 17 00:00:00 2001 From: GabrieleRadice <265572328+GabrieleRadice@users.noreply.github.com> Date: Sat, 2 May 2026 17:21:57 +0200 Subject: [PATCH 2/4] Refactor. --- .../Building/Effects/Building11Test.java | 13 +++---- .../Cards/Building/Effects/Building1Test.java | 36 ++++++++++++------- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building11Test.java b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building11Test.java index a3d907a..89359e5 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building11Test.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building11Test.java @@ -112,6 +112,7 @@ class Building11Test { @Test @DisplayName("toString") void testToString(){ + int ID = 11; int era = 1; int price = 1; int prestigeValue = 3; @@ -119,26 +120,26 @@ class Building11Test { int pm = 5; Building11 b11 = new Building11(era, price, prestigeValue, ct, pm); - assertEquals("⎕: " + "ID:11" + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0) + " MP: " + pm, b11.toString()); + assertEquals("⎕: " + "ID:" + ID + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0) + " MP: " + pm, b11.toString()); ct = CharacterType.BUILDER; b11 = new Building11(era, price, prestigeValue, ct, pm); - assertEquals("⎕: " + "ID:11" + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0) + " MP: " + pm, b11.toString()); + assertEquals("⎕: " + "ID:" + ID + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0) + " MP: " + pm, b11.toString()); ct = CharacterType.GATHERER; b11 = new Building11(era, price, prestigeValue, ct, pm); - assertEquals("⎕: " + "ID:11" + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0) + " MP: " + pm, b11.toString()); + assertEquals("⎕: " + "ID:" + ID + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0) + " MP: " + pm, b11.toString()); ct = CharacterType.HUNTER; b11 = new Building11(era, price, prestigeValue, ct, pm); - assertEquals("⎕: " + "ID:11" + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0) + " MP: " + pm, b11.toString()); + assertEquals("⎕: " + "ID:" + ID + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0) + " MP: " + pm, b11.toString()); ct = CharacterType.INVENTOR; b11 = new Building11(era, price, prestigeValue, ct, pm); - assertEquals("⎕: " + "ID:11" + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0) + " MP: " + pm, b11.toString()); + assertEquals("⎕: " + "ID:" + ID + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0) + " MP: " + pm, b11.toString()); ct = CharacterType.SHAMAN; b11 = new Building11(era, price, prestigeValue, ct, pm); - assertEquals("⎕: " + "ID:11" + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0) + " MP: " + pm, b11.toString()); + assertEquals("⎕: " + "ID:" + ID + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0) + " MP: " + pm, b11.toString()); } } \ No newline at end of file diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building1Test.java b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building1Test.java index cfd9ef4..0019f12 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building1Test.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/Building/Effects/Building1Test.java @@ -70,22 +70,34 @@ class Building1Test { @Test @DisplayName("toString") void testToString(){ - Building1 b1 = new Building1(1,2,3, CharacterType.INVENTOR); - assertEquals("Era:1 Price:2 Prestige:3 Icon: INVENTOR", b1.toString()); + int ID = 1; + int era = 1; + int price = 1; + int prestigeValue = 3; + CharacterType ct = CharacterType.ARTIST; + int pm = 5; - b1 = new Building1(1,2,3, CharacterType.BUILDER); - assertEquals("Era:1 Price:2 Prestige:3 Icon: BUILDER", b1.toString()); + Building1 b1 = new Building1(era, price, prestigeValue, ct); + assertEquals("⎕: " + "ID:" + ID + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0), b1.toString()); - b1 = new Building1(1,2,3, CharacterType.GATHERER); - assertEquals("Era:1 Price:2 Prestige:3 Icon: GATHERER", b1.toString()); + ct = CharacterType.BUILDER; + b1 = new Building1(era, price, prestigeValue, ct); + assertEquals("⎕: " + "ID:" + ID + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0), b1.toString()); - b1 = new Building1(1,2,3, CharacterType.ARTIST); - assertEquals("Era:1 Price:2 Prestige:3 Icon: ARTIST", b1.toString()); + ct = CharacterType.GATHERER; + b1 = new Building1(era, price, prestigeValue, ct); + assertEquals("⎕: " + "ID:" + ID + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0), b1.toString()); - b1 = new Building1(1,2,3, CharacterType.SHAMAN); - assertEquals("Era:1 Price:2 Prestige:3 Icon: SHAMAN", b1.toString()); + ct = CharacterType.HUNTER; + b1 = new Building1(era, price, prestigeValue, ct); + assertEquals("⎕: " + "ID:" + ID + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0), b1.toString()); - b1 = new Building1(1,2,3, CharacterType.HUNTER); - assertEquals("Era:1 Price:2 Prestige:3 Icon: HUNTER", b1.toString()); + ct = CharacterType.INVENTOR; + b1 = new Building1(era, price, prestigeValue, ct); + assertEquals("⎕: " + "ID:" + ID + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0), b1.toString()); + + ct = CharacterType.SHAMAN; + b1 = new Building1(era, price, prestigeValue, ct); + assertEquals("⎕: " + "ID:" + ID + " $:" + price + " PV:" + prestigeValue + " Icon: " + ct.toString().charAt(0), b1.toString()); } } \ No newline at end of file From 32d1cca2ad91c58d51bb0bacb1b57cb1d75c1f58 Mon Sep 17 00:00:00 2001 From: GabrieleRadice <265572328+GabrieleRadice@users.noreply.github.com> Date: Sat, 2 May 2026 17:24:00 +0200 Subject: [PATCH 3/4] Fix: Fixed "buy" Method In BuildingCard.java And Relative Tests In BuildingCardTest.java; Now Correctly Handles Discounts Given By Builders. Fix: Fixed "toString" Method In BuildingCard.java And Relative Tests In BuildingCardTest.java. --- .../ingsw/gc14/Model/Cards/BuildingCard.java | 10 +- .../gc14/Model/Cards/BuildingCardTest.java | 155 +++++++++++++++++- 2 files changed, 162 insertions(+), 3 deletions(-) diff --git a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/BuildingCard.java b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/BuildingCard.java index 24e41a1..d6ab676 100644 --- a/src/main/java/it/polimi/ingsw/gc14/Model/Cards/BuildingCard.java +++ b/src/main/java/it/polimi/ingsw/gc14/Model/Cards/BuildingCard.java @@ -159,8 +159,16 @@ public class BuildingCard extends PlayableCard implements Cloneable , BuildingEf * @return {@code true} if the building card is successfully bought, * {@code false} otherwise. */ + // sum reduction value builder=> sconto public boolean buy(Player player) { - if( bought || !player.removeFood(getPrice())) + int discount = 0; + discount = player.builders.stream().mapToInt(x -> x.getReductionValue()).sum(); + + if(discount > this.price){ + discount = this.price; + } + + if(bought || !player.removeFood(this.price - discount)) return false; player.buildingCards.add(this); bought=true; diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/BuildingCardTest.java b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/BuildingCardTest.java index 0f713fa..c5fd426 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/BuildingCardTest.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/BuildingCardTest.java @@ -2,6 +2,7 @@ package it.polimi.ingsw.gc14.Model.Cards; import it.polimi.ingsw.gc14.Model.Cards.Building.EffectType; import it.polimi.ingsw.gc14.Model.Cards.Building.Effects.Building13; +import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters.Builder; import it.polimi.ingsw.gc14.Model.Player; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -149,12 +150,162 @@ class BuildingCardTest { assertFalse(bc0.buy(p2)); } + @Test + @DisplayName("Testing the buy method with discounts") + void testBuyDiscount() { + int food = 5; + int price = 5; + int RV = 1; + + Player p = new Player("test"); + p.addFood(food); + p.builders.add(new Builder(1, RV, 1)); + + + + //Testing that to pay == price - 1 + for(int ID = 3; ID < 13; ID++){ + if(ID == 4 || ID == 8 || ID == 10 || ID == 11){ + continue; + } + BuildingCard bc = new BuildingCard(ID, 1, price,1); + assertEquals(food, p.getFoodValue()); + assertTrue(bc.buy(p)); + + int discount = p.builders.stream().mapToInt(x -> x.getReductionValue()).sum(); + assertEquals(food - price + discount, p.getFoodValue()); + + p.removeFood(p.getFoodValue()); + p.addFood(food); + } + + //Testing that to pay == 0 + p.removeFood(p.getFoodValue()); + p.addFood(food); + p.builders.add(new Builder(1, RV, 1)); + p.builders.add(new Builder(1, RV, 1)); + p.builders.add(new Builder(1, RV, 1)); + p.builders.add(new Builder(1, RV, 1)); + + for(int ID = 3; ID < 13; ID++){ + if(ID == 4 || ID == 8 || ID == 10 || ID == 11){ + continue; + } + BuildingCard bc = new BuildingCard(ID, 1, price,1); + assertEquals(food, p.getFoodValue()); + assertTrue(bc.buy(p)); + + assertEquals(food, p.getFoodValue()); + + p.removeFood(p.getFoodValue()); + p.addFood(food); + } + + //Testing that to pay == 0; discount shouldn't go below 0 + p.removeFood(p.getFoodValue()); + p.addFood(food); + p.builders.add(new Builder(1, RV, 1)); + p.builders.add(new Builder(1, RV, 1)); + p.builders.add(new Builder(1, RV, 1)); + p.builders.add(new Builder(1, RV, 1)); + p.builders.add(new Builder(1, RV, 1)); + p.builders.add(new Builder(1, RV, 1)); + p.builders.add(new Builder(1, RV, 1)); + + for(int ID = 3; ID < 13; ID++){ + if(ID == 4 || ID == 8 || ID == 10 || ID == 11){ + continue; + } + BuildingCard bc = new BuildingCard(ID, 1, price,1); + assertEquals(food, p.getFoodValue()); + assertTrue(bc.buy(p)); + + assertEquals(food, p.getFoodValue()); + + p.removeFood(p.getFoodValue()); + p.addFood(food); + } + + //Testing that to pay == 0 if price < builder b * b.RV + food = 6; + price = 3; + RV = 4; + + Player p2 = new Player("test"); + p2.addFood(food); + p2.builders.add(new Builder(1, RV, 1)); + + for(int ID = 3; ID < 13; ID++){ + if(ID == 4 || ID == 8 || ID == 10 || ID == 11){ + continue; + } + BuildingCard bc = new BuildingCard(ID, 1, price,1); + assertEquals(food, p2.getFoodValue()); + assertTrue(bc.buy(p2)); + + int discount = p2.builders.stream().mapToInt(x -> x.getReductionValue()).sum(); + assertEquals(food, p2.getFoodValue()); + + p2.removeFood(p2.getFoodValue()); + p2.addFood(food); + } + + p2.removeFood(p2.getFoodValue()); + p2.addFood(food); + + //Testing discount with staggered values + price = 7; + + for(int ID = 3; ID < 13; ID++){ + if(ID == 4 || ID == 8 || ID == 10 || ID == 11){ + continue; + } + BuildingCard bc = new BuildingCard(ID, 1, price,1); + assertEquals(food, p2.getFoodValue()); + assertTrue(bc.buy(p2)); + + int discount = p2.builders.stream().mapToInt(x -> x.getReductionValue()).sum(); + assertEquals(food - price + discount, p2.getFoodValue()); + + p2.removeFood(p2.getFoodValue()); + p2.addFood(food); + } + + //Testing discount with staggered values; discount shouldn't go below 0 + p2.builders.add(new Builder(1, RV, 1)); + + for(int ID = 3; ID < 13; ID++){ + if(ID == 4 || ID == 8 || ID == 10 || ID == 11){ + continue; + } + BuildingCard bc = new BuildingCard(ID, 1, price,1); + assertEquals(food, p2.getFoodValue()); + assertTrue(bc.buy(p2)); + + assertEquals(food, p2.getFoodValue()); + + p2.removeFood(p2.getFoodValue()); + p2.addFood(food); + } + } + @Test @DisplayName("Testing toString method") void testToString() { - Building13 b0 = new Building13(1, 2,3); + int era = 2; + int price = 5; + int prestigeValue = 6; - assertEquals("Era:1 Price:2 Prestige:3", b0.toString()); + BuildingCard b0 = new BuildingCard(era, price, prestigeValue); + assertEquals("⎕:" + " ID:0" + " $:"+ b0.getPrice() + " PV:" + b0.getPrestigeValue(), b0.toString()); + + for(int ID = 3; ID < 13; ID++){ + if(ID == 4 || ID == 8 || ID == 10 || ID == 11){ + continue; + } + BuildingCard b = new BuildingCard(ID, era, price, prestigeValue); + assertEquals("⎕:" + " ID:" + ID + " $:"+ b.getPrice() + " PV:" + b.getPrestigeValue(), b.toString()); + } } @Test From be6267b46cf97d598ef140c773f52c45ff7dfe7b Mon Sep 17 00:00:00 2001 From: GabrieleRadice <265572328+GabrieleRadice@users.noreply.github.com> Date: Sat, 2 May 2026 17:35:07 +0200 Subject: [PATCH 4/4] Fix: Fixed "toString" Method In ArtistTest.java, BuilderTest.java, GathererTest.java. --- .../gc14/Model/Cards/TribeCards/Characters/ArtistTest.java | 2 +- .../gc14/Model/Cards/TribeCards/Characters/BuilderTest.java | 5 ++--- .../gc14/Model/Cards/TribeCards/Characters/GathererTest.java | 5 ++++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/ArtistTest.java b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/ArtistTest.java index a4c79b5..925cffb 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/ArtistTest.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/ArtistTest.java @@ -14,7 +14,7 @@ class ArtistTest { String s = a.toString(); assertNotNull(s); - assertTrue(s.contains(CharacterType.ARTIST.toString())); + assertTrue(s.contains("⎕:")); } @Test diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/BuilderTest.java b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/BuilderTest.java index afe9457..0ad64a9 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/BuilderTest.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/BuilderTest.java @@ -27,9 +27,8 @@ class BuilderTest { String s = b.toString(); assertNotNull(s); - assertTrue(s.contains(CharacterType.BUILDER.toString())); - assertTrue(s.contains("Reduction Value: 2")); - assertTrue(s.contains("Prestige Value: 3")); + assertFalse(s.contains(CharacterType.BUILDER.toString())); + assertEquals("⎕:" + " RV:" + b.getReductionValue() + " PV:" + b.getPrestigeValue(), s); } @Test diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/GathererTest.java b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/GathererTest.java index 96d3c83..10fbc3f 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/GathererTest.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/Cards/TribeCards/Characters/GathererTest.java @@ -13,8 +13,11 @@ class GathererTest { Gatherer g = new Gatherer(1); String s = g.toString(); + System.out.println(s); + assertNotNull(s); - assertTrue(s.contains(CharacterType.GATHERER.toString())); + assertFalse(s.contains(CharacterType.GATHERER.toString())); + assertTrue(s.contains("⎕:")); } @Test