76 lines
3.2 KiB
C++
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);
|
|
}
|