From 0adbc7c0c38ff837042b4dad72c5e845bca05489 Mon Sep 17 00:00:00 2001 From: ReSech Date: Sat, 30 Aug 2025 19:47:51 +1000 Subject: [PATCH] tests: added verify tests for retro and full art images (#13912) * Add promoTypes and isTextless fields to MtgJsonCard; enhance VerifyCardDataTest for full art validation * whitespace fixes * Add null check * Split Retro and FullArt to seperate Test * Refactor VerifyCardDataTest to consolidate full art setting checks for poster promoType and textless cards * Add validation for full art lands in VerifyCardDataTest * Remove duplicate checks in checkWrongCardsDataInSets and add "not use" checks --- .../java/mage/verify/mtgjson/MtgJsonCard.java | 2 + .../java/mage/verify/VerifyCardDataTest.java | 83 +++++++++++++------ 2 files changed, 59 insertions(+), 26 deletions(-) diff --git a/Mage.Verify/src/main/java/mage/verify/mtgjson/MtgJsonCard.java b/Mage.Verify/src/main/java/mage/verify/mtgjson/MtgJsonCard.java index 2adafa6e7d0..b257c3ef6b0 100644 --- a/Mage.Verify/src/main/java/mage/verify/mtgjson/MtgJsonCard.java +++ b/Mage.Verify/src/main/java/mage/verify/mtgjson/MtgJsonCard.java @@ -43,6 +43,8 @@ public final class MtgJsonCard { public String frameVersion; public List printings; // set codes with that card public boolean isFunny; + public List promoTypes; + public boolean isTextless; @Override public String toString() { diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index ebebe6c5903..00fae12fbe3 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -697,32 +697,6 @@ public class VerifyCardDataTest { // String code = MtgJsonService.xMageToMtgJsonCodes.getOrDefault(set.getCode(), set.getCode()) + " - " + jsonCard.getNameAsFull() + " - " + jsonCard.number; // foundedJsonCards.add(code); // -// // CHECK: only lands can use full art in current version; -// // Another cards must be in text render mode as normal, example: https://scryfall.com/card/sld/76/athreos-god-of-passage -// // TODO: add support textless cards like https://scryfall.com/card/sch/12/thalia-and-the-gitrog-monster -// boolean isLand = card.getRarity().equals(Rarity.LAND); -// if (card.isFullArt() && !isLand) { -// errorsList.add("Error: only lands can use full art setting: " -// + set.getCode() + " - " + set.getName() + " - " + card.getName() + " - " + card.getCardNumber()); -// } -// -// // CHECK: must use full art setting -// if (jsonCard.isFullArt && isLand && !card.isFullArt()) { -// errorsList.add("Error: card must use full art setting: " -// + set.getCode() + " - " + set.getName() + " - " + card.getName() + " - " + card.getCardNumber()); -// } -// -// // CHECK: must not use full art setting -// if (!jsonCard.isFullArt && card.isFullArt()) { -// errorsList.add("Error: card must NOT use full art setting: " -// + set.getCode() + " - " + set.getName() + " - " + card.getName() + " - " + card.getCardNumber()); -// } - - // CHECK: must use retro frame setting - if ((jsonCard.frameVersion.equals("1993") || jsonCard.frameVersion.equals("1997")) && !card.isRetroFrame()) { - errorsList.add("Error: card must use retro art setting: " - + set.getCode() + " - " + set.getName() + " - " + card.getName() + " - " + card.getCardNumber()); - } } } @@ -766,6 +740,63 @@ public class VerifyCardDataTest { } } + @Test + @Ignore + public void test_checkWrongFullArtAndRetro() { + Collection errorsList = new ArrayList<>(); + Collection xmageSets = Sets.getInstance().values(); + + // CHECK: wrong card numbers + for (ExpansionSet set : xmageSets) { + if (skipListHaveName(SKIP_LIST_WRONG_CARD_NUMBERS, set.getCode())) { + continue; + } + + for (ExpansionSet.SetCardInfo card : set.getSetCardInfo()) { + MtgJsonCard jsonCard = MtgJsonService.cardFromSet(set.getCode(), card.getName(), card.getCardNumber()); + if (jsonCard == null) { + continue; + } + + // CHECK: poster promoType and/or textless must use full art setting + if (((jsonCard.promoTypes != null && jsonCard.promoTypes.contains("poster")) || jsonCard.isTextless) && !card.isFullArt()) { + errorsList.add("Error: card must use full art setting: " + + set.getCode() + " - " + set.getName() + " - " + card.getName() + " - " + card.getCardNumber()); + } + + // CHECK: full art lands must use full art setting + boolean isLand = card.getRarity().equals(Rarity.LAND); + if (isLand && jsonCard.isFullArt && !card.isFullArt()) { + errorsList.add("Error: card must use full art lands setting: " + + set.getCode() + " - " + set.getName() + " - " + card.getName() + " - " + card.getCardNumber()); + } + + // CHECK: non-full art lands must not use full art setting + if (isLand && !jsonCard.isFullArt && card.isFullArt()) { + errorsList.add("Error: card must NOT use full art lands setting: " + + set.getCode() + " - " + set.getName() + " - " + card.getName() + " - " + card.getCardNumber()); + } + + // CHECK: must use retro frame setting + if ((jsonCard.frameVersion.equals("1993") || jsonCard.frameVersion.equals("1997")) && !card.isRetroFrame()) { + errorsList.add("Error: card must use retro art setting: " + + set.getCode() + " - " + set.getName() + " - " + card.getName() + " - " + card.getCardNumber()); + } + + // CHECK: must not use retro frame setting + if ((!(jsonCard.frameVersion.equals("1993") || jsonCard.frameVersion.equals("1997"))) && card.isRetroFrame()) { + errorsList.add("Error: card must NOT use retro art setting: " + + set.getCode() + " - " + set.getName() + " - " + card.getName() + " - " + card.getCardNumber()); + } + } + } + + printMessages(errorsList); + if (errorsList.size() > 0) { + Assert.fail("Found wrong cards data in sets, errors: " + errorsList.size()); + } + } + @Test @Ignore // TODO: enable after all missing cards and settings fixes public void test_checkMissingScryfallSettingsAndCardNumbers() {