From 0ff75b80e52598a963496b30e58c284ee44783ce Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Sat, 31 Dec 2022 02:13:50 -0600 Subject: [PATCH] Backported and converted all the dwarven set 1 errata unit tests into tests for their original Decipher counterparts. --- .../official/set01/Card_01_007_Tests.java | 76 +++++++++++ .../official/set01/Card_01_011_Tests.java | 112 +++++++++++---- .../official/set01/Card_01_012_Tests.java | 117 ++++++++++++++++ .../official/set01/Card_01_016_Tests.java | 128 ++++++++++++++++++ .../official/set01/Card_01_017_Tests.java | 92 +++++++++++++ .../official/set01/Card_01_023_Tests.java | 128 ++++++++++++++++++ 6 files changed, 625 insertions(+), 28 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_007_Tests.java create mode 100644 gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_012_Tests.java create mode 100644 gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_016_Tests.java create mode 100644 gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_017_Tests.java create mode 100644 gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_023_Tests.java diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_007_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_007_Tests.java new file mode 100644 index 000000000..2bce663a3 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_007_Tests.java @@ -0,0 +1,76 @@ +package com.gempukku.lotro.cards.official.set01; + +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_01_007_Tests +{ + + protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException { + return new GenericCardTestHelper( + new HashMap<>() + {{ + put("guard", "1_7"); + put("gimli", "1_13"); + }}, + GenericCardTestHelper.FellowshipSites, + GenericCardTestHelper.FOTRFrodo, + GenericCardTestHelper.FOTRRing + ); + } + + @Test + public void DwarfGuardStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { + + /** + * Set: 1 + * Title: Dwarf Guard + * Side: Free Peoples + * Culture: Dwarven + * Twilight Cost: 1 + * Type: companion + * Subtype: Dwarf + * Strength: 4 + * Vitality: 2 + * Game Text: To play, spot a Dwarf. + */ + + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl guard = scn.GetFreepsCard("guard"); + + assertFalse(guard.getBlueprint().isUnique()); + assertEquals(Side.FREE_PEOPLE, guard.getBlueprint().getSide()); + assertEquals(Culture.DWARVEN, guard.getBlueprint().getCulture()); + assertEquals(CardType.COMPANION, guard.getBlueprint().getCardType()); + assertEquals(Race.DWARF, guard.getBlueprint().getRace()); + assertEquals(1, guard.getBlueprint().getTwilightCost()); + assertEquals(4, guard.getBlueprint().getStrength()); + assertEquals(2, guard.getBlueprint().getVitality()); + } + + @Test + public void DwarfGuardRequiresDwarf() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl guard = scn.GetFreepsCard("guard"); + PhysicalCardImpl gimli = scn.GetFreepsCard("gimli"); + scn.FreepsMoveCardToHand(guard, gimli); + + scn.StartGame(); + + assertFalse(scn.FreepsPlayAvailable(guard)); + scn.FreepsPlayCard(gimli); + assertTrue(scn.FreepsPlayAvailable(guard)); + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_011_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_011_Tests.java index a54c75d50..e777ebc57 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_011_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_011_Tests.java @@ -1,7 +1,7 @@ package com.gempukku.lotro.cards.official.set01; import com.gempukku.lotro.cards.GenericCardTestHelper; -import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.common.*; import com.gempukku.lotro.game.CardNotFoundException; import com.gempukku.lotro.game.PhysicalCardImpl; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; @@ -9,46 +9,102 @@ import org.junit.Test; import java.util.HashMap; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.*; -// Tidings of Erebor public class Card_01_011_Tests { - protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException { - return new GenericCardTestHelper( - new HashMap<>() {{ - put("farin", "1_11"); - put("goblin", "1_178"); - }} - ); - } + protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException { + return new GenericCardTestHelper( + new HashMap<>() + {{ + put("farin", "1_11"); + put("gimli", "1_13"); - @Test - public void FarinStrengthBoostWhileSkirmishingOrc() throws DecisionResultInvalidException, CardNotFoundException { - //Pre-game setup - GenericCardTestHelper scn = GetScenario(); + put("runner", "1_178"); + put("nazgul", "1_230"); + }}, + GenericCardTestHelper.FellowshipSites, + GenericCardTestHelper.FOTRFrodo, + GenericCardTestHelper.FOTRRing + ); + } - PhysicalCardImpl farin = scn.GetFreepsCard("farin"); - scn.FreepsMoveCharToTable(farin); + @Test + public void FarinStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { - PhysicalCardImpl goblin = scn.GetShadowCard("goblin"); - scn.ShadowMoveCharToTable(goblin); + /** + * Set: 1 + * Title: *Farin, Dwarven Emissary + * Side: Free Peoples + * Culture: Dwarven + * Twilight Cost: 2 + * Type: companion + * Subtype: Dwarf + * Strength: 5 + * Vitality: 3 + * Game Text: To play, spot a Dwarf. + * While skirmishing an Orc, Farin is strength +2. + */ - scn.StartGame(); - scn.FreepsPassCurrentPhaseAction(); + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); - scn.SkipToPhase(Phase.ASSIGNMENT); + PhysicalCardImpl farin = scn.GetFreepsCard("farin"); - scn.PassCurrentPhaseActions(); + assertTrue(farin.getBlueprint().isUnique()); + assertEquals(Side.FREE_PEOPLE, farin.getBlueprint().getSide()); + assertEquals(Culture.DWARVEN, farin.getBlueprint().getCulture()); + assertEquals(CardType.COMPANION, farin.getBlueprint().getCardType()); + assertEquals(Race.DWARF, farin.getBlueprint().getRace()); + assertEquals(2, farin.getBlueprint().getTwilightCost()); + assertEquals(5, farin.getBlueprint().getStrength()); + assertEquals(3, farin.getBlueprint().getVitality()); + } - scn.FreepsAssignToMinions(farin, goblin); - scn.FreepsResolveSkirmish(farin); + @Test + public void FarinRequiresDwarf() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); - assertEquals(7, scn.GetStrength(farin)); + PhysicalCardImpl farin = scn.GetFreepsCard("farin"); + PhysicalCardImpl gimli = scn.GetFreepsCard("gimli"); + scn.FreepsMoveCardToHand(farin, gimli); - } + scn.StartGame(); + assertFalse(scn.FreepsPlayAvailable(farin)); + scn.FreepsPlayCard(gimli); + assertTrue(scn.FreepsPlayAvailable(farin)); + } + @Test + public void FarinStrengthBonusAgainstOrcs() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); -} \ No newline at end of file + PhysicalCardImpl farin = scn.GetFreepsCard("farin"); + scn.FreepsMoveCharToTable(farin); + + PhysicalCardImpl orc = scn.GetShadowCard("runner"); + PhysicalCardImpl nazgul = scn.GetShadowCard("nazgul"); + scn.ShadowMoveCharToTable(orc, nazgul); + + scn.StartGame(); + + scn.SkipToAssignments(); + scn.FreepsAssignToMinions(farin, orc); + scn.ShadowDeclineAssignments(); + + assertEquals(5, scn.GetStrength(farin)); + scn.FreepsResolveSkirmish(farin); + assertEquals(7, scn.GetStrength(farin)); + scn.PassCurrentPhaseActions(); + + //fierce + scn.SkipToAssignments(); + scn.FreepsAssignToMinions(farin, nazgul); + scn.FreepsResolveSkirmish(farin); + assertEquals(5, scn.GetStrength(farin)); + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_012_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_012_Tests.java new file mode 100644 index 000000000..f7e9b16c3 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_012_Tests.java @@ -0,0 +1,117 @@ +package com.gempukku.lotro.cards.official.set01; + +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_01_012_Tests +{ + + protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException { + return new GenericCardTestHelper( + new HashMap<>() + {{ + put("gimli", "1_12"); + + put("card1", "1_191"); + put("card2", "1_178"); + put("card3", "1_179"); + }}, + GenericCardTestHelper.FellowshipSites, + GenericCardTestHelper.FOTRFrodo, + GenericCardTestHelper.FOTRRing + ); + } + + @Test + public void GimliStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { + + /** + * Set: 1 + * Title: *Gimli, Dwarf of Erebor + * Side: Free Peoples + * Culture: Dwarven + * Twilight Cost: 2 + * Type: companion + * Subtype: Dwarf + * Strength: 6 + * Vitality: 3 + * Signet: aragorn + * Game Text: Damage +1 + * Fellowship: If the twilight pool has fewer than 2 twilight tokens, add (2) and place a gimli from hand beneath your draw deck to draw a gimli. + */ + + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl gimli = scn.GetFreepsCard("gimli"); + + assertTrue(gimli.getBlueprint().isUnique()); + assertEquals(Side.FREE_PEOPLE, gimli.getBlueprint().getSide()); + assertEquals(Culture.DWARVEN, gimli.getBlueprint().getCulture()); + assertEquals(CardType.COMPANION, gimli.getBlueprint().getCardType()); + assertEquals(Race.DWARF, gimli.getBlueprint().getRace()); + assertTrue(scn.HasKeyword(gimli, Keyword.DAMAGE)); + assertEquals(1, scn.GetKeywordCount(gimli, Keyword.DAMAGE)); + assertEquals(2, gimli.getBlueprint().getTwilightCost()); + assertEquals(6, gimli.getBlueprint().getStrength()); + assertEquals(3, gimli.getBlueprint().getVitality()); + assertEquals(6, gimli.getBlueprint().getResistance()); + assertEquals(Signet.ARAGORN, gimli.getBlueprint().getSignet()); + } + + @Test + public void GimliAbilityDoesntWorkWith2Twilight() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl gimli = scn.GetFreepsCard("gimli"); + PhysicalCardImpl card1 = scn.GetFreepsCard("card1"); + PhysicalCardImpl card2 = scn.GetFreepsCard("card2"); + scn.FreepsMoveCardToHand(gimli); + scn.FreepsMoveCardToHand(card1); + + scn.StartGame(); + + scn.FreepsPlayCard(gimli); + //the 2 twilight from his cost should disqualify his own action + assertFalse(scn.FreepsActionAvailable(gimli)); + } + + @Test + public void GimliAbilityAdds2TwilightAndPlacesOnBottom() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl gimli = scn.GetFreepsCard("gimli"); + PhysicalCardImpl card1 = scn.GetFreepsCard("card1"); + PhysicalCardImpl card2 = scn.GetFreepsCard("card2"); + PhysicalCardImpl card3 = scn.GetFreepsCard("card3"); + scn.FreepsMoveCharToTable(gimli); + scn.FreepsMoveCardToHand(card1); + scn.FreepsMoveCardsToBottomOfDeck(card3); + + scn.StartGame(); + + assertTrue(scn.FreepsActionAvailable(gimli)); + assertEquals(Zone.HAND, card1.getZone()); + assertEquals(Zone.DECK, card2.getZone()); + assertEquals(scn.GetFreepsTopOfDeck().getBlueprintId(), card2.getBlueprintId()); + assertEquals(Zone.DECK, card3.getZone()); + assertEquals(scn.GetFreepsBottomOfDeck().getBlueprintId(), card3.getBlueprintId()); + + scn.FreepsUseCardAction(gimli); + //card from hand placed on the bottom of the deck + assertEquals(Zone.DECK, card1.getZone()); + assertEquals(scn.GetFreepsBottomOfDeck().getBlueprintId(), card1.getBlueprintId()); + //card from the deck was not drawn (as it is in the errata) + assertEquals(Zone.DECK, card2.getZone()); + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_016_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_016_Tests.java new file mode 100644 index 000000000..7e5428d69 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_016_Tests.java @@ -0,0 +1,128 @@ +package com.gempukku.lotro.cards.official.set01; + +import com.gempukku.lotro.cards.GenericCardTestHelper; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.game.CardNotFoundException; +import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; +import org.junit.Test; + +import java.util.HashMap; + +import static org.junit.Assert.*; + +public class Card_01_016_Tests +{ + + protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException { + return new GenericCardTestHelper( + new HashMap<>() + {{ + put("kingdom", "1_16"); + put("gimli", "1_13"); + put("guard", "1_7"); + + put("runner1", "1_178"); + put("runner2", "1_178"); + put("runner3", "1_178"); + }}, + GenericCardTestHelper.FellowshipSites, + GenericCardTestHelper.FOTRFrodo, + GenericCardTestHelper.FOTRRing + ); + } + + @Test + public void GreatestKingdomofMyPeopleStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { + + /** + * Set: 1 + * Title: Greatest Kingdom of My People + * Unique: True + * Side: FREE_PEOPLE + * Culture: Dwarven + * Twilight Cost: 1 + * Type: condition + * Subtype: Support Area + * Game Text: Tale. To play, exert a Dwarf. + * The first time your opponent plays an Orc each turn, you may take a [dwarven] kingdom into hand from your discard pile. The Shadow player may discard the bottom 2 cards of their draw deck to prevent this. + */ + + //Pre-game setup + var scn = GetScenario(); + + var kingdom = scn.GetFreepsCard("kingdom"); + + assertTrue(kingdom.getBlueprint().isUnique()); + assertEquals(Side.FREE_PEOPLE, kingdom.getBlueprint().getSide()); + assertEquals(Culture.DWARVEN, kingdom.getBlueprint().getCulture()); + assertEquals(CardType.CONDITION, kingdom.getBlueprint().getCardType()); + assertTrue(scn.HasKeyword(kingdom, Keyword.SUPPORT_AREA)); + assertTrue(scn.HasKeyword(kingdom, Keyword.TALE)); + assertEquals(0, kingdom.getBlueprint().getTwilightCost()); + } + + @Test + public void GreatestKingdomExertsADwarfToPlay() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var kingdom = scn.GetFreepsCard("kingdom"); + var gimli = scn.GetFreepsCard("gimli"); + var guard = scn.GetFreepsCard("guard"); + scn.FreepsMoveCharToTable(gimli); + scn.FreepsMoveCardToHand(kingdom, guard); + + scn.AddWoundsToChar(gimli, 2); + + scn.StartGame(); + + assertFalse(scn.FreepsPlayAvailable(kingdom)); + scn.FreepsPlayCard(guard); + assertEquals(0, scn.GetWoundsOn(guard)); + scn.FreepsPlayCard(kingdom); + assertEquals(1, scn.GetWoundsOn(guard)); + } + + @Test + public void GreatestKingdomTriggerDiscardsFromShadowTopDeckEachTime() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var kingdom = scn.GetFreepsCard("kingdom"); + var gimli = scn.GetFreepsCard("gimli"); + var guard = scn.GetFreepsCard("guard"); + scn.FreepsMoveCardToSupportArea(kingdom); + scn.FreepsMoveCardToDiscard(gimli, guard); + scn.FreepsMoveCardToDiscard("runner1", "runner2"); + + var runner1 = scn.GetShadowCard("runner1"); + var runner2 = scn.GetShadowCard("runner2"); + scn.ShadowMoveCardToHand(runner1, runner2); + + scn.StartGame(); + scn.SetTwilight(20); + scn.FreepsPassCurrentPhaseAction(); + + var top1 = scn.GetFromTopOfShadowDeck(1); + var top2 = scn.GetFromTopOfShadowDeck(2); + var top3 = scn.GetFromTopOfShadowDeck(3); + + assertEquals(Zone.DECK, top1.getZone()); + assertEquals(Zone.DECK, top2.getZone()); + assertEquals(Zone.DECK, top3.getZone()); + scn.ShadowPlayCard(runner1); + scn.FreepsResolveActionOrder("0"); + + assertEquals(Zone.DISCARD, top1.getZone()); + assertEquals(Zone.DECK, top2.getZone()); + assertEquals(Zone.DECK, top3.getZone()); + + scn.ShadowPlayCard(runner2); + scn.FreepsResolveActionOrder("0"); + + assertEquals(Zone.DISCARD, top1.getZone()); + assertEquals(Zone.DISCARD, top2.getZone()); + assertEquals(Zone.DECK, top3.getZone()); + + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_017_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_017_Tests.java new file mode 100644 index 000000000..fdd79725c --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_017_Tests.java @@ -0,0 +1,92 @@ +package com.gempukku.lotro.cards.official.set01; + +import com.gempukku.lotro.cards.GenericCardTestHelper; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.game.CardNotFoundException; +import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; +import org.junit.Test; + +import java.util.HashMap; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class Card_01_017_Tests +{ + + protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException { + return new GenericCardTestHelper( + new HashMap<>() + {{ + put("grimir", "1_17"); + put("guard", "1_7"); + put("event", "1_3"); + + put("runner1", "1_178"); + put("runner2", "1_178"); + + }}, + GenericCardTestHelper.FellowshipSites, + GenericCardTestHelper.FOTRFrodo, + GenericCardTestHelper.FOTRRing + ); + } + + @Test + public void GrimirStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { + + /** + * Set: 1 + * Title: Grimir, Dwarven Elder + * Unique: True + * Side: FREE_PEOPLE + * Culture: Dwarven + * Twilight Cost: 1 + * Type: ally + * Subtype: Dwarf + * Strength: 3 + * Vitality: 3 + * Site Number: 3 + * Game Text: Fellowship: Exert Grimir and discard the top grimir of your draw deck to place a [dwarven] event from your discard pile on top of your draw deck. + */ + + //Pre-game setup + var scn = GetScenario(); + + var grimir = scn.GetFreepsCard("grimir"); + + assertTrue(grimir.getBlueprint().isUnique()); + assertEquals(Side.FREE_PEOPLE, grimir.getBlueprint().getSide()); + assertEquals(Culture.DWARVEN, grimir.getBlueprint().getCulture()); + assertEquals(CardType.ALLY, grimir.getBlueprint().getCardType()); + assertEquals(Race.DWARF, grimir.getBlueprint().getRace()); + assertEquals(1, grimir.getBlueprint().getTwilightCost()); + assertEquals(3, grimir.getBlueprint().getStrength()); + assertEquals(3, grimir.getBlueprint().getVitality()); + assertEquals(3, grimir.getBlueprint().getAllyHomeSiteNumbers()[0]); + assertEquals(SitesBlock.FELLOWSHIP, grimir.getBlueprint().getAllyHomeSiteBlock()); + } + + @Test + public void GrimirAbilityExertsAndDiscardsTopDeckToRetrieveDwarvenEvent() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var grimir = scn.GetFreepsCard("grimir"); + var guard = scn.GetFreepsCard("guard"); + var event = scn.GetFreepsCard("event"); + scn.FreepsMoveCharToTable(grimir); + scn.FreepsMoveCardToDiscard(guard, event); + + scn.StartGame(); + + assertTrue(scn.FreepsActionAvailable(grimir)); + + assertEquals(Zone.DISCARD, event.getZone()); + assertEquals(0, scn.GetWoundsOn(grimir)); + scn.FreepsUseCardAction(grimir); + + assertEquals(Zone.DECK, event.getZone()); + assertEquals(1, scn.GetWoundsOn(grimir)); + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_023_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_023_Tests.java new file mode 100644 index 000000000..dbed065f1 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_023_Tests.java @@ -0,0 +1,128 @@ +package com.gempukku.lotro.cards.official.set01; + +import com.gempukku.lotro.cards.GenericCardTestHelper; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.game.CardNotFoundException; +import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; +import org.junit.Test; + +import java.util.HashMap; + +import static org.junit.Assert.*; + +public class Card_01_023_Tests +{ + + protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException { + return new GenericCardTestHelper( + new HashMap<>() + {{ + put("nobody", "1_23"); + put("gimli", "1_13"); + + put("uruk", "1_154"); + put("deck1", "1_126"); + put("deck2", "1_127"); + put("deck3", "1_128"); + put("deck4", "1_129"); + put("deck5", "1_130"); + put("deck6", "1_131"); + }}, + GenericCardTestHelper.FellowshipSites, + GenericCardTestHelper.FOTRFrodo, + GenericCardTestHelper.FOTRRing + ); + } + + @Test + public void NobodyTossesaDwarfStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { + + /** + * Set: 1 + * Title: Nobody Tosses a Dwarf + * Unique: False + * Side: FREE_PEOPLE + * Culture: Dwarven + * Twilight Cost: 0 + * Type: event + * Subtype: Response + * Game Text: If a Dwarf wins a skirmish, discard a Shadow card. Its owner may discard 3 cards from the bottom of their draw deck to prevent this. + */ + + //Pre-game setup + var scn = GetScenario(); + + var nobody = scn.GetFreepsCard("nobody"); + + assertFalse(nobody.getBlueprint().isUnique()); + assertEquals(Side.FREE_PEOPLE, nobody.getBlueprint().getSide()); + assertEquals(Culture.DWARVEN, nobody.getBlueprint().getCulture()); + assertEquals(CardType.EVENT, nobody.getBlueprint().getCardType()); + assertTrue(scn.HasKeyword(nobody, Keyword.RESPONSE)); + assertEquals(0, nobody.getBlueprint().getTwilightCost()); + } + + @Test + public void NobodyDoesNotTriggerIfSkirmishLost() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var nobody = scn.GetFreepsCard("nobody"); + var gimli = scn.GetFreepsCard("gimli"); + scn.FreepsMoveCardToHand(nobody); + scn.FreepsMoveCharToTable(gimli); + + var uruk = scn.GetShadowCard("uruk"); + scn.ShadowMoveCharToTable(uruk); + + scn.StartGame(); + + scn.SkipToAssignments(); + scn.FreepsAssignToMinions(gimli, uruk); + scn.FreepsResolveSkirmish(gimli); + scn.PassCurrentPhaseActions(); + assertFalse(scn.FreepsHasOptionalTriggerAvailable()); + } + + @Test + public void NobodyTriggerDiscardsShadowTopDecks() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var nobody = scn.GetFreepsCard("nobody"); + var gimli = scn.GetFreepsCard("gimli"); + scn.FreepsMoveCardToHand(nobody); + scn.FreepsMoveCharToTable(gimli); + + var uruk = scn.GetShadowCard("uruk"); + scn.ShadowMoveCharToTable(uruk); + scn.StartGame(); + + scn.SkipToAssignments(); + scn.FreepsAssignToMinions(gimli, uruk); + scn.FreepsResolveSkirmish(gimli); + //pump gimli to beat the uruk + scn.FreepsUseCardAction(gimli); + scn.ShadowPassCurrentPhaseAction(); + scn.FreepsPassCurrentPhaseAction(); + + var top1 = scn.GetFromTopOfShadowDeck(1); + var top2 = scn.GetFromTopOfShadowDeck(2); + var top3 = scn.GetFromTopOfShadowDeck(3); + var top4 = scn.GetFromTopOfShadowDeck(4); + + assertEquals(Zone.DECK, top1.getZone()); + assertEquals(Zone.DECK, top2.getZone()); + assertEquals(Zone.DECK, top3.getZone()); + assertEquals(Zone.DECK, top4.getZone()); + + assertTrue(scn.FreepsHasOptionalTriggerAvailable()); + scn.FreepsAcceptOptionalTrigger(); + + assertEquals(Zone.DISCARD, top1.getZone()); + assertEquals(Zone.DISCARD, top2.getZone()); + assertEquals(Zone.DISCARD, top3.getZone()); + assertEquals(Zone.DECK, top4.getZone()); + } + +}