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
This commit is contained in:
ReSech 2025-08-30 19:47:51 +10:00 committed by GitHub
parent 5d034fcb0c
commit 0adbc7c0c3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 59 additions and 26 deletions

View file

@ -43,6 +43,8 @@ public final class MtgJsonCard {
public String frameVersion; public String frameVersion;
public List<String> printings; // set codes with that card public List<String> printings; // set codes with that card
public boolean isFunny; public boolean isFunny;
public List<String> promoTypes;
public boolean isTextless;
@Override @Override
public String toString() { public String toString() {

View file

@ -697,32 +697,6 @@ public class VerifyCardDataTest {
// String code = MtgJsonService.xMageToMtgJsonCodes.getOrDefault(set.getCode(), set.getCode()) + " - " + jsonCard.getNameAsFull() + " - " + jsonCard.number; // String code = MtgJsonService.xMageToMtgJsonCodes.getOrDefault(set.getCode(), set.getCode()) + " - " + jsonCard.getNameAsFull() + " - " + jsonCard.number;
// foundedJsonCards.add(code); // 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<String> errorsList = new ArrayList<>();
Collection<ExpansionSet> 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 @Test
@Ignore // TODO: enable after all missing cards and settings fixes @Ignore // TODO: enable after all missing cards and settings fixes
public void test_checkMissingScryfallSettingsAndCardNumbers() { public void test_checkMissingScryfallSettingsAndCardNumbers() {