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());
}
}