/** * @file test_flm_db_impl_custom.cpp * @brief Tests für DatabaseInterfaceImplCustom (flm_db_impl_custom.cpp/.h) * * Die DB-Methoden selbst (updateStatus/setUsedBy) benötigen eine live * Datenbankverbindung und laufen daher nur im Integrationstest flmTests * (docker: make flmTests). Diese Unit-Tests sichern die Qt6-relevante Kopplung * an den generierten Basistyp flm_db_impl.h ab: Klassenhierarchie, * Override-Signaturen und die Enum-Konvertierung (static_cast), die * flm_db_impl_custom.cpp für Status-Vergleich und SQL-Bind verwendet. */ #include #include #include /** * @test DatabaseInterfaceImplCustom muss final sein und vom generierten * DatabaseInterfaceImpl (flm_db_impl.h) erben. */ TEST(flm_db_impl_custom, CustomClassIsFinalDerivedFromGeneratedBase) { static_assert(std::is_final::value, "DatabaseInterfaceImplCustom muss final sein"); static_assert(std::is_base_of::value, "DatabaseInterfaceImplCustom muss von DatabaseInterfaceImpl erben"); SUCCEED(); } /** * @test Die generierte Basis DatabaseInterfaceImpl ist abstrakt (sie * implementiert updateStatus/setUsedBy nicht); die Custom-Klasse muss * durch ihre beiden Overrides konkret sein. */ TEST(flm_db_impl_custom, OverridesAllPureVirtualMethodsOfGeneratedBase) { static_assert(std::is_abstract::value, "generierte Basis muss abstrakt sein"); static_assert(!std::is_abstract::value, "Custom-Klasse muss alle pure-virtual Methoden überschreiben"); SUCCEED(); } /** * @test Die Override-Signaturen müssen exakt den Deklarationen in der * generierten Basis flm_db.h entsprechen (const FileStatus&/const bool&). */ TEST(flm_db_impl_custom, OverrideSignaturesMatchGeneratedBase) { using UpdateStatus = bool (FileManagement::DatabaseInterfaceImplCustom::*)(int, const FileManagement::FileStatus &, int); using SetUsedBy = bool (FileManagement::DatabaseInterfaceImplCustom::*)(int, const bool &, int, int); static_assert(std::is_same::value, "updateStatus-Signatur muss (int, const FileStatus&, int) sein"); static_assert(std::is_same::value, "setUsedBy-Signatur muss (int, const bool&, int, int) sein"); SUCCEED(); } /** * @test flm_db_impl_custom.cpp vergleicht status gegen FileStatus::Deleted * bzw. FileStatus::Valid und bindet static_cast(status) an :st — * die Enum-Werte sind der Vertrag der geänderten Logik. */ TEST(flm_db_impl_custom, StatusEnumValuesMatchSqlBindConversion) { EXPECT_EQ(static_cast(FileManagement::FileStatus::Valid), 0); EXPECT_EQ(static_cast(FileManagement::FileStatus::Deleted), 1); }