From fc6ac89098423cb25d3622879a99e15cda0c823f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Sun, 28 Sep 2025 19:10:53 +0200 Subject: [PATCH] Dependency inject the card preference provider to satisfy dbconverter mocks. Took 36 minutes --- cockatrice/src/database/card_database.cpp | 4 ++-- cockatrice/src/database/card_database.h | 3 ++- cockatrice/src/database/card_database_manager.cpp | 2 +- cockatrice/src/database/card_database_querier.cpp | 6 +++--- cockatrice/src/database/card_database_querier.h | 6 +++++- .../interface_card_preference_provider.cpp | 1 + .../interface/interface_card_preference_provider.h | 12 ++++++++++++ .../interface/noop_card_preference_provider.cpp | 1 + .../interface/noop_card_preference_provider.h | 12 ++++++++++++ .../interface/settings_card_preference_provider.cpp | 1 + .../interface/settings_card_preference_provider.h | 13 +++++++++++++ dbconverter/CMakeLists.txt | 1 - dbconverter/src/main.h | 9 +++++++++ tests/carddatabase/CMakeLists.txt | 1 - 14 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 cockatrice/src/database/interface/interface_card_preference_provider.cpp create mode 100644 cockatrice/src/database/interface/interface_card_preference_provider.h create mode 100644 cockatrice/src/database/interface/noop_card_preference_provider.cpp create mode 100644 cockatrice/src/database/interface/noop_card_preference_provider.h create mode 100644 cockatrice/src/database/interface/settings_card_preference_provider.cpp create mode 100644 cockatrice/src/database/interface/settings_card_preference_provider.h diff --git a/cockatrice/src/database/card_database.cpp b/cockatrice/src/database/card_database.cpp index a26445005..c9121af6d 100644 --- a/cockatrice/src/database/card_database.cpp +++ b/cockatrice/src/database/card_database.cpp @@ -15,7 +15,7 @@ #include #include -CardDatabase::CardDatabase(QObject *parent) : QObject(parent), loadStatus(NotLoaded) +CardDatabase::CardDatabase(QObject *parent, std::shared_ptr prefs) : QObject(parent), loadStatus(NotLoaded) { qRegisterMetaType("CardInfoPtr"); qRegisterMetaType("CardSetPtr"); @@ -28,7 +28,7 @@ CardDatabase::CardDatabase(QObject *parent) : QObject(parent), loadStatus(NotLoa connect(loader, &CardDatabaseLoader::newSetsFound, this, &CardDatabase::cardDatabaseNewSetsFound); connect(loader, &CardDatabaseLoader::allNewSetsEnabled, this, &CardDatabase::cardDatabaseAllNewSetsEnabled); - querier = new CardDatabaseQuerier(this, this); + querier = new CardDatabaseQuerier(this, this, prefs); } CardDatabase::~CardDatabase() diff --git a/cockatrice/src/database/card_database.h b/cockatrice/src/database/card_database.h index a6941ee5b..6e95cf68e 100644 --- a/cockatrice/src/database/card_database.h +++ b/cockatrice/src/database/card_database.h @@ -5,6 +5,7 @@ #include "../common/card_ref.h" #include "card_database_loader.h" #include "card_database_querier.h" +#include "interface/noop_card_preference_provider.h" #include #include @@ -51,7 +52,7 @@ private: *removeCardMutex = new QBasicMutex(); public: - explicit CardDatabase(QObject *parent = nullptr); + explicit CardDatabase(QObject *parent = nullptr, std::shared_ptr prefs = nullptr); ~CardDatabase() override; void removeCard(CardInfoPtr card); diff --git a/cockatrice/src/database/card_database_manager.cpp b/cockatrice/src/database/card_database_manager.cpp index 4ffe0cc70..3f9b0acbd 100644 --- a/cockatrice/src/database/card_database_manager.cpp +++ b/cockatrice/src/database/card_database_manager.cpp @@ -2,7 +2,7 @@ CardDatabase *CardDatabaseManager::getInstance() { - static CardDatabase instance; // Created only once, on first access + static CardDatabase instance(nullptr, std::make_shared()); // Created only once, on first access return &instance; } diff --git a/cockatrice/src/database/card_database_querier.cpp b/cockatrice/src/database/card_database_querier.cpp index 32869e21c..8dc3d1453 100644 --- a/cockatrice/src/database/card_database_querier.cpp +++ b/cockatrice/src/database/card_database_querier.cpp @@ -3,10 +3,11 @@ #include "../settings/cache_settings.h" #include "../utility/card_set_comparator.h" #include "card_database.h" +#include "interface/settings_card_preference_provider.h" #include -CardDatabaseQuerier::CardDatabaseQuerier(QObject *_parent, const CardDatabase *_db) : QObject(_parent), db(_db) +CardDatabaseQuerier::CardDatabaseQuerier(QObject *_parent, const CardDatabase *_db, std::shared_ptr prefs) : QObject(_parent), db(_db), prefs(std::move(prefs)) { } @@ -246,8 +247,7 @@ PrintingInfo CardDatabaseQuerier::getPreferredPrinting(const CardInfoPtr &cardIn return PrintingInfo(nullptr); } - const auto &pinnedPrintingProviderId = - SettingsCache::instance().cardOverrides().getCardPreferenceOverride(cardInfo->getName()); + const auto &pinnedPrintingProviderId = prefs->getCardPreferenceOverride(cardInfo->getName()); if (!pinnedPrintingProviderId.isEmpty()) { return getSpecificPrinting({cardInfo->getName(), pinnedPrintingProviderId}); diff --git a/cockatrice/src/database/card_database_querier.h b/cockatrice/src/database/card_database_querier.h index 73987cc88..d1522c2df 100644 --- a/cockatrice/src/database/card_database_querier.h +++ b/cockatrice/src/database/card_database_querier.h @@ -3,6 +3,8 @@ #include "../card/exact_card.h" #include "../common/card_ref.h" +#include "interface/interface_card_preference_provider.h" +#include "interface/settings_card_preference_provider.h" #include @@ -12,7 +14,7 @@ class CardDatabaseQuerier : public QObject Q_OBJECT public: - explicit CardDatabaseQuerier(QObject *parent, const CardDatabase *db); + explicit CardDatabaseQuerier(QObject *parent, const CardDatabase *db, std::shared_ptr prefs); [[nodiscard]] CardInfoPtr getCardInfo(const QString &cardName) const; [[nodiscard]] QList getCardInfos(const QStringList &cardNames) const; @@ -49,6 +51,8 @@ public: private: const CardDatabase *db; + std::shared_ptr prefs; + CardInfoPtr lookupCardByName(const QString &name) const; }; diff --git a/cockatrice/src/database/interface/interface_card_preference_provider.cpp b/cockatrice/src/database/interface/interface_card_preference_provider.cpp new file mode 100644 index 000000000..813f06cb6 --- /dev/null +++ b/cockatrice/src/database/interface/interface_card_preference_provider.cpp @@ -0,0 +1 @@ +#include "../../utility/interface_card_preference_provider.h" diff --git a/cockatrice/src/database/interface/interface_card_preference_provider.h b/cockatrice/src/database/interface/interface_card_preference_provider.h new file mode 100644 index 000000000..e205fccfc --- /dev/null +++ b/cockatrice/src/database/interface/interface_card_preference_provider.h @@ -0,0 +1,12 @@ +#ifndef COCKATRICE_INTERFACE_CARD_PREFERENCE_PROVIDER_H +#define COCKATRICE_INTERFACE_CARD_PREFERENCE_PROVIDER_H + +#include + +class ICardPreferenceProvider { +public: + virtual ~ICardPreferenceProvider() = default; + virtual QString getCardPreferenceOverride(const QString &cardName) const = 0; +}; + +#endif //COCKATRICE_INTERFACE_CARD_PREFERENCE_PROVIDER_H diff --git a/cockatrice/src/database/interface/noop_card_preference_provider.cpp b/cockatrice/src/database/interface/noop_card_preference_provider.cpp new file mode 100644 index 000000000..427819a89 --- /dev/null +++ b/cockatrice/src/database/interface/noop_card_preference_provider.cpp @@ -0,0 +1 @@ +#include "noop_card_preference_provider.h" diff --git a/cockatrice/src/database/interface/noop_card_preference_provider.h b/cockatrice/src/database/interface/noop_card_preference_provider.h new file mode 100644 index 000000000..56f715dbf --- /dev/null +++ b/cockatrice/src/database/interface/noop_card_preference_provider.h @@ -0,0 +1,12 @@ +#ifndef COCKATRICE_NOOP_CARD_PREFERENCE_PROVIDER_H +#define COCKATRICE_NOOP_CARD_PREFERENCE_PROVIDER_H +#include "interface_card_preference_provider.h" + +class NoopCardPreferenceProvider : public ICardPreferenceProvider { +public: + QString getCardPreferenceOverride(const QString &) const override { + return {}; + } +}; + +#endif //COCKATRICE_NOOP_CARD_PREFERENCE_PROVIDER_H diff --git a/cockatrice/src/database/interface/settings_card_preference_provider.cpp b/cockatrice/src/database/interface/settings_card_preference_provider.cpp new file mode 100644 index 000000000..406583a55 --- /dev/null +++ b/cockatrice/src/database/interface/settings_card_preference_provider.cpp @@ -0,0 +1 @@ +#include "../../utility/settings_card_preference_provider.h" diff --git a/cockatrice/src/database/interface/settings_card_preference_provider.h b/cockatrice/src/database/interface/settings_card_preference_provider.h new file mode 100644 index 000000000..3c9e6cdc2 --- /dev/null +++ b/cockatrice/src/database/interface/settings_card_preference_provider.h @@ -0,0 +1,13 @@ +#ifndef COCKATRICE_SETTINGS_CARD_PREFERENCE_PROVIDER_H +#define COCKATRICE_SETTINGS_CARD_PREFERENCE_PROVIDER_H +#include "interface_card_preference_provider.h" +#include "../../settings/cache_settings.h" + +class SettingsCardPreferenceProvider : public ICardPreferenceProvider { +public: + QString getCardPreferenceOverride(const QString &cardName) const override { + return SettingsCache::instance().cardOverrides().getCardPreferenceOverride(cardName); + } +}; + +#endif //COCKATRICE_SETTINGS_CARD_PREFERENCE_PROVIDER_H diff --git a/dbconverter/CMakeLists.txt b/dbconverter/CMakeLists.txt index 53fa3853a..bc03a5ad3 100644 --- a/dbconverter/CMakeLists.txt +++ b/dbconverter/CMakeLists.txt @@ -13,7 +13,6 @@ set(dbconverter_SOURCES ../cockatrice/src/database/parser/card_database_parser.cpp ../cockatrice/src/database/parser/cockatrice_xml_3.cpp ../cockatrice/src/database/parser/cockatrice_xml_4.cpp - ../cockatrice/src/settings/card_override_settings.cpp ../cockatrice/src/settings/settings_manager.cpp ${VERSION_STRING_CPP} ) diff --git a/dbconverter/src/main.h b/dbconverter/src/main.h index ccde6b20e..549bb8cc6 100644 --- a/dbconverter/src/main.h +++ b/dbconverter/src/main.h @@ -2,11 +2,20 @@ #define MAIN_H #include "../../cockatrice/src/database/card_database.h" +#include "../../cockatrice/src/database/interface/noop_card_preference_provider.h" #include "../../cockatrice/src/database/parser/cockatrice_xml_4.h" class CardDatabaseConverter : public CardDatabase { public: + explicit CardDatabaseConverter() + { + // Replace querier with one that ignores SettingsCache + delete querier; + querier = new CardDatabaseQuerier(this, this, + std::make_shared()); + }; + LoadStatus loadCardDatabase(const QString &path) { return loader->loadCardDatabase(path); diff --git a/tests/carddatabase/CMakeLists.txt b/tests/carddatabase/CMakeLists.txt index e68d38cf8..9797d27cf 100644 --- a/tests/carddatabase/CMakeLists.txt +++ b/tests/carddatabase/CMakeLists.txt @@ -27,7 +27,6 @@ add_executable( ../../cockatrice/src/database/parser/cockatrice_xml_3.cpp ../../cockatrice/src/database/parser/cockatrice_xml_4.cpp ../../cockatrice/src/settings/settings_manager.cpp - ../../cockatrice/src/settings/card_override_settings.cpp carddatabase_test.cpp mocks.cpp )