From 91c5e9cdad2fa73169d3083fe37d3fa92ab40f4f Mon Sep 17 00:00:00 2001 From: Christian Daniel Jensen Date: Tue, 3 Nov 2026 13:13:46 -0700 Subject: [PATCH] Test Identity, ATK/HP, Attack, Armour and Health column sorting and legacy field mapping --- tests/model_contract/model_contract_test.cpp | 48 ++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/tests/model_contract/model_contract_test.cpp b/tests/model_contract/model_contract_test.cpp index aefa26f3d..0c075dc76 100644 --- a/tests/model_contract/model_contract_test.cpp +++ b/tests/model_contract/model_contract_test.cpp @@ -103,6 +103,54 @@ TEST(ModelContract, CardDatabaseModelAndDisplayProxyKeepContract) EXPECT_LT(display.rowCount(), source.rowCount()); } +TEST(ModelContract, ContinuumCardStatsAreSortableAndLabeled) +{ + NoopCardPreferenceProvider prefs; + TestCardDatabasePathProvider paths; + NoopCardSetPriorityController setPriority; + CardDatabase database(nullptr, &prefs, &paths, &setPriority); + + auto swift = CardInfo::newInstance("Swift"); + swift->setProperty("identity", "Astra"); + swift->setProperty("attack", "9"); + swift->setProperty("armour", "10"); + swift->setProperty("health", "2"); + + auto sturdy = CardInfo::newInstance("Sturdy"); + sturdy->setProperty("identity", "Zephyr"); + sturdy->setProperty("attack", "10"); + sturdy->setProperty("armour", "2"); + sturdy->setProperty("health", "12"); + + database.addCard(swift); + database.addCard(sturdy); + + CardDatabaseModel source(&database, false); + CardDatabaseDisplayModel display; + display.setSourceModel(&source); + + ASSERT_EQ(source.columnCount(), CardDatabaseModel::ColumnCount); + ASSERT_EQ(display.rowCount(), 2); + EXPECT_EQ(source.headerData(CardDatabaseModel::AtkHpColumn, Qt::Horizontal), "ATK/HP"); + EXPECT_EQ(source.headerData(CardDatabaseModel::IdentityColumn, Qt::Horizontal), "Identity"); + EXPECT_EQ(source.headerData(CardDatabaseModel::AttackColumn, Qt::Horizontal), "Attack"); + EXPECT_EQ(source.headerData(CardDatabaseModel::ArmourColumn, Qt::Horizontal), "Armour"); + EXPECT_EQ(source.headerData(CardDatabaseModel::HealthColumn, Qt::Horizontal), "Health"); + + const auto firstName = [&display] { return display.index(0, CardDatabaseModel::NameColumn).data().toString(); }; + + display.sort(CardDatabaseModel::AttackColumn, Qt::AscendingOrder); + EXPECT_EQ(firstName(), "Swift") << "9 ATK should precede 10 ATK"; + display.sort(CardDatabaseModel::ArmourColumn, Qt::AscendingOrder); + EXPECT_EQ(firstName(), "Sturdy") << "2 Armour should precede 10 Armour"; + display.sort(CardDatabaseModel::HealthColumn, Qt::AscendingOrder); + EXPECT_EQ(firstName(), "Swift") << "2 HP should precede 12 HP"; + display.sort(CardDatabaseModel::AtkHpColumn, Qt::AscendingOrder); + EXPECT_EQ(firstName(), "Swift") << "ATK/HP should sort attack and health numerically"; + display.sort(CardDatabaseModel::IdentityColumn, Qt::DescendingOrder); + EXPECT_EQ(firstName(), "Sturdy") << "Identity should sort text from the alias/identity property"; +} + TEST(ModelContract, SetsModelKeepsContract) { CardDatabase database(nullptr, new NoopCardPreferenceProvider(), new TestCardDatabasePathProvider(),