From 18fd7becdbef238831f22ac8b80acfa9a71bbef9 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 31 Jan 2025 23:21:37 +0400 Subject: [PATCH] tests: added verify checks for missing boosters or draft related sets (related to #13160) --- .../java/mage/verify/mtgjson/MtgJsonSet.java | 4 ++ .../java/mage/verify/VerifyCardDataTest.java | 51 +++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/Mage.Verify/src/main/java/mage/verify/mtgjson/MtgJsonSet.java b/Mage.Verify/src/main/java/mage/verify/mtgjson/MtgJsonSet.java index 4e9a48aee2a..37c14010a07 100644 --- a/Mage.Verify/src/main/java/mage/verify/mtgjson/MtgJsonSet.java +++ b/Mage.Verify/src/main/java/mage/verify/mtgjson/MtgJsonSet.java @@ -1,5 +1,6 @@ package mage.verify.mtgjson; +import java.util.HashMap; import java.util.List; /** @@ -20,6 +21,9 @@ public final class MtgJsonSet { public String releaseDate; public int totalSetSize; + // mtgjson contains detailed stats, but verify needs only booster types info + public HashMap booster; + public String block; public String parentCode; diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 27275f9d65a..1da2835fdfc 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -1038,6 +1038,57 @@ public class VerifyCardDataTest { } } + // CHECK: miss booster settings + Set ignoreBoosterSets = new HashSet<>(); + // temporary, TODO: remove after set release and mtgjson get info + ignoreBoosterSets.add("Innistrad Remastered"); + // jumpstart, TODO: must implement from JumpstartPoolGenerator, see #13264 + ignoreBoosterSets.add("Jumpstart"); + ignoreBoosterSets.add("Jumpstart 2022"); + ignoreBoosterSets.add("Foundations Jumpstart"); + ignoreBoosterSets.add("Ravnica: Clue Edition"); + // joke or un-sets, low implemented cards + ignoreBoosterSets.add("Unglued"); + ignoreBoosterSets.add("Unhinged"); + ignoreBoosterSets.add("Unstable"); + ignoreBoosterSets.add("Unfinity"); + // other + ignoreBoosterSets.add("Secret Lair Drop"); // cards shop + ignoreBoosterSets.add("Zendikar Rising Expeditions"); // box toppers + ignoreBoosterSets.add("March of the Machine: The Aftermath"); // epilogue boosters aren't for draft + + for (ExpansionSet set : sets) { + MtgJsonSet jsonSet = MtgJsonService.sets().getOrDefault(set.getCode().toUpperCase(Locale.ENGLISH), null); + if (jsonSet == null) { + continue; + } + boolean needBooster = jsonSet.booster != null && !jsonSet.booster.isEmpty(); + if (set.hasBoosters() != needBooster) { + if (ignoreBoosterSets.contains(set.getName())) { + continue; + } + // error example: wrong booster settings (set MUST HAVE booster, but haven't) - 2020 - J22 - Jumpstart 2022 - boosters: [jumpstart] + errorsList.add(String.format("Error: wrong booster settings (set %s booster, but %s) - %s%s", + (needBooster ? "MUST HAVE" : "MUST HAVEN'T"), + (set.hasBoosters() ? "have" : "haven't"), + set.getReleaseYear() + " - " + set.getCode() + " - " + set.getName(), + (jsonSet.booster == null ? "" : " - boosters: " + jsonSet.booster.keySet()) + )); + } + } + + // CHECK: missing important sets for draft format + Set implementedSets = sets.stream().map(ExpansionSet::getCode).collect(Collectors.toSet()); + MtgJsonService.sets().values().forEach(jsonSet -> { + if (jsonSet.booster != null && !jsonSet.booster.isEmpty() && !implementedSets.contains(jsonSet.code)) { + errorsList.add(String.format("Error: missing set implementation (important for draft format) - %s - %s - boosters: %s", + jsonSet.code, + jsonSet.name, + jsonSet.booster.keySet() + )); + } + }); + // TODO: add test to check num cards for rarity (rarityStats > 0 and numRarity > 0) printMessages(warningsList); printMessages(errorsList);