diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set04/set04-Onering.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set04/set04-Onering.hjson index 9252318e9..7976360d0 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set04/set04-Onering.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set04/set04-Onering.hjson @@ -42,6 +42,10 @@ { type: ringIsActive } + { + type: Phase + phase: skirmish + } ] trigger: { type: aboutToTakeWound diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set04/Card_04_001_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set04/Card_04_001_Tests.java index dc8feb574..497d29d01 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set04/Card_04_001_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set04/Card_04_001_Tests.java @@ -1,15 +1,25 @@ package com.gempukku.lotro.cards.official.set04; import com.gempukku.lotro.cards.GenericCardTestHelper; -import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.AbstractActionProxy; import com.gempukku.lotro.game.CardNotFoundException; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; +import com.gempukku.lotro.logic.effects.KillEffect; +import com.gempukku.lotro.logic.effects.PutOnTheOneRingEffect; +import com.gempukku.lotro.logic.modifiers.AddKeywordModifier; +import com.gempukku.lotro.logic.timing.Action; import org.junit.Test; +import java.util.Collections; import java.util.HashMap; +import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; public class Card_04_001_Tests { @@ -18,8 +28,8 @@ public class Card_04_001_Tests return new GenericCardTestHelper( new HashMap<>() {{ - put("card", "4_1"); - // put other cards in here as needed for the test case + put("marksman", "1_176"); + put("soldier", "1_271"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, @@ -28,7 +38,7 @@ public class Card_04_001_Tests } @Test - public void TheOneRingStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { + public void AnswerToAllRiddlesStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { /** * Set: 4 @@ -37,17 +47,18 @@ public class Card_04_001_Tests * Side: * Culture: * Twilight Cost: - * Type: Onering + * Type: The One Ring * Subtype: * Vitality: 2 - * Game Text: While wearing The One Ring, the Ring-bearer is strength +2, and each time he is about to take a wound in a skirmish, add a burden instead.
Skirmish: Add a burden to wear The One Ring until the regroup phase. + * Game Text: While wearing The One Ring, the Ring-bearer is strength +2, and each time he is about to take + * a wound in a skirmish, add a burden instead. + * Skirmish: Add a burden to wear The One Ring until the regroup phase. */ var scn = GetScenario(); //Use this once you have set the deck up properly - //var card = scn.GetFreepsRing(); - var card = scn.GetFreepsCard("card"); + var card = scn.GetFreepsRing(); assertEquals("The One Ring", card.getBlueprint().getTitle()); assertEquals("Answer To All Riddles", card.getBlueprint().getSubtitle()); @@ -56,18 +67,142 @@ public class Card_04_001_Tests assertEquals(2, card.getBlueprint().getVitality()); } - // Uncomment any @Test markers below once this is ready to be used - //@Test - public void TheOneRingTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void AnswerToAllRiddlesPumpsRBPlus2WhenRingIsWorn() throws DecisionResultInvalidException, CardNotFoundException { //Pre-game setup var scn = GetScenario(); - var card = scn.GetFreepsCard("card"); - scn.FreepsMoveCardToHand(card); + var frodo = scn.GetRingBearer(); + var ring = scn.GetFreepsRing(); + + //Cheat and add an ability to Frodo which puts on the One Ring + scn.ApplyAdHocAction(new AbstractActionProxy() { + @Override + public List getPhaseActions(String playerId, LotroGame game) { + ActivateCardAction action = new ActivateCardAction(frodo); + action.appendEffect(new PutOnTheOneRingEffect()); + return Collections.singletonList(action); + } + }); scn.StartGame(); - scn.FreepsPlayCard(card); - assertEquals(0, scn.GetTwilight()); + assertEquals(3, scn.GetStrength(frodo)); + scn.FreepsUseCardAction(frodo); + assertTrue(scn.RBWearingOneRing()); + assertEquals(5, scn.GetStrength(frodo)); + } + + @Test + public void AnswerToAllRiddlesConvertsWoundsDuringSkirmishPhaseWhenRingIsWorn() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var frodo = scn.GetRingBearer(); + var ring = scn.GetFreepsRing(); + + var marksman = scn.GetShadowCard("marksman"); + var soldier = scn.GetShadowCard("soldier"); + scn.ShadowMoveCharToTable(marksman, soldier); + + //Cheat and add an ability to Frodo which puts on the One Ring + scn.ApplyAdHocAction(new AbstractActionProxy() { + @Override + public List getPhaseActions(String playerId, LotroGame game) { + ActivateCardAction action = new ActivateCardAction(frodo); + action.appendEffect(new PutOnTheOneRingEffect()); + return Collections.singletonList(action); + } + }); + + scn.StartGame(); + + scn.FreepsUseCardAction(frodo); + + scn.SkipToPhase(Phase.ARCHERY); + assertTrue(scn.RBWearingOneRing()); + + assertEquals(1, scn.GetBurdens()); + assertEquals(0, scn.GetWoundsOn(frodo)); + + scn.PassCurrentPhaseActions(); + + //Assigned archery wounds + assertEquals(1, scn.GetBurdens()); + //No automatic burden conversion, as we are not in the skirmish phase + assertEquals(1, scn.GetWoundsOn(frodo)); + + //Assignment phase + scn.PassCurrentPhaseActions(); + scn.FreepsDeclineAssignments(); + scn.ShadowAssignToMinions(frodo, soldier); + + scn.FreepsResolveSkirmish(frodo); + scn.FreepsPassCurrentPhaseAction(); + scn.ShadowUseCardAction(soldier); + + //We are now in a skirmish phase, so the burden should have gotten converted + assertEquals(2, scn.GetBurdens()); + assertEquals(1, scn.GetWoundsOn(frodo)); + + scn.PassCurrentPhaseActions(); + + //Regular skirmish wound converted to burden + assertEquals(3, scn.GetBurdens()); + assertEquals(1, scn.GetWoundsOn(frodo)); + } + + @Test + public void AnswerToAllRiddlesSkirmishAbilityAddsABurdenToWearRingUntilRegroup() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var frodo = scn.GetRingBearer(); + var ring = scn.GetFreepsRing(); + + var soldier = scn.GetShadowCard("soldier"); + scn.ShadowMoveCharToTable(soldier); + + scn.StartGame(); + + //Cheat and make orcs fierce + scn.ApplyAdHocModifier(new AddKeywordModifier(null, Filters.changeToFilter(Race.ORC), null, Keyword.FIERCE)); + + scn.SkipToAssignments(); + + assertEquals(1, scn.GetBurdens()); + assertEquals(0, scn.GetWoundsOn(frodo)); + + scn.FreepsAssignToMinions(frodo, soldier); + scn.FreepsResolveSkirmish(frodo); + + assertTrue(scn.FreepsActionAvailable(ring)); + scn.FreepsUseCardAction(ring); + + assertTrue(scn.RBWearingOneRing()); + assertEquals(2, scn.GetBurdens()); + assertEquals(0, scn.GetWoundsOn(frodo)); + + scn.ShadowPassCurrentPhaseAction(); + scn.FreepsPassCurrentPhaseAction(); + + //We are now in a skirmish phase, so the burden should have gotten converted + assertEquals(3, scn.GetBurdens()); + assertEquals(0, scn.GetWoundsOn(frodo)); + + //Fierce skirmish + scn.PassCurrentPhaseActions(); + + scn.FreepsAssignToMinions(frodo, soldier); + scn.FreepsResolveSkirmish(frodo); + + assertTrue(scn.RBWearingOneRing()); + + scn.PassCurrentPhaseActions(); + assertEquals(4, scn.GetBurdens()); // 1 more from losing skirmish + assertEquals(0, scn.GetWoundsOn(frodo)); + + assertEquals(Phase.REGROUP, scn.GetCurrentPhase()); + assertFalse(scn.RBWearingOneRing()); } }