From 67ab0bc59093af5cb772a5fe02fb87ed2d672423 Mon Sep 17 00:00:00 2001 From: Susucre <34709007+Susucre@users.noreply.github.com> Date: Sat, 2 Sep 2023 14:07:39 +0200 Subject: [PATCH] [WOE] Graceful Takedown - fixed that it doesn't work (#11091) * [WOE] fix Graceful Takedown * add tests --- .../src/mage/cards/g/GracefulTakedown.java | 9 +- .../single/woe/GracefulTakedownTest.java | 101 ++++++++++++++++++ 2 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/woe/GracefulTakedownTest.java diff --git a/Mage.Sets/src/mage/cards/g/GracefulTakedown.java b/Mage.Sets/src/mage/cards/g/GracefulTakedown.java index de212d49f65..2c946a8ba44 100644 --- a/Mage.Sets/src/mage/cards/g/GracefulTakedown.java +++ b/Mage.Sets/src/mage/cards/g/GracefulTakedown.java @@ -73,7 +73,7 @@ class GracefulTakedownTarget extends TargetPermanent { .stream() .map(game::getPermanent) .filter(Objects::nonNull) - .allMatch(p -> EnchantedPredicate.instance.apply(p, game))); + .allMatch(p -> p.getId().equals(id) || EnchantedPredicate.instance.apply(p, game))); } } @@ -96,9 +96,10 @@ class GracefulTakedownEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - List permanents = this - .getTargetPointer() - .getTargets(game, source) + List permanents = source + .getTargets() + .get(0) + .getTargets() .stream() .map(game::getPermanent) .filter(Objects::nonNull) diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/woe/GracefulTakedownTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/woe/GracefulTakedownTest.java new file mode 100644 index 00000000000..ad185845a26 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/woe/GracefulTakedownTest.java @@ -0,0 +1,101 @@ +package org.mage.test.cards.single.woe; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * @author Susucr + */ +public class GracefulTakedownTest extends CardTestPlayerBase { + + /** + * Graceful Takedown + * {1}{G} + * Sorcery + * + * Any number of target enchanted creatures you control and up to one other target creature you control each deal damage equal to their power to target creature you don’t control. + */ + private static final String takedown = "Graceful Takedown"; + + private static final String cub = "Bear Cub"; // 2/2 + private static final String piker = "Goblin Piker"; // 2/1 + private static final String strength = "Unholy Strength"; // Aura {B} +2/+1 + private static final String ancient = "Indomitable Ancients"; // 2/10 + + @Test + public void oneCreatureDealingDamage() { + setStrictChooseMode(true); + + addCard(Zone.BATTLEFIELD, playerA, "Forest", 2); + + addCard(Zone.BATTLEFIELD, playerA, cub); + addCard(Zone.BATTLEFIELD, playerA, piker); + addCard(Zone.BATTLEFIELD, playerB, ancient); + + addCard(Zone.HAND, playerA, takedown); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, takedown); + addTarget(playerA, cub); + addTarget(playerA, ancient); + + setStopAt(1, PhaseStep.END_COMBAT); + execute(); + + assertDamageReceived(playerB, ancient, 2); + } + + @Test + public void twoCreaturesDealingDamage() { + setStrictChooseMode(true); + + addCard(Zone.BATTLEFIELD, playerA, "Bayou", 3); + + addCard(Zone.BATTLEFIELD, playerA, cub); + addCard(Zone.BATTLEFIELD, playerA, piker); + addCard(Zone.BATTLEFIELD, playerB, ancient); + + addCard(Zone.HAND, playerA, takedown); + addCard(Zone.HAND, playerA, strength); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, strength, piker, true); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, takedown); + addTarget(playerA, cub + "^" + piker); + addTarget(playerA, ancient); + + setStopAt(1, PhaseStep.END_COMBAT); + execute(); + + assertDamageReceived(playerB, ancient, 2 + 2 + 2); + } + + @Test + public void cantDamageWithTwoNonEnchanted() { + setStrictChooseMode(true); + + addCard(Zone.BATTLEFIELD, playerA, "Forest", 2); + + addCard(Zone.BATTLEFIELD, playerA, cub); + addCard(Zone.BATTLEFIELD, playerA, piker); + addCard(Zone.BATTLEFIELD, playerB, ancient); + + addCard(Zone.HAND, playerA, takedown); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, takedown); + addTarget(playerA, cub + "^" + piker); + addTarget(playerA, ancient); + + setStopAt(1, PhaseStep.END_COMBAT); + + try { + execute(); + Assert.fail("must throw exception on execute"); + } catch (Throwable e) { + if (!e.getMessage().contains("PlayerA - Targets list was setup by addTarget")) { + Assert.fail("must throw error about target setup not right, but got:\n" + e.getMessage()); + } + } + } +} \ No newline at end of file