diff --git a/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order2Test.java b/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order2Test.java index 0293699..c703b13 100644 --- a/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order2Test.java +++ b/src/test/java/it/polimi/ingsw/gc14/Model/Orders/Order2Test.java @@ -1,214 +1,158 @@ package it.polimi.ingsw.gc14.Model.Orders; +import it.polimi.ingsw.gc14.Model.Cards.Building.EffectType; +import it.polimi.ingsw.gc14.Model.Cards.BuildingCard; import it.polimi.ingsw.gc14.Model.Player; import org.junit.jupiter.api.Test; - import java.util.ArrayList; -import java.util.HashSet; import java.util.NoSuchElementException; -import java.util.Set; - import static org.junit.jupiter.api.Assertions.*; class Order2Test { @Test - void effectZero() { - Player p = new Player("p1"); + void firstReturnGetsFood() { + Player p1 = new Player("p1"); + Player p2 = new Player("p2"); ArrayList players = new ArrayList<>(); - players.add(p); + players.add(p1); + players.add(p2); + Order2 order = new Order2(players); - Order2 order = new Order2(new ArrayList<>()); + Player firstToAct = order.pull(); + Player secondToAct = order.pull(); - int initialFood = p.getFoodValue(); + int initialFood = firstToAct.getFoodValue(); + order.push(firstToAct); - order.effect(p, 0); - - assertEquals(initialFood + 1, p.getFoodValue()); + assertEquals(initialFood + 1, firstToAct.getFoodValue()); + assertEquals(firstToAct, order.getFirst()); } @Test - void effectZeroWithBuildingEffedt() { - Player p = new Player("p1"); + void secondReturnPaysFood() { + Player p1 = new Player("p1"); + Player p2 = new Player("p2"); ArrayList players = new ArrayList<>(); - players.add(p); + players.add(p1); + players.add(p2); + Order2 order = new Order2(players); + + Player firstToAct = order.pull(); + Player secondToAct = order.pull(); + + secondToAct.addFood(1); + int initialPrestige = secondToAct.getPrestigeValue(); + + order.push(firstToAct); + order.push(secondToAct); + + assertEquals(0, secondToAct.getFoodValue()); + assertEquals(initialPrestige, secondToAct.getPrestigeValue()); + } + + @Test + void secondReturnLosesPrestige() { + Player p1 = new Player("p1"); + Player p2 = new Player("p2"); + ArrayList players = new ArrayList<>(); + players.add(p1); + players.add(p2); + Order2 order = new Order2(players); + + Player firstToAct = order.pull(); + Player secondToAct = order.pull(); + + secondToAct.addPrestige(3); + + order.push(firstToAct); + order.push(secondToAct); + + assertEquals(0, secondToAct.getFoodValue()); + assertEquals(1, secondToAct.getPrestigeValue()); + } + + @Test + void firstReturnWithBuilding() { + Player p1 = new Player("p1"); + Player p2 = new Player("p2"); + ArrayList players = new ArrayList<>(); + players.add(p1); + players.add(p2); + Order2 order = new Order2(players); + + Player firstToAct = order.pull(); + order.pull(); + + firstToAct.buildingCards.add(new BuildingCard(3, 1, 1, 2)); + + order.push(firstToAct); + + assertEquals(2, firstToAct.getFoodValue()); + } + + @Test + void thirdPlayerThrows() { + Player p1 = new Player("p1"); + Player p2 = new Player("p2"); + Player p3 = new Player("p3"); + ArrayList players = new ArrayList<>(); + players.add(p1); + players.add(p2); + Order2 order = new Order2(players); + + order.pull(); + order.pull(); + + order.push(p1); + order.push(p2); + + assertThrows(IndexOutOfBoundsException.class, () -> order.push(p3)); + } + + @Test + void constructorLoadsPlayers() { + Player p1 = new Player("p1"); + Player p2 = new Player("p2"); + ArrayList players = new ArrayList<>(); + players.add(p1); + players.add(p2); Order2 order = new Order2(players); - int initialFood = p.getFoodValue(); - order.effect(p, 0); - assertTrue(p.getFoodValue() >= initialFood + 1); + Player firstOut = order.pull(); + Player secondOut = order.pull(); + + assertTrue((firstOut == p1 && secondOut == p2) || (firstOut == p2 && secondOut == p1)); + assertThrows(NoSuchElementException.class, order::pull); } @Test - void effectOneWithFood() { + void wrongIndexLow() { Player p = new Player("p1"); - ArrayList players = new ArrayList<>(); - players.add(p); - - Order2 order = new Order2(players); - - p.addFood(1); - int initialPrestige = p.getPrestigeValue(); - - order.effect(p, 1); - - assertEquals(0, p.getFoodValue()); - assertEquals(initialPrestige, p.getPrestigeValue()); - } - - @Test - void effectOneWithoutFood() { - Player p = new Player("p1"); - ArrayList players = new ArrayList<>(); - players.add(p); - - Order2 order = new Order2(players); - - p.addPrestige(3); - - order.effect(p, 1); - - assertEquals(0, p.getFoodValue()); - assertEquals(1, p.getPrestigeValue()); - } - - @Test - void effectWrongIndexHigh() { - Player p = new Player("p1"); - ArrayList players = new ArrayList<>(); - players.add(p); - Order2 order = new Order2(new ArrayList<>()); - - assertThrows(IndexOutOfBoundsException.class, () -> order.effect(p, 2)); - } - - @Test - void effectWrongIndexLow() { - Player p = new Player("p1"); - ArrayList players = new ArrayList<>(); - players.add(p); - Order2 order = new Order2(new ArrayList<>()); assertThrows(IndexOutOfBoundsException.class, () -> order.effect(p, -1)); } @Test - void pullAll() { - Player p1 = new Player("p1"); - Player p2 = new Player("p2"); - - ArrayList players = new ArrayList<>(); - players.add(p1); - players.add(p2); - - Order2 order = new Order2(players); - - Player first = order.pull(); - Player second = order.pull(); - - Set extracted = new HashSet<>(); - extracted.add(first); - extracted.add(second); - - assertEquals(2, extracted.size()); - assertTrue(extracted.contains(p1)); - assertTrue(extracted.contains(p2)); - } - - @Test - void pullEmpty() { + void wrongIndexHigh() { Player p = new Player("p1"); + Order2 order = new Order2(new ArrayList<>()); - ArrayList players = new ArrayList<>(); - players.add(p); - Order2 order = new Order2(players); - - order.pull(); - - assertThrows(NoSuchElementException.class, order::pull); + assertThrows(IndexOutOfBoundsException.class, () -> order.effect(p, 2)); } @Test - void firstPlayer() { + void getFirst() { Player p1 = new Player("p1"); - Player p2 = new Player("p2"); + Order2 order = new Order2(new ArrayList<>()); - ArrayList players = new ArrayList<>(); - players.add(p1); - players.add(p2); + assertNull(order.getFirst()); - Order2 order = new Order2(players); + order.push(p1); - Player first = order.getFirst(); - - assertTrue(first == p1 || first == p2); + assertEquals(p1, order.getFirst()); + assertEquals(p1, order.getFirst()); } - - @Test - void pushZero() { - ArrayList players = new ArrayList<>(); - Order2 order = new Order2(players); - - Player p = new Player("p1"); - int initialFood = p.getFoodValue(); - - order.push(p); - - assertEquals(initialFood + 1, p.getFoodValue()); - assertEquals(p, order.getFirst()); - } - - @Test - void pushOneFood() { - Player p1 = new Player("p1"); - Player p2 = new Player("p2"); - - ArrayList players = new ArrayList<>(); - players.add(p1); - - Order2 order = new Order2(players); - - p2.addFood(1); - int initialPrestige = p2.getPrestigeValue(); - - order.push(p2); - - assertEquals(0, p2.getFoodValue()); - assertEquals(initialPrestige, p2.getPrestigeValue()); - } - - @Test - void pushOneNoFood() { - Player p1 = new Player("p1"); - Player p2 = new Player("p2"); - - ArrayList players = new ArrayList<>(); - players.add(p1); - - Order2 order = new Order2(players); - - p2.addPrestige(3); - - order.push(p2); - - assertEquals(1, p2.getPrestigeValue()); - } - - @Test - void pushFull() { - Player p1 = new Player("p1"); - Player p2 = new Player("p2"); - Player p3 = new Player("p3"); - - ArrayList players = new ArrayList<>(); - players.add(p1); - players.add(p2); - - Order2 order = new Order2(players); - - assertThrows(IndexOutOfBoundsException.class, () -> order.push(p3)); - } - } \ No newline at end of file