diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java index ba66640d759..5aeaadc33dd 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/impl/CardTestPlayerAPIImpl.java @@ -29,10 +29,12 @@ import org.mage.test.serverside.base.CardTestAPI; import org.mage.test.serverside.base.MageTestPlayerBase; import java.io.FileNotFoundException; +import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; /** * API for test initialization and asserting the test results. @@ -61,11 +63,6 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement UNKNOWN } - static { -// CardScanner.scanned = true; - CardScanner.scan(); - } - /** * Default game initialization params for red player (that plays with * Mountains) @@ -111,6 +108,17 @@ public abstract class CardTestPlayerAPIImpl extends MageTestPlayerBase implement addCard(Zone.LIBRARY, playerB, "Plains", 10); } + @Before + public void checkDatabase() { + // load all cards to db from class list + ArrayList errorsList = new ArrayList<>(); + CardScanner.scan(errorsList); + + if (errorsList.size() > 0) { + Assert.fail("Found errors on card loading: " + '\n' + errorsList.stream().collect(Collectors.joining("\n"))); + } + } + @Before public void reset() throws GameException, FileNotFoundException { if (currentGame != null) { diff --git a/Mage/src/main/java/mage/cards/repository/CardScanner.java b/Mage/src/main/java/mage/cards/repository/CardScanner.java index 943dfc77329..88ec6fd8caa 100644 --- a/Mage/src/main/java/mage/cards/repository/CardScanner.java +++ b/Mage/src/main/java/mage/cards/repository/CardScanner.java @@ -43,16 +43,23 @@ public final class CardScanner { private static final Logger logger = Logger.getLogger(CardScanner.class); public static void scan() { + scan(null); + } + + public static void scan(List errorsList) { if (scanned) { return; } scanned = true; List cardsToAdd = new ArrayList<>(); + int setsUpdatedCount = 0; + int setsAddedCount = 0; for (ExpansionSet set : Sets.getInstance().values()) { ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(set.getCode()); if (expansionInfo == null) { + setsAddedCount += 1; ExpansionRepository.instance.add(new ExpansionInfo(set)); } else if (!expansionInfo.name.equals(set.getName()) || !expansionInfo.code.equals(set.getCode()) @@ -61,17 +68,26 @@ public final class CardScanner { || expansionInfo.type != set.getSetType() || expansionInfo.boosters != set.hasBoosters() || expansionInfo.basicLands != set.hasBasicLands()) { + setsUpdatedCount += 1; ExpansionRepository.instance.update(expansionInfo); } } ExpansionRepository.instance.setContentVersion(ExpansionRepository.instance.getContentVersionConstant()); + if (setsAddedCount > 0) { + logger.info("DB: need to add " + setsUpdatedCount + " new sets"); + } + if (setsUpdatedCount > 0) { + logger.info("DB: need to update " + setsUpdatedCount + " sets"); + } + for (ExpansionSet set : Sets.getInstance().values()) { for (ExpansionSet.SetCardInfo setInfo : set.getSetCardInfo()) { if (CardRepository.instance.findCard(set.getCode(), setInfo.getCardNumber()) == null) { - Card card = CardImpl.createCard(setInfo.getCardClass(), - new CardSetInfo(setInfo.getName(), set.getCode(), setInfo.getCardNumber(), - setInfo.getRarity(), setInfo.getGraphicInfo())); + Card card = CardImpl.createCard( + setInfo.getCardClass(), + new CardSetInfo(setInfo.getName(), set.getCode(), setInfo.getCardNumber(), setInfo.getRarity(), setInfo.getGraphicInfo()), + errorsList); if (card != null) { cardsToAdd.add(new CardInfo(card)); if (card instanceof SplitCard) { @@ -85,7 +101,7 @@ public final class CardScanner { } if (!cardsToAdd.isEmpty()) { - logger.info("Cards need storing in DB: " + cardsToAdd.size()); + logger.info("DB: need to add " + cardsToAdd.size() + " new cards"); CardRepository.instance.addCards(cardsToAdd); } CardRepository.instance.setContentVersion(CardRepository.instance.getContentVersionConstant());