From 3ad660aaa7a7da8572394582a96920026906e22c Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Tue, 26 Jul 2022 06:09:21 -0500 Subject: [PATCH] Completed the single remaining Ringwraith V1 revamp and finished up the missing unit tests for that culture --- .../set101/set101_ringwraith_playtest.json | 27 ++++ .../field/effect/filter/FilterFactory.java | 1 + .../pc/vset1/vpack1/Card_V1_040_Tests.java | 100 +++++++++++---- .../pc/vset1/vpack1/Card_V1_041_Tests.java | 116 +++++++++++++++--- .../pc/vset1/vpack1/Card_V1_042_Tests.java | 98 +++++++++++---- .../pc/vset1/vpack1/Card_V1_043_Tests.java | 93 ++++++++++---- 6 files changed, 345 insertions(+), 90 deletions(-) diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_ringwraith_playtest.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_ringwraith_playtest.json index 3720780c4..474d4da54 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_ringwraith_playtest.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set101/set101_ringwraith_playtest.json @@ -144,6 +144,33 @@ "multiplier": 1 } } + }, + { + "type": "trigger", + "trigger": { + "type": "startofphase", + "phase": "maneuver" + }, + "optional": true, + "cost": { + "type": "exert", + "filter": "self" + }, + "effect": { + "type": "preventable", + "effect": { + "type": "addKeyword", + "filter": "self", + "keyword": "fierce", + "until": "start(regroup)", + }, + "text": "Would you like to exert the Ring-bearer to prevent this minion from being fierce?", + "player": "freeps", + "cost": { + "type": "exert", + "filter": "choose(ring-bearer)" + } + } } ] }, diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java index eeee31466..990f81151 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/filter/FilterFactory.java @@ -31,6 +31,7 @@ public class FilterFactory { simpleFilters.put("ring bearer", (actionContext) -> Filters.ringBearer); simpleFilters.put("ringbearer", (actionContext) -> Filters.ringBearer); + simpleFilters.put("ring-bearer", (actionContext) -> Filters.ringBearer); simpleFilters.put("any", (actionContext) -> Filters.any); simpleFilters.put("self", (actionContext) -> actionContext.getSource()); simpleFilters.put("another", (actionContext) -> Filters.not(actionContext.getSource())); diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_040_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_040_Tests.java index fe6b7da56..d1cbcc1c5 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_040_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_040_Tests.java @@ -22,7 +22,7 @@ public class Card_V1_040_Tests return new GenericCardTestHelper( new HashMap() {{ - put("card", "151_40"); + put("rit", "151_40"); // put other cards in here as needed for the test case }}, GenericCardTestHelper.FellowshipSites, @@ -31,9 +31,7 @@ public class Card_V1_040_Tests ); } - // Uncomment both @Test markers below once this is ready to be used - - //@Test + @Test public void RingwraithinTwilightStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { /** @@ -55,34 +53,90 @@ public class Card_V1_040_Tests //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); + PhysicalCardImpl rit = scn.GetFreepsCard("rit"); - assertFalse(card.getBlueprint().isUnique()); - assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide()); - assertEquals(Culture.WRAITH, card.getBlueprint().getCulture()); - assertEquals(CardType.MINION, card.getBlueprint().getCardType()); - assertEquals(Race.CREATURE, card.getBlueprint().getRace()); - assertTrue(scn.HasKeyword(card, Keyword.SUPPORT_AREA)); // test for keywords as needed - assertEquals(4, card.getBlueprint().getTwilightCost()); - assertEquals(9, card.getBlueprint().getStrength()); - assertEquals(3, card.getBlueprint().getVitality()); - //assertEquals(, card.getBlueprint().getResistance()); - //assertEquals(Signet., card.getBlueprint().getSignet()); - assertEquals(3, card.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies + assertFalse(rit.getBlueprint().isUnique()); + assertEquals(Side.SHADOW, rit.getBlueprint().getSide()); + assertEquals(Culture.WRAITH, rit.getBlueprint().getCulture()); + assertEquals(CardType.MINION, rit.getBlueprint().getCardType()); + assertEquals(Race.NAZGUL, rit.getBlueprint().getRace()); + assertTrue(scn.HasKeyword(rit, Keyword.TWILIGHT)); // test for keywords as needed + assertEquals(4, rit.getBlueprint().getTwilightCost()); + assertEquals(9, rit.getBlueprint().getStrength()); + assertEquals(3, rit.getBlueprint().getVitality()); + //assertEquals(, rit.getBlueprint().getResistance()); + //assertEquals(Signet., rit.getBlueprint().getSignet()); + assertEquals(3, rit.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies } - //@Test - public void RingwraithinTwilightTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void RITIsStrengthPlusOnePerWoundOnTheRB() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + PhysicalCardImpl frodo = scn.GetRingBearer(); + + PhysicalCardImpl rit = scn.GetShadowCard("rit"); + scn.ShadowMoveCharToTable(rit); scn.StartGame(); - scn.FreepsPlayCard(card); - assertEquals(4, scn.GetTwilight()); + assertEquals(9, scn.GetStrength(rit)); + scn.AddWoundsToChar(frodo, 1); + assertEquals(10, scn.GetStrength(rit)); + scn.AddWoundsToChar(frodo, 1); + assertEquals(11, scn.GetStrength(rit)); + scn.AddWoundsToChar(frodo, 1); + assertEquals(12, scn.GetStrength(rit)); + } + + @Test + public void ManeuverActionMakesRITFierce() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl frodo = scn.GetRingBearer(); + + PhysicalCardImpl rit = scn.GetShadowCard("rit"); + scn.ShadowMoveCharToTable(rit); + + scn.StartGame(); + + assertFalse(scn.HasKeyword(rit, Keyword.FIERCE)); + + scn.SkipToPhase(Phase.MANEUVER); + assertTrue(scn.ShadowHasOptionalTriggerAvailable()); + scn.ShadowAcceptOptionalTrigger(); + scn.FreepsChooseNo(); + + assertTrue(scn.HasKeyword(rit, Keyword.FIERCE)); + + scn.SkipToPhase(Phase.ASSIGNMENT); + + assertTrue(scn.HasKeyword(rit, Keyword.FIERCE)); + } + + @Test + public void FreepsCanPreventManeuverActionByExertingRingBearer() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl frodo = scn.GetRingBearer(); + + PhysicalCardImpl rit = scn.GetShadowCard("rit"); + scn.ShadowMoveCharToTable(rit); + + scn.StartGame(); + + assertFalse(scn.HasKeyword(rit, Keyword.FIERCE)); + assertEquals(0, scn.GetWoundsOn(frodo)); + + scn.SkipToPhase(Phase.MANEUVER); + scn.ShadowAcceptOptionalTrigger(); + assertTrue(scn.FreepsDecisionAvailable("prevent")); + scn.FreepsChooseYes(); + + assertFalse(scn.HasKeyword(rit, Keyword.FIERCE)); } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_041_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_041_Tests.java index 61c311f2d..6563d96e7 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_041_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_041_Tests.java @@ -22,8 +22,13 @@ public class Card_V1_041_Tests return new GenericCardTestHelper( new HashMap() {{ - put("card", "151_41"); - // put other cards in here as needed for the test case + put("eyes", "151_41"); + put("twigul", "2_83"); + + put("filler1", "2_75"); + put("filler2", "2_75"); + put("filler3", "2_75"); + }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -31,9 +36,7 @@ public class Card_V1_041_Tests ); } - // Uncomment both @Test markers below once this is ready to be used - - //@Test + @Test public void TheirEyesFellUponHimStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { /** @@ -51,15 +54,15 @@ public class Card_V1_041_Tests //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); + PhysicalCardImpl eyes = scn.GetFreepsCard("eyes"); - assertFalse(card.getBlueprint().isUnique()); - assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide()); - assertEquals(Culture.WRAITH, card.getBlueprint().getCulture()); - assertEquals(CardType.CONDITION, card.getBlueprint().getCardType()); + assertFalse(eyes.getBlueprint().isUnique()); + assertEquals(Side.SHADOW, eyes.getBlueprint().getSide()); + assertEquals(Culture.WRAITH, eyes.getBlueprint().getCulture()); + assertEquals(CardType.CONDITION, eyes.getBlueprint().getCardType()); //assertEquals(Race.CREATURE, card.getBlueprint().getRace()); - assertTrue(scn.HasKeyword(card, Keyword.SUPPORT_AREA)); // test for keywords as needed - assertEquals(1, card.getBlueprint().getTwilightCost()); + assertTrue(scn.HasKeyword(eyes, Keyword.SUPPORT_AREA)); // test for keywords as needed + assertEquals(1, eyes.getBlueprint().getTwilightCost()); //assertEquals(, card.getBlueprint().getStrength()); //assertEquals(, card.getBlueprint().getVitality()); //assertEquals(, card.getBlueprint().getResistance()); @@ -68,17 +71,94 @@ public class Card_V1_041_Tests } - //@Test - public void TheirEyesFellUponHimTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void RequiresATwigulToPlay() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + PhysicalCardImpl eyes = scn.GetShadowCard("eyes"); + PhysicalCardImpl twigul = scn.GetShadowCard("twigul"); + scn.ShadowMoveCardToHand(eyes, twigul); scn.StartGame(); - scn.FreepsPlayCard(card); - assertEquals(1, scn.GetTwilight()); + scn.SetTwilight(10); + scn.FreepsPassCurrentPhaseAction(); + + assertFalse(scn.ShadowCardPlayAvailable(eyes)); + scn.ShadowPlayCard(twigul); + assertTrue(scn.ShadowCardPlayAvailable(eyes)); } + + @Test + public void EachMoveDrawsACardIfRingBearerIsWounded() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl frodo = scn.GetRingBearer(); + + PhysicalCardImpl eyes = scn.GetShadowCard("eyes"); + scn.ShadowMoveCardToSupportArea(eyes); + + scn.StartGame(); + + assertEquals(0, scn.GetWoundsOn(frodo)); + assertEquals(0, scn.GetShadowHandCount()); + assertEquals(4, scn.GetShadowDeckCount()); + + scn.AddWoundsToChar(frodo, 1); + scn.FreepsPassCurrentPhaseAction(); + + assertEquals(1, scn.GetWoundsOn(frodo)); + assertEquals(1, scn.GetShadowHandCount()); + assertEquals(3, scn.GetShadowDeckCount()); + } + + @Test + public void MovingDrawsNoCardsIfRingBearerUnwounded() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl frodo = scn.GetRingBearer(); + + PhysicalCardImpl eyes = scn.GetShadowCard("eyes"); + scn.ShadowMoveCardToSupportArea(eyes); + + scn.StartGame(); + + assertEquals(0, scn.GetWoundsOn(frodo)); + assertEquals(0, scn.GetShadowHandCount()); + assertEquals(4, scn.GetShadowDeckCount()); + scn.FreepsPassCurrentPhaseAction(); + + assertEquals(0, scn.GetWoundsOn(frodo)); + assertEquals(0, scn.GetShadowHandCount()); + assertEquals(4, scn.GetShadowDeckCount()); + } + + @Test + public void MovingDraws2CardsIfRingBearerExhausted() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl frodo = scn.GetRingBearer(); + + PhysicalCardImpl eyes = scn.GetShadowCard("eyes"); + scn.ShadowMoveCardToSupportArea(eyes); + + scn.StartGame(); + + assertEquals(0, scn.GetWoundsOn(frodo)); + assertEquals(0, scn.GetShadowHandCount()); + assertEquals(4, scn.GetShadowDeckCount()); + + scn.AddWoundsToChar(frodo, 3); + scn.FreepsPassCurrentPhaseAction(); + + assertEquals(3, scn.GetWoundsOn(frodo)); + assertEquals(2, scn.GetShadowHandCount()); + assertEquals(2, scn.GetShadowDeckCount()); + } + + } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_042_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_042_Tests.java index a7771c080..1fe970f77 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_042_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_042_Tests.java @@ -22,8 +22,18 @@ public class Card_V1_042_Tests return new GenericCardTestHelper( new HashMap() {{ - put("card", "151_42"); - // put other cards in here as needed for the test case + put("walks", "151_42"); + put("twigul1", "2_82"); + put("twigul2", "2_84"); + put("nazgul", "1_232"); + + put("filler1", "2_75"); + put("filler2", "2_75"); + + put("guard1", "1_7"); + put("guard2", "1_7"); + put("arwen", "1_30"); + put("gwemegil", "1_47"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -31,9 +41,7 @@ public class Card_V1_042_Tests ); } - // Uncomment both @Test markers below once this is ready to be used - - //@Test + @Test public void WalksinTwilightStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { /** @@ -44,40 +52,80 @@ public class Card_V1_042_Tests * Twilight Cost: 2 * Type: condition * Subtype: Support Area - * Game Text: Each time a twilight Nazgul wins a skirmish, you may exert a twilight Nazgul to shuffle a [ringwraith] card from your discard pile into your draw deck. + * Game Text: Each time a twilight Nazgul wins a skirmish, you may exert a twilight Nazgul to shuffle a [ringwraith] walks from your discard pile into your draw deck. */ //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); + PhysicalCardImpl walks = scn.GetFreepsCard("walks"); - assertTrue(card.getBlueprint().isUnique()); - assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide()); - assertEquals(Culture.WRAITH, card.getBlueprint().getCulture()); - assertEquals(CardType.CONDITION, card.getBlueprint().getCardType()); - //assertEquals(Race.CREATURE, card.getBlueprint().getRace()); - assertTrue(scn.HasKeyword(card, Keyword.SUPPORT_AREA)); // test for keywords as needed - assertEquals(2, 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 + assertTrue(walks.getBlueprint().isUnique()); + assertEquals(Side.SHADOW, walks.getBlueprint().getSide()); + assertEquals(Culture.WRAITH, walks.getBlueprint().getCulture()); + assertEquals(CardType.CONDITION, walks.getBlueprint().getCardType()); + //assertEquals(Race.CREATURE, walks.getBlueprint().getRace()); + assertTrue(scn.HasKeyword(walks, Keyword.SUPPORT_AREA)); // test for keywords as needed + assertEquals(2, walks.getBlueprint().getTwilightCost()); + //assertEquals(, walks.getBlueprint().getStrength()); + //assertEquals(, walks.getBlueprint().getVitality()); + //assertEquals(, walks.getBlueprint().getResistance()); + //assertEquals(Signet., walks.getBlueprint().getSignet()); + //assertEquals(, walks.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies } - //@Test - public void WalksinTwilightTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void EachTwigulSkirmishVictory() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + PhysicalCardImpl guard1 = scn.GetFreepsCard("guard1"); + PhysicalCardImpl guard2 = scn.GetFreepsCard("guard2"); + PhysicalCardImpl arwen = scn.GetFreepsCard("arwen"); + scn.FreepsMoveCharToTable(guard1, guard2, arwen); + scn.FreepsAttachCardsTo(arwen, "gwemegil"); + + PhysicalCardImpl walks = scn.GetShadowCard("walks"); + PhysicalCardImpl twigul1 = scn.GetShadowCard("twigul1"); + PhysicalCardImpl twigul2 = scn.GetShadowCard("twigul2"); + PhysicalCardImpl nazgul = scn.GetShadowCard("nazgul"); + PhysicalCardImpl filler1 = scn.GetShadowCard("filler1"); + scn.ShadowMoveCardToSupportArea(walks); + scn.ShadowMoveCharToTable(twigul1, twigul2, nazgul); + scn.ShadowMoveCardToDiscard(filler1); scn.StartGame(); - scn.FreepsPlayCard(card); - assertEquals(2, scn.GetTwilight()); + scn.SkipToPhase(Phase.ASSIGNMENT); + scn.PassCurrentPhaseActions(); + + scn.FreepsAssignToMinions( + new PhysicalCardImpl[]{guard1, twigul1}, + new PhysicalCardImpl[]{arwen, twigul2}, + new PhysicalCardImpl[]{guard2, nazgul}); + + scn.FreepsResolveSkirmish(guard1); + scn.PassCurrentPhaseActions(); + + assertTrue(scn.ShadowHasOptionalTriggerAvailable()); + scn.ShadowAcceptOptionalTrigger(); + assertTrue(scn.ShadowDecisionAvailable("")); + assertEquals(2, scn.GetShadowCardChoiceCount()); + assertEquals(0, scn.GetWoundsOn(twigul1)); + assertEquals(Zone.DISCARD, filler1.getZone()); + scn.ShadowChooseCard(twigul1); + assertEquals(1, scn.GetWoundsOn(twigul1)); + assertEquals(Zone.DECK, filler1.getZone()); + + scn.FreepsResolveSkirmish(arwen); + assertEquals(11, scn.GetStrength(arwen)); + assertEquals(10, scn.GetStrength(twigul2)); + scn.PassCurrentPhaseActions(); + assertFalse(scn.ShadowHasOptionalTriggerAvailable()); + + scn.FreepsResolveSkirmish(guard2); + scn.PassCurrentPhaseActions(); + assertFalse(scn.ShadowHasOptionalTriggerAvailable()); } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_043_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_043_Tests.java index b347376ea..1bc7cb33a 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_043_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/vset1/vpack1/Card_V1_043_Tests.java @@ -22,8 +22,9 @@ public class Card_V1_043_Tests return new GenericCardTestHelper( new HashMap() {{ - put("card", "151_43"); - // put other cards in here as needed for the test case + put("faces", "151_43"); + put("twigul", "2_82"); + put("wk", "2_85"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -31,9 +32,7 @@ public class Card_V1_043_Tests ); } - // Uncomment both @Test markers below once this is ready to be used - - //@Test + @Test public void WhiteFacesBurnedStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { /** @@ -50,34 +49,80 @@ public class Card_V1_043_Tests //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); + PhysicalCardImpl faces = scn.GetFreepsCard("faces"); - assertFalse(card.getBlueprint().isUnique()); - assertEquals(Side.FREE_PEOPLE, card.getBlueprint().getSide()); - assertEquals(Culture.WRAITH, card.getBlueprint().getCulture()); - assertEquals(CardType.EVENT, card.getBlueprint().getCardType()); - //assertEquals(Race.CREATURE, card.getBlueprint().getRace()); - assertTrue(scn.HasKeyword(card, Keyword.SUPPORT_AREA)); // test for keywords as needed - assertEquals(1, 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 + assertFalse(faces.getBlueprint().isUnique()); + assertEquals(Side.SHADOW, faces.getBlueprint().getSide()); + assertEquals(Culture.WRAITH, faces.getBlueprint().getCulture()); + assertEquals(CardType.EVENT, faces.getBlueprint().getCardType()); + //assertEquals(Race.CREATURE, faces.getBlueprint().getRace()); + assertTrue(scn.HasKeyword(faces, Keyword.SKIRMISH)); // test for keywords as needed + assertEquals(1, faces.getBlueprint().getTwilightCost()); + //assertEquals(, faces.getBlueprint().getStrength()); + //assertEquals(, faces.getBlueprint().getVitality()); + //assertEquals(, faces.getBlueprint().getResistance()); + //assertEquals(Signet., faces.getBlueprint().getSignet()); + //assertEquals(, faces.getBlueprint().getSiteNumber()); // Change this to getAllyHomeSiteNumbers for allies } - //@Test - public void WhiteFacesBurnedTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void FacesAddsOneStrengthPerWoundOnTheRB() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup GenericCardTestHelper scn = GetScenario(); - PhysicalCardImpl card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + PhysicalCardImpl frodo = scn.GetRingBearer(); + + PhysicalCardImpl faces = scn.GetShadowCard("faces"); + PhysicalCardImpl twigul = scn.GetShadowCard("twigul"); + scn.ShadowMoveCharToTable(twigul); + scn.ShadowMoveCardToHand(faces); scn.StartGame(); - scn.FreepsPlayCard(card); - assertEquals(1, scn.GetTwilight()); + scn.AddWoundsToChar(frodo, 3); + + scn.SkipToPhase(Phase.ASSIGNMENT); + scn.PassCurrentPhaseActions(); + scn.FreepsAssignToMinions(frodo, twigul); + scn.FreepsResolveSkirmish(frodo); + scn.FreepsPassCurrentPhaseAction(); + + assertEquals(12, scn.GetStrength(twigul)); + assertEquals(3, scn.GetWoundsOn(frodo)); + assertTrue(scn.ShadowCardPlayAvailable(faces)); + scn.ShadowPlayCard(faces); + assertEquals(15, scn.GetStrength(twigul)); + } + + @Test + public void FacesMakesWitchKingDamagePlusOne() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + GenericCardTestHelper scn = GetScenario(); + + PhysicalCardImpl frodo = scn.GetRingBearer(); + + PhysicalCardImpl faces = scn.GetShadowCard("faces"); + PhysicalCardImpl wk = scn.GetShadowCard("wk"); + scn.ShadowMoveCharToTable(wk); + scn.ShadowMoveCardToHand(faces); + + scn.StartGame(); + + scn.SkipToPhase(Phase.ASSIGNMENT); + scn.PassCurrentPhaseActions(); + scn.FreepsAssignToMinions(frodo, wk); + scn.FreepsResolveSkirmish(frodo); + scn.FreepsPassCurrentPhaseAction(); + + assertEquals(14, scn.GetStrength(wk)); + assertFalse(scn.HasKeyword(wk, Keyword.DAMAGE)); + assertEquals(0, scn.GetWoundsOn(frodo)); + assertTrue(scn.ShadowCardPlayAvailable(faces)); + + scn.ShadowPlayCard(faces); + assertEquals(14, scn.GetStrength(wk)); + assertTrue(scn.HasKeyword(wk, Keyword.DAMAGE)); + assertEquals(1, scn.GetKeywordCount(wk, Keyword.DAMAGE)); } }