server-sdk/test/auto/database/tst_sqlite.cpp

144 lines
3.5 KiB
C++

#include <QtTest>
#include "serversdk/databasemanager.h"
#include "serversdk/databaseutils.h"
#include "serversdk/core.h"
// add necessary includes here
class Name : public serversdk::DatabaseTable {
Q_OBJECT
TABLE_PROPERTY(QString, uuid, set_uuid, QString());
TABLE_PROPERTY(int, id, set_id, 0);
TABLE_PROPERTY(QString, name, set_name, "");
TABLE_PROPERTY(QString, vehicleName, set_vehicle_name, "Škodouliňkaťoučký");
};
class SqliteTest : public QObject
{
Q_OBJECT
public:
SqliteTest() = default;
private slots:
void createDb_test();
void createTable_test();
void updateTable_test();
};
void SqliteTest::createDb_test()
{
// Prepare temporary path for database
QTemporaryDir dir;
QVERIFY(dir.isValid());
QString dbpath = dir.path() + "/testdb.sqlite";
QVERIFY(!dbpath.isEmpty());
QVERIFY(!QFileInfo::exists(dbpath));
serversdk::DatabaseManager db;
db.openSQLite(dbpath);
QVERIFY(db.isValid());
QVERIFY(db.isOpen());
QVERIFY(QFileInfo::exists(dbpath));
// Closing database
db.close();
QVERIFY(!db.isOpen());
// Temporary dir cleanup
QVERIFY(dir.remove());
QVERIFY(!QFileInfo::exists(dbpath));
}
void SqliteTest::createTable_test()
{
// Prepare temporary path for database
QTemporaryDir dir;
QString dbpath = dir.path() + "/testdb.sqlite";
serversdk::DatabaseManager db;
db.openSQLite(dbpath);
QVERIFY(db.isOpen());
Name name_A, name_B;
// CREATE TABLE
serversdk::DatabaseUtils utils(&db);
QSqlQuery query = utils.createTable(&name_A, "names");
// INSERT INTO TABLE
const QString uuidA = "48f64fab-ba2a-40b5-8fbb-75361099dfb6";
const QString uuidB = "d70143ab-8c14-4ee0-85cb-f0d1b72df104";
name_A.set_uuid(uuidA);
name_A.set_id(2);
name_A.set_name("TestnameA");
name_B.set_uuid(uuidB);
name_B.set_id(2);
name_B.set_name("TestnameB");
utils.insertIntoTable(&name_A, "names");
utils.insertIntoTable(&name_B, "names");
// SELECT FROM TABLE
QSqlQuery selectSQL = db.execPlainSql("SELECT * FROM names");
auto list = utils.tableFromQuery<Name>(selectSQL);
// ENSURE SAME
QCOMPARE(list.count(), 2);
auto names_tab = list.first();
qDebug() << "Uuid" << names_tab->uuid();
QVERIFY(names_tab);
QCOMPARE(names_tab->name(), QStringLiteral("TestnameA"));
QCOMPARE(list.first()->jsonData(), name_A.jsonData());
}
void SqliteTest::updateTable_test()
{
// Prepare temporary path for database
QTemporaryDir dir;
QString dbpath = dir.path() + "/testdb.sqlite";
serversdk::DatabaseManager db;
db.openSQLite(dbpath);
QVERIFY(db.isOpen());
Name names;
// CREATE TABLE
serversdk::DatabaseUtils utils(&db);
QSqlQuery query = utils.createTable(&names, "names");
// INSERT INTO TABLE
const QString uuidA = "48f64fab-ba2a-40b5-8fbb-75361099dfb6";
names.set_uuid(uuidA);
names.set_id(2);
names.set_name("Testname");
utils.insertIntoTable(&names, "names");
// NOW UPDATING TABLE WITH name: NewName
names.set_name("NewName");
utils.updateTable(&names, "names");
// SELECT FROM TABLE
QSqlQuery selectSQL = db.execPlainSql("SELECT * FROM names");
auto list = utils.tableFromQuery<Name>(selectSQL);
// ENSURE SAME
QCOMPARE(list.count(), 1);
auto names_tab = list.first();
QVERIFY(names_tab);
QCOMPARE(names_tab->name(), QStringLiteral("NewName"));
QCOMPARE(list.first()->jsonData(), names.jsonData());
}
QTEST_APPLESS_MAIN(SqliteTest)
#include "tst_sqlite.moc"