diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/errata/set08/set08-Gondor-errata.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/errata/set08/set08-Gondor-errata.hjson index a97984026..e20046d3b 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/errata/set08/set08-Gondor-errata.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/unofficial/pc/errata/set08/set08-Gondor-errata.hjson @@ -1,4 +1,79 @@ { + + 78_43: { + cardInfo: { + //Either a full URL, or a subpath for the PC image server + imagePath: errata/LOTR-EN08E043.1_card.jpg + //If this is true, then all gameplay-related info outside this cardInfo definition + // will be ignored and the java class loaded instead. + javaClass: false + //This instructs the blueprint generator to insert this card as an alt of the listed + // parent blueprint. Can of course be ommitted if not an errata or promo. + parent: 8_43 + //This is the tree path to use within the alts structure on the parent. + // Can of course be ommitted if parent is null. + parentPath: errata/pc + //Versioning differentiates releases within a particular alt path, such as PC errata + // version 1 vs version 2. PC version 2 will not conflict with, say, Decipher version 2. + //Top-level cards should always be version 0. + version: 1 + collInfo: 8R43 + rarity: R + setNum: "8" + cardNum: 43 + // Standard, Masterwork, Tengwar, FullArt, etc. Top-level cards are always Standard. + style: Standard + } + title: Shadow Host + unique: true + side: Free Peoples + culture: Gondor + twilight: 5 + type: Companion + race: Wraith + keyword: enduring + strength: 9 + vitality: 3 + signet: Aragorn + resistance: 6 + requires: { + type: canSpot + filter: culture(gondor),wraith + } + effects: [ + { + type: ExtraCost + cost: { + type: AddThreats + amount: 2 + } + } + { + type: modifier + modifier: { + type: addKeyword + requires: { + type: CanSpot + filter: self,exhausted + } + filter: self + keyword: defender+1 + } + } + ] + gametext: Enduring. To play, spot 2 [gondor] Wraiths and add 2 threats.
While Shadow Host is exhausted, it is defender +1. + lore: “...fear went on before them, until they came to Calembel upon Ciril, and the sun went down like blood behind Pinnath Gelin....” + promotext: "" + alts: { + //These are just CardInfo objects + promos: { + } + //These are full card definitions, with redundant info that is the same as the original card ommitted + errata: { + } + } + } + 58_48: { cardInfo: { //Either a full URL, or a subpath for the PC image server diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set08/Card_08_043_ErrataTests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set08/Card_08_043_ErrataTests.java new file mode 100644 index 000000000..0c060eedf --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/unofficial/pc/errata/set08/Card_08_043_ErrataTests.java @@ -0,0 +1,113 @@ +package com.gempukku.lotro.cards.unofficial.pc.errata.set08; + +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_08_043_ErrataTests +{ + + protected GenericCardTestHelper GetScenario() throws CardNotFoundException, DecisionResultInvalidException { + return new GenericCardTestHelper( + new HashMap<>() + {{ + put("host", "78_43"); + put("wraith1", "8_41"); + put("wraith2", "8_41"); + }}, + GenericCardTestHelper.FellowshipSites, + GenericCardTestHelper.FOTRFrodo, + GenericCardTestHelper.FOTRRing + ); + } + + @Test + public void ShadowHostStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { + + /** + * Set: 8 + * Title: Shadow Host + * Unique: True + * Side: FREE_PEOPLE + * Culture: Gondor + * Twilight Cost: 5 + * Type: companion + * Subtype: Wraith + * Strength: 9 + * Vitality: 3 + * Signet: Aragorn + * Game Text: Enduring. To play, spot 2 [gondor] Wraiths and add 2 threats. + * While Shadow Host is exhausted, it is defender +1. + */ + + //Pre-game setup + var scn = GetScenario(); + + var host = scn.GetFreepsCard("host"); + + assertTrue(host.getBlueprint().isUnique()); + assertEquals(Side.FREE_PEOPLE, host.getBlueprint().getSide()); + assertEquals(Culture.GONDOR, host.getBlueprint().getCulture()); + assertEquals(CardType.COMPANION, host.getBlueprint().getCardType()); + assertEquals(Race.WRAITH, host.getBlueprint().getRace()); + assertTrue(scn.HasKeyword(host, Keyword.ENDURING)); + assertEquals(5, host.getBlueprint().getTwilightCost()); + assertEquals(9, host.getBlueprint().getStrength()); + assertEquals(3, host.getBlueprint().getVitality()); + assertEquals(6, host.getBlueprint().getResistance()); + assertEquals(Signet.ARAGORN, host.getBlueprint().getSignet()); + } + + @Test + public void HostRequires2GondorWraithsAnd2ThreatsToPlay() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var host = scn.GetFreepsCard("host"); + var wraith1 = scn.GetFreepsCard("wraith1"); + var wraith2 = scn.GetFreepsCard("wraith2"); + scn.FreepsMoveCardToHand(host, wraith1, wraith2); + + scn.StartGame(); + + assertFalse(scn.FreepsPlayAvailable(host)); + scn.FreepsPlayCard(wraith1); + scn.RemoveThreats(1); + assertFalse(scn.FreepsPlayAvailable(host)); + scn.FreepsPlayCard(wraith2); + scn.RemoveThreats(1); + assertTrue(scn.FreepsPlayAvailable(host)); + + assertEquals(0, scn.GetThreats()); + assertEquals(0, scn.GetWoundsOn(wraith1)); + assertEquals(0, scn.GetWoundsOn(wraith2)); + scn.FreepsPlayCard(host); + assertEquals(2, scn.GetThreats()); + assertEquals(0, scn.GetWoundsOn(wraith1)); + assertEquals(0, scn.GetWoundsOn(wraith2)); + } + + @Test + public void HostIsDefenderPlus1IfExhausted() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var host = scn.GetFreepsCard("host"); + scn.FreepsMoveCharToTable(host); + + scn.StartGame(); + + assertFalse(scn.HasKeyword(host, Keyword.DEFENDER)); + scn.AddWoundsToChar(host, 1); + assertFalse(scn.HasKeyword(host, Keyword.DEFENDER)); + scn.AddWoundsToChar(host, 1); + assertTrue(scn.HasKeyword(host, Keyword.DEFENDER)); + assertEquals(1, scn.GetKeywordCount(host, Keyword.DEFENDER)); + } +}