[Tests] Use QtTest for model contracts and signal spies (#7630)

Qt6::Test was linked into every test but never used. Add a small RAII
QAbstractItemModelTester helper and apply it to the deck list model, the card
database model and display proxy, and the sets model. Add QSignalSpy coverage
for the card-added and download-settings signals, and assert explicitly that a
card row is a leaf with no child columns (the tester does not check that).

The contract checker immediately found four model bugs, fixed here:
- DeckListModel allowed children below non-zero columns.
- CardDatabaseModel reported every card as a child of every card row.
- CardDatabaseModel reported six columns for a valid (leaf) card index.
- CardDatabaseDisplayModel claimed more rows were fetchable while rowCount
  already exposed them all, so fetchMore() inserted duplicates.

Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
BruebachL 2026-11-02 07:27:43 +01:00 • committed by GitHub
parent 429eb2a1fd
commit ce543896f5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 207 additions and 46 deletions

View file

@ -0,0 +1,17 @@
cockatrice_add_test(
NAME
model_contract_test
SOURCES
${VERSION_STRING_CPP}
model_contract_test.cpp
LIBS
libcockatrice_models
libcockatrice_card
libcockatrice_deck_list
libcockatrice_settings
INCLUDE_DIRS
${CMAKE_CURRENT_SOURCE_DIR}/../support
${CMAKE_CURRENT_SOURCE_DIR}/../carddatabase
DEFINITIONS
CARDDB_DATADIR="${CMAKE_SOURCE_DIR}/tests/carddatabase/data/"
)