#include #include "ccm/domain/Configuration.hpp" #include "ccm/domain/Enums.hpp" #include "ccm/domain/MagicCard.hpp" #include "ccm/domain/PokemonCard.hpp" #include "ccm/domain/Set.hpp" #include using namespace ccm; TEST_SUITE("domain enums round-trip JSON as strings") { TEST_CASE("Game") { nlohmann::json j = Game::Magic; CHECK(j.get() == "Magic"); CHECK(j.get() == Game::Magic); nlohmann::json j2 = "Pokemon"; CHECK(j2.get() == Game::Pokemon); nlohmann::json j3 = Theme::Dark; CHECK(j3.get() == "Dark"); CHECK(j3.get() == Theme::Dark); } TEST_CASE("Language and Condition") { nlohmann::json l = Language::Japanese; CHECK(l.get() == "Japanese"); CHECK(l.get() == Language::Japanese); nlohmann::json c = Condition::LightPlayed; CHECK(c.get() == "LightPlayed"); CHECK(c.get() == Condition::LightPlayed); } TEST_CASE("invalid enum string throws") { nlohmann::json bad = "Spanglish"; CHECK_THROWS(bad.get()); } } TEST_SUITE("Set JSON shape stays stable") { TEST_CASE("uses 'releaseDate' alias") { Set s{"abc", "Test Set", "2024/05/01"}; const nlohmann::json j = s; CHECK(j.contains("releaseDate")); CHECK_FALSE(j.contains("release_date")); CHECK(j.at("releaseDate") == "2024/05/01"); const Set back = j.get(); CHECK(back == s); } } TEST_SUITE("MagicCard JSON") { TEST_CASE("round-trips with all original field names") { MagicCard c; c.id = 42; c.amount = 3; c.name = "Lightning Bolt"; c.set = Set{"lea", "Limited Edition Alpha", "1993/08/05"}; c.note = "rare promo"; c.images = {"foo+bar+0.png"}; c.language = Language::English; c.condition = Condition::NearMint; c.foil = true; c.signed_ = false; c.altered = false; nlohmann::json j = c; CHECK(j.contains("signed")); CHECK(j.at("signed") == false); CHECK(j.at("foil") == true); const MagicCard back = j.get(); CHECK(back == c); } } TEST_SUITE("PokemonCard JSON") { TEST_CASE("uses 'setNo' and 'firstEdition' aliases") { PokemonCard c; c.id = 7; c.amount = 1; c.name = "Charizard"; c.set = Set{"base1", "Base Set", "1999/01/09"}; c.setNo = "4/102"; c.note = ""; c.images = {}; c.language = Language::English; c.condition = Condition::Excellent; c.firstEdition = true; c.holo = true; c.signed_ = false; c.altered = false; nlohmann::json j = c; CHECK(j.at("setNo") == "4/102"); CHECK(j.at("firstEdition") == true); CHECK(j.at("signed") == false); const PokemonCard back = j.get(); CHECK(back == c); } } TEST_SUITE("Configuration JSON matches Rust serde aliases") { TEST_CASE("dataStorage / defaultGame / theme keys are present") { Configuration cfg; cfg.dataStorage = "/some/path"; cfg.defaultGame = Game::Pokemon; cfg.theme = Theme::Dark; nlohmann::json j = cfg; CHECK(j.at("dataStorage") == "/some/path"); CHECK(j.at("defaultGame") == "Pokemon"); CHECK(j.at("theme") == "Dark"); const auto back = j.get(); CHECK(back == cfg); } }