diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set11/set11-Onering.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set11/set11-Onering.hjson index 6386629d6..7b2245526 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set11/set11-Onering.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set11/set11-Onering.hjson @@ -24,9 +24,17 @@ effects: [ { type: Response - requires: { - type: ringIsActive - } + requires: [ + { + type: ringIsActive + } + { + type: Not + requires: { + type: RingIsOn + } + } + ] trigger: { type: aboutToTakeWound filter: bearer diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set11/Card_11_001_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set11/Card_11_001_Tests.java index 6aca4498e..7d969af02 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set11/Card_11_001_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set11/Card_11_001_Tests.java @@ -2,12 +2,19 @@ package com.gempukku.lotro.cards.official.set11; import com.gempukku.lotro.cards.GenericCardTestHelper; import com.gempukku.lotro.common.*; +import com.gempukku.lotro.game.AbstractActionProxy; import com.gempukku.lotro.game.CardNotFoundException; import com.gempukku.lotro.game.PhysicalCardImpl; +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.PutOnTheOneRingEffect; +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.*; @@ -18,17 +25,26 @@ public class Card_11_001_Tests return new GenericCardTestHelper( new HashMap<>() {{ - put("card", "11_1"); - // put other cards in here as needed for the test case + put("sword", "1_299"); + //Shadow wounding + put("snuffler", "13_52"); + //Maneuver wounding + put("picket", "6_101"); + //Archery wounding + put("marksman", "1_176"); + //Skirmish wounding + put("soldier", "1_271"); + //Regroup wounding + put("gollum", "9_28"); }}, GenericCardTestHelper.FellowshipSites, GenericCardTestHelper.FOTRFrodo, - GenericCardTestHelper.RulingRing + "11_1" ); } @Test - public void TheOneRingStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { + public void RingOfRingsStatsAndKeywordsAreCorrect() throws DecisionResultInvalidException, CardNotFoundException { /** * Set: 11 @@ -46,8 +62,7 @@ public class Card_11_001_Tests 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("The Ring of Rings", card.getBlueprint().getSubtitle()); @@ -56,18 +71,130 @@ public class Card_11_001_Tests assertEquals(2, card.getBlueprint().getResistance()); } - // Uncomment any @Test markers below once this is ready to be used - //@Test - public void TheOneRingTest1() throws DecisionResultInvalidException, CardNotFoundException { + @Test + public void RingOfRingsConvertsWoundsDuringAnyPhaseWhenRingIsWorn() 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(); + + scn.FreepsAttachCardsTo(frodo, "sword"); + + var marksman = scn.GetShadowCard("marksman"); + var soldier = scn.GetShadowCard("soldier"); + var picket = scn.GetShadowCard("picket"); + var snuffler = scn.GetShadowCard("snuffler"); + var gollum = scn.GetShadowCard("gollum"); + scn.ShadowMoveCharToTable(marksman, soldier, picket, gollum); + scn.ShadowMoveCardToHand(snuffler); + + //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()); + scn.FreepsUseCardAction(frodo); + + assertEquals(1, scn.GetBurdens()); + assertEquals(0, scn.GetWoundsOn(frodo)); + + scn.FreepsPassCurrentPhaseAction(); + + //Shadow wounds can convert to burdens + assertTrue(scn.RBWearingOneRing()); + assertTrue(scn.ShadowPlayAvailable(snuffler)); + scn.ShadowPlayCard(snuffler); + assertEquals(2, scn.GetBurdens()); + assertEquals(0, scn.GetWoundsOn(frodo)); + + scn.ShadowPassCurrentPhaseAction(); + + //Maneuver wounds can convert to burdens + assertTrue(scn.RBWearingOneRing()); + scn.FreepsPassCurrentPhaseAction(); + scn.ShadowUseCardAction(picket); + scn.FreepsDeclineOptionalTrigger(); + assertEquals(3, scn.GetBurdens()); + assertEquals(0, scn.GetWoundsOn(frodo)); + + scn.PassCurrentPhaseActions(); + + //Archery wounds can convert to burdens + assertTrue(scn.RBWearingOneRing()); + scn.PassCurrentPhaseActions(); + + assertEquals(4, scn.GetBurdens()); + assertEquals(0, 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 + assertTrue(scn.RBWearingOneRing()); + assertEquals(5, scn.GetBurdens()); + assertEquals(0, scn.GetWoundsOn(frodo)); + + scn.PassCurrentPhaseActions(); + + //Regular skirmish wound converted to burden + assertEquals(6, scn.GetBurdens()); + assertEquals(0, scn.GetWoundsOn(frodo)); + + assertEquals(Phase.REGROUP, scn.GetCurrentPhase()); + //Got taken off at the start of the regroup phase + assertFalse(scn.RBWearingOneRing()); + scn.FreepsUseCardAction(frodo); + assertTrue(scn.RBWearingOneRing()); + + //Regroup wounds cannot convert to burdens + scn.ShadowChooseAction("wound"); //We want DaD's wounding action, not his 3 twilight action + assertEquals(7, scn.GetBurdens()); + assertEquals(0, scn.GetWoundsOn(frodo)); + } + + @Test + public void RingOfRingsRespondsToAnyWoundToWearRingUntilRegroup() throws DecisionResultInvalidException, CardNotFoundException { + //Pre-game setup + var scn = GetScenario(); + + var frodo = scn.GetRingBearer(); + var ring = scn.GetFreepsRing(); + + var picket = scn.GetShadowCard("picket"); + scn.ShadowMoveCharToTable(picket); + + scn.StartGame(); + + scn.SkipToPhase(Phase.MANEUVER); + + assertEquals(1, scn.GetBurdens()); + assertEquals(0, scn.GetWoundsOn(frodo)); + assertFalse(scn.RBWearingOneRing()); + + scn.FreepsPassCurrentPhaseAction(); + scn.ShadowUseCardAction(picket); + scn.FreepsDeclineOptionalTrigger(); //Declining the Picket's culture selection. + + //One Ring response + assertTrue(scn.FreepsHasOptionalTriggerAvailable()); + + scn.FreepsAcceptOptionalTrigger(); + assertEquals(2, scn.GetBurdens()); + assertEquals(0, scn.GetWoundsOn(frodo)); + assertTrue(scn.RBWearingOneRing()); } }