diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v02/Card_V2_051_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v02/Card_V2_051_Tests.java index 9c17ece9c..081127630 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v02/Card_V2_051_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vsets/set_v02/Card_V2_051_Tests.java @@ -1,12 +1,10 @@ package com.gempukku.lotro.cards.unofficial.pc.vsets.set_v02; import com.gempukku.lotro.cards.GenericCardTestHelper; -import com.gempukku.lotro.common.CardType; -import com.gempukku.lotro.common.Culture; -import com.gempukku.lotro.common.Keyword; -import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.common.*; import com.gempukku.lotro.game.CardNotFoundException; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; +import com.gempukku.lotro.logic.modifiers.HasInitiativeModifier; import org.junit.Test; import java.util.HashMap; @@ -20,8 +18,18 @@ public class Card_V2_051_Tests return new GenericCardTestHelper( new HashMap<>() {{ - put("card", "102_51"); - // put other cards in here as needed for the test case + put("wrath", "102_51"); + put("sam", "7_327"); + put("eowyn", "5_122"); + put("javelin", "7_248"); + put("deor", "7_222"); + put("bounder", "1_286"); + put("castout", "12_108"); + + put("unspoiled", "7_327"); + put("lord", "4_219"); + put("cantea", "1_230"); + put("terror", "1_226"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -47,7 +55,7 @@ public class Card_V2_051_Tests var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); + var card = scn.GetFreepsCard("wrath"); assertEquals("Now for Wrath", card.getBlueprint().getTitle()); assertNull(card.getBlueprint().getSubtitle()); @@ -59,29 +67,265 @@ public class Card_V2_051_Tests assertEquals(1, card.getBlueprint().getTwilightCost()); } - // Uncomment any @Test markers below once this is ready to be used - //@Test - public void NowforWrathTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void NowforWrathDoesNotReactToFellowshipPhasePossessionDiscard() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); - scn.FreepsMoveCharToTable(card); - scn.FreepsMoveCardToSupportArea(card); - scn.FreepsMoveCardToDiscard(card); - scn.FreepsMoveCardsToTopOfDeck(card); + var wrath = scn.GetFreepsCard("wrath"); + var javelin = scn.GetFreepsCard("javelin"); + var sam = scn.GetFreepsCard("sam"); + scn.FreepsMoveCardToHand(javelin); + scn.FreepsMoveCharToTable(sam); + scn.FreepsMoveCardToSupportArea(wrath); -// var card = scn.GetShadowCard("card"); -// scn.ShadowMoveCardToHand(card); -// scn.ShadowMoveCharToTable(card); -// scn.ShadowMoveCardToSupportArea(card); -// scn.ShadowMoveCardToDiscard(card); -// scn.ShadowMoveCardsToTopOfDeck(card); + //cheating to get around Sam's initiative requirement + scn.ApplyAdHocModifier(new HasInitiativeModifier(null, null, Side.FREE_PEOPLE)); scn.StartGame(); - scn.FreepsPlayCard(card); - assertEquals(1, scn.GetTwilight()); + assertEquals(0, scn.GetCultureTokensOn(wrath)); + assertEquals(Zone.HAND, javelin.getZone()); + + scn.FreepsUseCardAction(sam); + assertEquals(Zone.DISCARD, javelin.getZone()); + assertEquals(0, scn.GetCultureTokensOn(wrath)); } + + @Test + public void NowforWrathReactsToManeuverPhaseRohanAllyKill() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var wrath = scn.GetFreepsCard("wrath"); + var deor = scn.GetFreepsCard("deor"); + var bounder = scn.GetFreepsCard("bounder"); + var eowyn = scn.GetFreepsCard("eowyn"); + scn.FreepsMoveCharToTable(eowyn); + scn.FreepsMoveCardToSupportArea(wrath, deor, bounder); + + scn.AddWoundsToChar(deor, 1); + scn.AddWoundsToChar(bounder, 1); + + var terror = scn.GetShadowCard("terror"); + scn.ShadowMoveCharToTable("cantea"); + scn.ShadowMoveCardToHand(terror); + + scn.StartGame(); + + scn.SkipToPhase(Phase.MANEUVER); + scn.FreepsPassCurrentPhaseAction(); + assertEquals(0, scn.GetCultureTokensOn(wrath)); + assertEquals(Zone.SUPPORT, deor.getZone()); + assertEquals(Zone.SUPPORT, bounder.getZone()); + + scn.ShadowPlayCard(terror); + scn.FreepsResolveRuleFirst(); + assertEquals(Zone.DEAD, deor.getZone()); + assertEquals(Zone.DEAD, bounder.getZone()); + //Token from Deor, but not from Bounder + assertEquals(1, scn.GetCultureTokensOn(wrath)); + } + + @Test + public void NowforWrathReactsToArcheryPhasePossessionDiscard() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var wrath = scn.GetFreepsCard("wrath"); + var javelin = scn.GetFreepsCard("javelin"); + var eowyn = scn.GetFreepsCard("eowyn"); + scn.FreepsMoveCharToTable(eowyn); + scn.AttachCardsTo(eowyn, javelin); + scn.FreepsMoveCardToSupportArea(wrath); + + scn.ShadowMoveCharToTable("cantea"); + + scn.StartGame(); + + scn.SkipToPhase(Phase.ARCHERY); + assertEquals(0, scn.GetCultureTokensOn(wrath)); + assertEquals(Zone.ATTACHED, javelin.getZone()); + + scn.FreepsUseCardAction(javelin); + assertEquals(Zone.DISCARD, javelin.getZone()); + assertEquals(1, scn.GetCultureTokensOn(wrath)); + } + + @Test + public void NowforWrathReactsToSkirmishPhaseShadowPossessionDiscard() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var wrath = scn.GetFreepsCard("wrath"); + var javelin = scn.GetFreepsCard("javelin"); + var eowyn = scn.GetFreepsCard("eowyn"); + scn.FreepsMoveCharToTable(eowyn); + scn.AttachCardsTo(eowyn, javelin); + scn.FreepsMoveCardToSupportArea(wrath); + + var cantea = scn.GetShadowCard("cantea"); + scn.ShadowMoveCharToTable(cantea); + + scn.StartGame(); + + scn.SkipToAssignments(); + scn.FreepsAssignAndResolve(eowyn, cantea); + scn.FreepsPassCurrentPhaseAction(); + + assertEquals(0, scn.GetCultureTokensOn(wrath)); + assertEquals(Zone.ATTACHED, javelin.getZone()); + + scn.ShadowUseCardAction(cantea); + assertEquals(Zone.DISCARD, javelin.getZone()); + assertEquals(1, scn.GetCultureTokensOn(wrath)); + } + + @Test + public void NowforWrathReactsToReconciledPossessionDiscard() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var wrath = scn.GetFreepsCard("wrath"); + var javelin = scn.GetFreepsCard("javelin"); + scn.FreepsMoveCardToSupportArea(wrath); + scn.FreepsMoveCardToHand(javelin); + + scn.StartGame(); + scn.SkipToPhase(Phase.REGROUP); + scn.PassCurrentPhaseActions(); + scn.FreepsChooseToStay(); + + assertEquals(0, scn.GetCultureTokensOn(wrath)); + scn.FreepsChooseCard(javelin); + assertEquals(Zone.DISCARD, javelin.getZone()); + assertEquals(1, scn.GetCultureTokensOn(wrath)); + } + + @Test + public void NowforWrathReactsToReconciledAllyDiscard() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var wrath = scn.GetFreepsCard("wrath"); + var deor = scn.GetFreepsCard("deor"); + scn.FreepsMoveCardToSupportArea(wrath); + scn.FreepsMoveCardToHand(deor); + + scn.StartGame(); + scn.SkipToPhase(Phase.REGROUP); + scn.PassCurrentPhaseActions(); + scn.FreepsChooseToStay(); + + assertEquals(0, scn.GetCultureTokensOn(wrath)); + scn.FreepsChooseCard(deor); + assertEquals(Zone.DISCARD, deor.getZone()); + assertEquals(1, scn.GetCultureTokensOn(wrath)); + } + + @Test + public void NowforWrathDoesNotRespondToMinionExertedByFreepsCardIfLessThan2Tokens() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var wrath = scn.GetFreepsCard("wrath"); + var eowyn = scn.GetFreepsCard("eowyn"); + var castout = scn.GetFreepsCard("castout"); + + scn.FreepsMoveCharToTable(eowyn); + scn.FreepsMoveCardToSupportArea(wrath, castout); + scn.AddTokensToCard(wrath, 1); + + var cantea = scn.GetShadowCard("cantea"); + scn.ShadowMoveCharToTable(cantea); + scn.AddWoundsToChar(cantea, 1); + + scn.StartGame(); + + scn.SkipToPhase(Phase.MANEUVER); + assertTrue(scn.FreepsActionAvailable("Exert a Minion")); + assertEquals(1, scn.GetCultureTokensOn(wrath)); + assertTrue(scn.hasKeyword(eowyn, Keyword.VALIANT)); + assertEquals(0, scn.GetWoundsOn(eowyn)); + assertEquals(1, scn.GetWoundsOn(cantea)); + + scn.FreepsUseCardAction(castout); + assertTrue(scn.ShadowDecisionAvailable("Play Maneuver action or pass")); + assertEquals(1, scn.GetCultureTokensOn(wrath)); + assertEquals(0, scn.GetWoundsOn(eowyn)); + assertEquals(2, scn.GetWoundsOn(cantea)); + } + + @Test + public void NowforWrathDoesNotRespondToMinionExertedByFreepsCardIfHas2TokensButNoValiantComp() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var wrath = scn.GetFreepsCard("wrath"); + var deor = scn.GetFreepsCard("deor"); + var castout = scn.GetFreepsCard("castout"); + + scn.FreepsMoveCardToSupportArea(wrath, castout, deor); + scn.AddTokensToCard(wrath, 2); + + var cantea = scn.GetShadowCard("cantea"); + scn.ShadowMoveCharToTable(cantea); + scn.AddWoundsToChar(cantea, 1); + + scn.StartGame(); + + scn.SkipToPhase(Phase.MANEUVER); + assertTrue(scn.FreepsActionAvailable("Exert a Minion")); + assertEquals(2, scn.GetCultureTokensOn(wrath)); + assertFalse(scn.hasKeyword(deor, Keyword.VALIANT)); + assertEquals(0, scn.GetWoundsOn(deor)); + assertEquals(1, scn.GetWoundsOn(cantea)); + + scn.FreepsUseCardAction(castout); + assertTrue(scn.ShadowDecisionAvailable("Play Maneuver action or pass")); + assertEquals(2, scn.GetCultureTokensOn(wrath)); + assertEquals(0, scn.GetWoundsOn(deor)); + assertEquals(2, scn.GetWoundsOn(cantea)); + } + + @Test + public void NowforWrathRemoves2TokenAndExertsValiantCompToWoundMinionExertedByFreepsCard() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var wrath = scn.GetFreepsCard("wrath"); + var eowyn = scn.GetFreepsCard("eowyn"); + var castout = scn.GetFreepsCard("castout"); + + scn.FreepsMoveCharToTable(eowyn); + scn.FreepsMoveCardToSupportArea(wrath, castout); + scn.AddTokensToCard(wrath, 3); + + var cantea = scn.GetShadowCard("cantea"); + scn.ShadowMoveCharToTable(cantea); + scn.AddWoundsToChar(cantea, 1); + + scn.StartGame(); + + scn.SkipToPhase(Phase.MANEUVER); + assertTrue(scn.FreepsActionAvailable("Exert a Minion")); + assertEquals(3, scn.GetCultureTokensOn(wrath)); + assertTrue(scn.hasKeyword(eowyn, Keyword.VALIANT)); + assertEquals(0, scn.GetWoundsOn(eowyn)); + assertEquals(1, scn.GetWoundsOn(cantea)); + assertEquals(Zone.SHADOW_CHARACTERS, cantea.getZone()); + + scn.FreepsUseCardAction(castout); + assertTrue(scn.FreepsHasOptionalTriggerAvailable()); + scn.FreepsAcceptOptionalTrigger(); + + assertEquals(1, scn.GetCultureTokensOn(wrath)); + assertEquals(1, scn.GetWoundsOn(eowyn)); + assertEquals(Zone.DISCARD, cantea.getZone()); + + assertTrue(scn.ShadowDecisionAvailable("Play Maneuver action or pass")); + + } + + }