Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/tests/test_flm_db_impl_custom.cpp
T

76 lines
3.2 KiB
C++

/**
* @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<int>), die
* flm_db_impl_custom.cpp für Status-Vergleich und SQL-Bind verwendet.
*/
#include <FileManagement/flm_db_impl_custom.h>
#include <gtest/gtest.h>
#include <type_traits>
/**
* @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<FileManagement::DatabaseInterfaceImplCustom>::value,
"DatabaseInterfaceImplCustom muss final sein");
static_assert(std::is_base_of<FileManagement::DatabaseInterfaceImpl,
FileManagement::DatabaseInterfaceImplCustom>::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<FileManagement::DatabaseInterfaceImpl>::value,
"generierte Basis muss abstrakt sein");
static_assert(!std::is_abstract<FileManagement::DatabaseInterfaceImplCustom>::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<UpdateStatus,
decltype(&FileManagement::DatabaseInterfaceImplCustom::updateStatus)>::value,
"updateStatus-Signatur muss (int, const FileStatus&, int) sein");
static_assert(std::is_same<SetUsedBy,
decltype(&FileManagement::DatabaseInterfaceImplCustom::setUsedBy)>::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<int>(status) an :st —
* die Enum-Werte sind der Vertrag der geänderten Logik.
*/
TEST(flm_db_impl_custom, StatusEnumValuesMatchSqlBindConversion)
{
EXPECT_EQ(static_cast<int>(FileManagement::FileStatus::Valid), 0);
EXPECT_EQ(static_cast<int>(FileManagement::FileStatus::Deleted), 1);
}