diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PlayCardFromHand.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PlayCardFromHand.java index c290202c5..3439791a9 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PlayCardFromHand.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/PlayCardFromHand.java @@ -49,7 +49,7 @@ public class PlayCardFromHand implements EffectAppenderProducer { final Filterable onFilterable = onFilterableSource.getFilterable(actionContext); return Filters.and(Filters.playable(game, costModifier, ignoreRoamingPenalty, ignoreInDeadPile), ExtraFilters.attachableTo(game, costModifier, onFilterable)); } - return Filters.playable(game, removedTwilight, costModifier, ignoreRoamingPenalty, ignoreInDeadPile, true); + return Filters.playable(game, 0, costModifier, ignoreRoamingPenalty, ignoreInDeadPile, true); }, (actionContext) -> { final LotroGame game = actionContext.getGame(); diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/GenericCardTestHelper.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/GenericCardTestHelper.java index d19ece6b0..9c876195f 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/GenericCardTestHelper.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/GenericCardTestHelper.java @@ -1125,7 +1125,7 @@ public class GenericCardTestHelper extends AbstractAtTest { return _game.isFinished(); } - public void FreepsResolveRuleFirst() throws DecisionResultInvalidException { FreepsResolveActionOrder(null); } + public void FreepsResolveRuleFirst() throws DecisionResultInvalidException { FreepsResolveActionOrder(GetADParamAsList(P1, "actionText").getFirst()); } public void FreepsResolveActionOrder(String option) throws DecisionResultInvalidException { ChooseAction(P1, "actionText", option); } public Filterable GenerateFreepsFilter(String filter) throws InvalidCardDefinitionException { diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set10/Card_10_019_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set10/Card_10_019_Tests.java index 88b8f5607..32f745662 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set10/Card_10_019_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set10/Card_10_019_Tests.java @@ -45,7 +45,7 @@ public class Card_10_019_Tests var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); + var card = scn.GetFreepsCard("sprang"); assertEquals("A Dark Shape Sprang", card.getBlueprint().getTitle()); assertNull(card.getBlueprint().getSubtitle()); diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set10/Card_10_047_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set10/Card_10_047_Tests.java index e45fcbbb5..21c913eff 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set10/Card_10_047_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set10/Card_10_047_Tests.java @@ -17,8 +17,8 @@ public class Card_10_047_Tests return new GenericCardTestHelper( new HashMap<>() {{ - put("card", "10_47"); - // put other cards in here as needed for the test case + put("call", "10_47"); + put("southron", "4_220"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -38,12 +38,14 @@ public class Card_10_047_Tests * Twilight Cost: 0 * Type: Condition * Subtype: Support area - * Game Text: To play, spot a [raider] Man.
Threats cannot be removed by Free Peoples cards.
Shadow: Remove (1) and play a Southron to add a threat. + * Game Text: To play, spot a [raider] Man. + * Threats cannot be removed by Free Peoples cards. + * Shadow: Remove (1) and play a Southron to add a threat. */ var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); + var card = scn.GetFreepsCard("call"); assertEquals("Rallying Call", card.getBlueprint().getTitle()); assertNull(card.getBlueprint().getSubtitle()); @@ -55,18 +57,60 @@ public class Card_10_047_Tests assertEquals(0, card.getBlueprint().getTwilightCost()); } - // Uncomment any @Test markers below once this is ready to be used - //@Test - public void RallyingCallTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void RallyingCallRemoves1AndPlaysASouthronToAddAThreat() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + var call = scn.GetShadowCard("call"); + var southron = scn.GetShadowCard("southron"); + scn.ShadowMoveCardToSupportArea(call); + scn.ShadowMoveCardToHand(southron); scn.StartGame(); - scn.FreepsPlayCard(card); + scn.SetTwilight(7); + scn.FreepsPassCurrentPhaseAction(); + assertEquals(10, scn.GetTwilight()); + assertEquals(0, scn.getThreats()); + assertTrue(scn.ShadowActionAvailable(call)); + assertTrue(scn.ShadowPlayAvailable(southron)); + assertEquals(Zone.HAND, southron.getZone()); + + scn.ShadowUseCardAction(call); + + //10 twiliight -4 base -2 roaming -1 extra tax from Call + assertEquals(3, scn.GetTwilight()); + assertEquals(1, scn.getThreats()); + assertEquals(Zone.SHADOW_CHARACTERS, southron.getZone()); + } + + @Test + public void RallyingCallHasEffectEvenWhenFinalTwilightPoolIsZero() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var call = scn.GetShadowCard("call"); + var southron = scn.GetShadowCard("southron"); + scn.ShadowMoveCardToSupportArea(call); + scn.ShadowMoveCardToHand(southron); + + scn.StartGame(); + scn.SetTwilight(4); + scn.FreepsPassCurrentPhaseAction(); + + assertEquals(7, scn.GetTwilight()); + assertEquals(0, scn.getThreats()); + assertTrue(scn.ShadowActionAvailable(call)); + assertTrue(scn.ShadowPlayAvailable(southron)); + assertEquals(Zone.HAND, southron.getZone()); + + scn.ShadowUseCardAction(call); + + //We must ensure that the final tally results in an empty twilight pool + // as it is here that PlayCardFromHand falters if set up incorrectly assertEquals(0, scn.GetTwilight()); + assertEquals(1, scn.getThreats()); + assertEquals(Zone.SHADOW_CHARACTERS, southron.getZone()); } }