server-sdk/test/auto/database/tst_databasetable.cpp
2019-11-18 10:41:24 +01:00

149 lines
3.6 KiB
C++

#include "serversdk/databasetable.h"
#include <QtTest>
#include <memory>
class BookTable : public serversdk::DatabaseTable
{
Q_OBJECT
TABLE_PROPERTY(QUuid, uuid, setUuid, QUuid());
TABLE_PROPERTY(int, id, setId, 0);
TABLE_PROPERTY(QString, name, setName, "Test");
};
QString enumjson = R"({"authErrors":255,"flags":["Enabled","NoValidity"],"subjectId":"1438aade-3aa6-4885-8e0f-138dedae727a"})";
class EnumTest : public serversdk::DatabaseTable
{
Q_OBJECT
TABLE_PROPERTY(int, authErrors, setAuthErrors, 0);
TABLE_PROPERTY(bool, enabled, setEnabled, false);
TABLE_PROPERTY(bool, noValidity, setNoValidity, false);
TABLE_PROPERTY(QString, subjectId, setSubjectId, QString());
public:
QByteArray jsonData() const override
{
auto variantMap = this->toVariantMap();
auto enabled = variantMap["enabled"].toBool();
auto noValidity = variantMap["noValidity"].toBool();
variantMap.remove("enabled");
variantMap.remove("noValidity");
QVariantList flags;
if ( enabled ) {
flags << "Enabled";
}
if ( noValidity ) {
flags << "NoValidity";
}
variantMap.insert("flags", flags);
QJsonDocument doc = QJsonDocument::fromVariant(variantMap);
return doc.toJson(QJsonDocument::Compact);
}
bool fromJson(const QByteArray &data) override
{
QJsonDocument doc = QJsonDocument::fromJson(data);
QVariantMap variant = qvariant_cast<QVariantMap>(doc.toVariant());
QVariantList flags = variant["flags"].toList();
for (auto value : flags) {
if ( value.toString() == "Enabled") {
variant.insert("enabled", true);
}
if ( value.toString() == "NoValidity") {
variant.insert("noValidity", true);
}
}
variant.remove("flags");
// Populate this object data
bool res = fromVariantMap(variant);
return res;
}
};
class DatabaseTableTest : public QObject
{
Q_OBJECT
public:
DatabaseTableTest();
~DatabaseTableTest();
private slots:
void constructor_test();
void qvariant_test();
void json_test();
void enum_test();
};
DatabaseTableTest::DatabaseTableTest()
{
}
DatabaseTableTest::~DatabaseTableTest()
{
}
void DatabaseTableTest::constructor_test()
{
auto table = std::make_unique<BookTable>();
QCOMPARE(table->id(), 0);
QCOMPARE(table->name(), QStringLiteral("Test"));
}
void DatabaseTableTest::qvariant_test()
{
auto table = std::make_unique<BookTable>();
QVariantMap map = table->toVariantMap();
QCOMPARE(map.count(), 3);
}
void DatabaseTableTest::json_test()
{
auto table = std::make_unique<BookTable>();
QCOMPARE(table->id(), 0);
QCOMPARE(table->name(), QStringLiteral("Test"));
QByteArray expected(R"({"id":0,"name":"Test","uuid":"{00000000-0000-0000-0000-000000000000}"})");
QCOMPARE(table->jsonData(), expected);
}
void DatabaseTableTest::enum_test()
{
auto table = std::make_unique<EnumTest>();
table->setAuthErrors(255);
table->setNoValidity(true);
table->setEnabled(true);
table->setSubjectId("1438aade-3aa6-4885-8e0f-138dedae727a");
QCOMPARE(table->jsonData(), enumjson.toUtf8());
EnumTest jsonTest;
jsonTest.fromJson(enumjson.toUtf8());
QCOMPARE(jsonTest.authErrors(), 255);
QCOMPARE(jsonTest.noValidity(), true);
QCOMPARE(jsonTest.enabled(), true);
QCOMPARE(jsonTest.subjectId(), QStringLiteral("1438aade-3aa6-4885-8e0f-138dedae727a"));
}
QTEST_APPLESS_MAIN(DatabaseTableTest)
#include "tst_databasetable.moc"