From d7c5ef3ed2c5d6641f98577661edcdd49f892a82 Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Mon, 2 Jan 2023 15:07:37 -0600 Subject: [PATCH] Fixed Palantir of Orthanc errata not putting the revealed card on the draw deck --- .../errata/set03/set03-Isengard-errata.hjson | 7 +- .../official/set03/Card_03_067_Tests.java | 121 ++++++++++++++++++ .../errata/set03/Card_03_067_ErrataTests.java | 97 +++++++++----- 3 files changed, 193 insertions(+), 32 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set03/Card_03_067_Tests.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/errata/set03/set03-Isengard-errata.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/errata/set03/set03-Isengard-errata.hjson index 0dcd969d7..a2fe17602 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/errata/set03/set03-Isengard-errata.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/errata/set03/set03-Isengard-errata.hjson @@ -373,14 +373,15 @@ { type: revealRandomCardsFromHand forced: true - hand: fp + hand: freeps count: 1 memorize: revealedCard } { type: putCardsFromHandOnTopOfDeck - filter: choose(memory(revealedCard)) - player: fp + filter: all(memory(revealedCard)) + player: shadow + hand: freeps } ] } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set03/Card_03_067_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set03/Card_03_067_Tests.java new file mode 100644 index 000000000..69ba51f19 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set03/Card_03_067_Tests.java @@ -0,0 +1,121 @@ +package com.gempukku.lotro.cards.official.set03; + +import com.gempukku.lotro.cards.GenericCardTestHelper; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.game.CardNotFoundException; +import com.gempukku.lotro.game.PhysicalCardImpl; +import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; +import org.junit.Test; + +import java.util.HashMap; + +import static org.junit.Assert.*; + +public class Card_03_067_Tests +{ + + protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException { + return new GenericCardTestHelper( + new HashMap<>() + {{ + put("palantir", "3_67"); + put("uruk1", "1_151"); + put("uruk2", "1_151"); + }}, + GenericCardTestHelper.FellowshipSites, + GenericCardTestHelper.FOTRFrodo, + GenericCardTestHelper.FOTRRing + ); + } + + @Test + public void ThePalantirofOrthancStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { + + /** + * Set: 3 + * Title: *The Palantir of Orthanc + * Side: Free Peoples + * Culture: Isengard + * Twilight Cost: 0 + * Type: artifact + * Subtype: Palantir + * Game Text: To play, spot an [isengard] minion. Plays to your support area. + * Shadow: Spot an [isengard] minions and remove (1) to reveal a card at random from the Free Peoples player's hand. Place that card on top of that player's draw deck. + */ + + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl palantir = scn.GetFreepsCard("palantir"); + + assertTrue(palantir.getBlueprint().isUnique()); + assertEquals(Side.SHADOW, palantir.getBlueprint().getSide()); + assertEquals(Culture.ISENGARD, palantir.getBlueprint().getCulture()); + assertEquals(CardType.ARTIFACT, palantir.getBlueprint().getCardType()); + assertTrue(scn.HasKeyword(palantir, Keyword.SUPPORT_AREA)); + //Uncomment this once this has been converted to JSON; java cards don't support support area items with classes + //assertTrue(palantir.getBlueprint().getPossessionClasses().contains(PossessionClass.PALANTIR)); + assertEquals(0, palantir.getBlueprint().getTwilightCost()); + } + + @Test + public void PalantirRequires1IsengardMinionToPlayAnd1ToActivate() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + scn.FreepsMoveCardToHand("palantir", "uruk1", "uruk2"); + + PhysicalCardImpl palantir = scn.GetShadowCard("palantir"); + PhysicalCardImpl uruk1 = scn.GetShadowCard("uruk1"); + PhysicalCardImpl uruk2 = scn.GetShadowCard("uruk2"); + scn.ShadowMoveCardToHand(palantir, uruk1, uruk2); + + scn.StartGame(); + + scn.SetTwilight(20); + + scn.FreepsPassCurrentPhaseAction(); + + assertEquals(23, scn.GetTwilight()); + + assertFalse(scn.ShadowPlayAvailable(palantir)); + scn.ShadowPlayCard(uruk1); + assertTrue(scn.ShadowPlayAvailable(palantir)); + scn.ShadowPlayCard(palantir); + assertTrue(scn.ShadowActionAvailable(palantir)); + } + + @Test + public void PalantirRemoves2ToRevealCardFromFreepsHandAndPlacesOnDrawDeck() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + scn.FreepsMoveCardToHand("palantir", "uruk1", "uruk2"); + + PhysicalCardImpl palantir = scn.GetShadowCard("palantir"); + PhysicalCardImpl uruk1 = scn.GetShadowCard("uruk1"); + PhysicalCardImpl uruk2 = scn.GetShadowCard("uruk2"); + scn.ShadowMoveCharToTable(uruk1, uruk2); + scn.ShadowMoveCardToSupportArea(palantir); + + scn.StartGame(); + + scn.SetTwilight(20); + + scn.FreepsPassCurrentPhaseAction(); + + assertEquals(23, scn.GetTwilight()); + assertEquals(3, scn.GetFreepsHandCount()); + assertEquals(0, scn.GetFreepsDeckCount()); + + scn.ShadowUseCardAction(palantir); + assertEquals(22, scn.GetTwilight()); + assertEquals(1, scn.GetShadowCardChoiceCount()); + + scn.FreepsDismissRevealedCards(); + scn.ShadowDismissRevealedCards(); + + assertEquals(2, scn.GetFreepsHandCount()); + assertEquals(1, scn.GetFreepsDeckCount()); + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set03/Card_03_067_ErrataTests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set03/Card_03_067_ErrataTests.java index c59e460bc..51dd247ba 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set03/Card_03_067_ErrataTests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set03/Card_03_067_ErrataTests.java @@ -5,14 +5,11 @@ import com.gempukku.lotro.common.*; import com.gempukku.lotro.game.CardNotFoundException; import com.gempukku.lotro.game.PhysicalCardImpl; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; -import com.gempukku.lotro.logic.modifiers.MoveLimitModifier; import org.junit.Test; import java.util.HashMap; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; public class Card_03_067_ErrataTests { @@ -21,8 +18,9 @@ public class Card_03_067_ErrataTests return new GenericCardTestHelper( new HashMap() {{ - put("card", "73_67"); - // put other cards in here as needed for the test case + put("palantir", "53_67"); + put("uruk1", "1_151"); + put("uruk2", "1_151"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -30,9 +28,7 @@ public class Card_03_067_ErrataTests ); } - // Uncomment both @Test markers below once this is ready to be used - - //@Test + @Test public void ThePalantirofOrthancStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { /** @@ -50,34 +46,77 @@ public class Card_03_067_ErrataTests //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); - - assertTrue(card.getBlueprint().isUnique()); - assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide()); - assertEquals(Culture.ISENGARD, card.getBlueprint().getCulture()); - assertEquals(CardType.ARTIFACT, card.getBlueprint().getCardType()); - //assertEquals(Race.CREATURE, card.getBlueprint().getRace()); - assertTrue(scn.HasKeyword(card, Keyword.SUPPORT_AREA)); - assertEquals(0, card.getBlueprint().getTwilightCost()); - //assertEquals(, card.getBlueprint().getStrength()); - //assertEquals(, card.getBlueprint().getVitality()); - //assertEquals(, card.getBlueprint().getResistance()); - //assertEquals(Signet., card.getBlueprint().getSignet()); - //assertEquals(, card.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies + PhysicalCardImpl palantir = scn.GetFreepsCard("palantir"); + assertTrue(palantir.getBlueprint().isUnique()); + assertEquals(Side.SHADOW, palantir.getBlueprint().getSide()); + assertEquals(Culture.ISENGARD, palantir.getBlueprint().getCulture()); + assertEquals(CardType.ARTIFACT, palantir.getBlueprint().getCardType()); + assertTrue(scn.HasKeyword(palantir, Keyword.SUPPORT_AREA)); + assertTrue(palantir.getBlueprint().getPossessionClasses().contains(PossessionClass.PALANTIR)); + assertEquals(0, palantir.getBlueprint().getTwilightCost()); } - //@Test - public void ThePalantirofOrthancTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void PalantirRequires1IsengardMinionToPlayBut2ToActivate() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + scn.FreepsMoveCardToHand("palantir", "uruk1", "uruk2"); + + PhysicalCardImpl palantir = scn.GetShadowCard("palantir"); + PhysicalCardImpl uruk1 = scn.GetShadowCard("uruk1"); + PhysicalCardImpl uruk2 = scn.GetShadowCard("uruk2"); + scn.ShadowMoveCardToHand(palantir, uruk1, uruk2); scn.StartGame(); - scn.FreepsPlayCard(card); - assertEquals(0, scn.GetTwilight()); + scn.SetTwilight(20); + + scn.FreepsPassCurrentPhaseAction(); + + assertEquals(23, scn.GetTwilight()); + + assertFalse(scn.ShadowPlayAvailable(palantir)); + scn.ShadowPlayCard(uruk1); + assertTrue(scn.ShadowPlayAvailable(palantir)); + scn.ShadowPlayCard(palantir); + assertFalse(scn.ShadowActionAvailable(palantir)); + scn.ShadowPlayCard(uruk2); + assertTrue(scn.ShadowActionAvailable(palantir)); + } + + @Test + public void PalantirRemoves2ToRevealCardFromFreepsHandAndPlacesOnDrawDeck() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + scn.FreepsMoveCardToHand("palantir", "uruk1", "uruk2"); + + PhysicalCardImpl palantir = scn.GetShadowCard("palantir"); + PhysicalCardImpl uruk1 = scn.GetShadowCard("uruk1"); + PhysicalCardImpl uruk2 = scn.GetShadowCard("uruk2"); + scn.ShadowMoveCharToTable(uruk1, uruk2); + scn.ShadowMoveCardToSupportArea(palantir); + + scn.StartGame(); + + scn.SetTwilight(20); + + scn.FreepsPassCurrentPhaseAction(); + + assertEquals(23, scn.GetTwilight()); + assertEquals(3, scn.GetFreepsHandCount()); + assertEquals(0, scn.GetFreepsDeckCount()); + + scn.ShadowUseCardAction(palantir); + assertEquals(21, scn.GetTwilight()); + assertEquals(1, scn.GetShadowCardChoiceCount()); + + scn.FreepsDismissRevealedCards(); + scn.ShadowDismissRevealedCards(); + + assertEquals(2, scn.GetFreepsHandCount()); + assertEquals(1, scn.GetFreepsDeckCount()); } }