diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set10/set10-Raider.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set10/set10-Raider.hjson index 32dcf9d5b..2fcd173c8 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set10/set10-Raider.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set10/set10-Raider.hjson @@ -81,7 +81,7 @@ } effect: { type: playCardFromDrawDeck - select: choose(support area,possession) + select: choose(culture(raider),support area,possession) showAll: true shuffle: true } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java index 00c19b55d..244f2b61c 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java @@ -248,7 +248,7 @@ public class DefaultLotroGame implements LotroGame { if (_losers.size() + 1 == _allPlayers.size()) { List allPlayers = new LinkedList<>(_allPlayers); allPlayers.removeAll(_losers.keySet()); - gameWon(allPlayers.get(0), "Last remaining player in game"); + gameWon(allPlayers.getFirst(), "Last remaining player in game"); } } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set04/Card_04_032_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set04/Card_04_032_Tests.java index 955101f12..22bd9fc6a 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set04/Card_04_032_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set04/Card_04_032_Tests.java @@ -1,10 +1,7 @@ package com.gempukku.lotro.cards.official.set04; import com.gempukku.lotro.cards.GenericCardTestHelper; -import com.gempukku.lotro.common.CardType; -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Side; -import com.gempukku.lotro.common.Timeword; +import com.gempukku.lotro.common.*; import com.gempukku.lotro.game.CardNotFoundException; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; import org.junit.Test; @@ -20,8 +17,13 @@ public class Card_04_032_Tests return new GenericCardTestHelper( new HashMap<>() {{ - put("card", "4_32"); - // put other cards in here as needed for the test case + put("ravage", "4_32"); + put("brigand", "4_10"); + put("weary", "4_212"); + + put("sword", "1_299"); + put("coat", "2_105"); + put("stone", "1_314"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -46,7 +48,7 @@ public class Card_04_032_Tests var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); + var card = scn.GetFreepsCard("ravage"); assertEquals("Ravage the Defeated", card.getBlueprint().getTitle()); assertNull(card.getBlueprint().getSubtitle()); @@ -58,18 +60,50 @@ public class Card_04_032_Tests assertEquals(1, card.getBlueprint().getTwilightCost()); } - // Uncomment any @Test markers below once this is ready to be used - //@Test - public void RavagetheDefeatedTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void RavagetheDefeatedDiscardsFreepsCardsAttachedToLoser() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + //A freeps possession, artifact, and condition + var sword = scn.GetFreepsCard("sword"); + var coat = scn.GetFreepsCard("coat"); + var stone = scn.GetFreepsCard("stone"); + var frodo = scn.GetRingBearer(); + scn.AttachCardsTo(frodo, sword, coat, stone); + + var ravage = scn.GetShadowCard("ravage"); + var brigand = scn.GetShadowCard("brigand"); + var weary = scn.GetShadowCard("weary"); + scn.ShadowMoveCardToHand(ravage); + scn.AttachCardsTo(frodo, weary); + scn.ShadowMoveCharToTable(brigand); scn.StartGame(); - scn.FreepsPlayCard(card); + scn.SkipToAssignments(); + scn.FreepsAssignToMinions(frodo, brigand); + scn.FreepsResolveSkirmish(frodo); - assertEquals(1, scn.GetTwilight()); + assertEquals(Zone.ATTACHED, sword.getZone()); + assertEquals(frodo, sword.getAttachedTo()); + assertEquals(Zone.ATTACHED, coat.getZone()); + assertEquals(frodo, coat.getAttachedTo()); + assertEquals(Zone.ATTACHED, stone.getZone()); + assertEquals(frodo, stone.getAttachedTo()); + assertEquals(Zone.ATTACHED, weary.getZone()); + assertEquals(frodo, weary.getAttachedTo()); + + scn.FreepsPassCurrentPhaseAction(); + scn.ShadowPassCurrentPhaseAction(); + + scn.FreepsDeclineOptionalTrigger(); //One Ring converting wound on frodo + assertTrue(scn.ShadowPlayAvailable(ravage)); + scn.ShadowPlayCard(ravage); + + assertEquals(Zone.DISCARD, sword.getZone()); + assertEquals(Zone.DISCARD, coat.getZone()); + assertEquals(Zone.DISCARD, stone.getZone()); + assertEquals(Zone.ATTACHED, weary.getZone()); + assertEquals(frodo, weary.getAttachedTo()); } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set01/Card_01_311_ErrataTests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set01/Card_01_311_ErrataTests.java index 58cde2afc..da424810e 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set01/Card_01_311_ErrataTests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set01/Card_01_311_ErrataTests.java @@ -20,8 +20,9 @@ public class Card_01_311_ErrataTests put("rosie", "1_309"); put("proudfoot", "1_301"); put("gaffer", "1_291"); + put("stealth", "1_298"); - put("orc", "1_272"); + put("twk", "1_237"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -167,4 +168,64 @@ public class Card_01_311_ErrataTests assertSame(scn.GetRingBearer(), sam); assertFalse(scn.GameIsFinished()); } + + @Test + public void RBOverwhelmMakesSamTheRB() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var frodo = scn.GetRingBearer(); + var sam = scn.GetFreepsCard("sam"); + scn.FreepsMoveCharToTable(sam); + + var twk = scn.GetShadowCard("twk"); + scn.ShadowMoveCharToTable(twk); + + scn.StartGame(); + + scn.SkipToAssignments(); + scn.FreepsAssignToMinions(frodo, twk); + scn.FreepsResolveSkirmish(frodo); + scn.PassCurrentPhaseActions(); + + assertNotSame(scn.GetRingBearer(), sam); + assertTrue(scn.FreepsHasOptionalTriggerAvailable()); + scn.FreepsAcceptOptionalTrigger(); + assertSame(scn.GetRingBearer(), sam); + assertFalse(scn.GameIsFinished()); + } + + @Test + public void RBFierceOverwhelmMakesSamTheRB() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var frodo = scn.GetRingBearer(); + var sam = scn.GetFreepsCard("sam"); + var stealth = scn.GetFreepsCard("stealth"); + scn.FreepsMoveCharToTable(sam); + scn.FreepsMoveCardToHand(stealth); + + var twk = scn.GetShadowCard("twk"); + scn.ShadowMoveCharToTable(twk); + + scn.StartGame(); + + scn.SkipToAssignments(); + scn.FreepsAssignToMinions(sam, twk); + scn.FreepsResolveSkirmish(sam); + scn.FreepsPlayCard(stealth); + + //Fierce + scn.PassCurrentPhaseActions(); + scn.FreepsAssignToMinions(frodo, twk); + scn.FreepsResolveSkirmish(frodo); + scn.PassCurrentPhaseActions(); + + assertNotSame(scn.GetRingBearer(), sam); + assertTrue(scn.FreepsHasOptionalTriggerAvailable()); + scn.FreepsAcceptOptionalTrigger(); + assertSame(scn.GetRingBearer(), sam); + assertFalse(scn.GameIsFinished()); + } }