mirror of
https://gitlab.com/spaceti-app/integrations/common/server-sdk.git
synced 2026-07-12 14:10:43 +02:00
fixing unittest ( update unittest, primary key, camelCase )
This commit is contained in:
parent
e266b8a8b4
commit
9cc150d50b
@ -79,7 +79,7 @@ QString DatabaseUtils::createTableText(const DatabaseTable *table, const QString
|
|||||||
// in: PRIMARY KEY
|
// in: PRIMARY KEY
|
||||||
// out: "CREATE TABLE colnod_subject ( id TEXT PRIMARY KEY"
|
// out: "CREATE TABLE colnod_subject ( id TEXT PRIMARY KEY"
|
||||||
if (first) { // first row
|
if (first) { // first row
|
||||||
sql += " PRIMARY KEY";
|
sql += " PRIMARY KEY NOT NULL";
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,6 +105,7 @@ QSqlQuery DatabaseUtils::createTable(const DatabaseTable *table, const QString t
|
|||||||
{
|
{
|
||||||
// CREATE TABLE ...
|
// CREATE TABLE ...
|
||||||
QString sql = createTableText(table, tableName);
|
QString sql = createTableText(table, tableName);
|
||||||
|
qCDebug(sdkdb) << "SQL:" << sql;
|
||||||
return mDatabaseManager->execPlainSql(sql);
|
return mDatabaseManager->execPlainSql(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,14 +148,17 @@ QSqlQuery DatabaseUtils::insertIntoTable(const DatabaseTable *table, const QStri
|
|||||||
QSqlQuery DatabaseUtils::updateTable(const DatabaseTable *table, const QString table_name) const
|
QSqlQuery DatabaseUtils::updateTable(const DatabaseTable *table, const QString table_name) const
|
||||||
{
|
{
|
||||||
QString columnsAndValues;
|
QString columnsAndValues;
|
||||||
|
QString primaryKeyCondition;
|
||||||
// tepmporary, for edit ( add one more parameter to func sth like QList with conditions
|
|
||||||
QString conditions;
|
|
||||||
conditions = "id = :id";
|
|
||||||
|
|
||||||
QVariantMap valueMap = table->toVariantMap();
|
QVariantMap valueMap = table->toVariantMap();
|
||||||
|
|
||||||
auto keys = valueMap.keys();
|
auto keys = valueMap.keys();
|
||||||
|
|
||||||
|
Q_ASSERT(!keys.isEmpty());
|
||||||
|
// Primary key is first user property ( first VariantMap item )
|
||||||
|
// in ( primary key ): id
|
||||||
|
// out: id = :id
|
||||||
|
primaryKeyCondition = keys.at(0) + " = :" + keys.at(0);
|
||||||
|
|
||||||
for (auto _key : keys) {
|
for (auto _key : keys) {
|
||||||
QString key = fromCamelCase(_key);
|
QString key = fromCamelCase(_key);
|
||||||
if (!columnsAndValues.isEmpty()) {
|
if (!columnsAndValues.isEmpty()) {
|
||||||
@ -164,7 +168,7 @@ QSqlQuery DatabaseUtils::updateTable(const DatabaseTable *table, const QString t
|
|||||||
}
|
}
|
||||||
|
|
||||||
QSqlQuery query(mDatabaseManager->database());
|
QSqlQuery query(mDatabaseManager->database());
|
||||||
QString queryText = QString("UPDATE %1 SET %2 WHERE %3;").arg(table_name).arg(columnsAndValues).arg(conditions);
|
QString queryText = QString("UPDATE %1 SET %2 WHERE %3;").arg(table_name).arg(columnsAndValues).arg(primaryKeyCondition);
|
||||||
query.prepare(queryText);
|
query.prepare(queryText);
|
||||||
|
|
||||||
for (auto _key : keys ) {
|
for (auto _key : keys ) {
|
||||||
|
|||||||
@ -35,7 +35,9 @@ public:
|
|||||||
int total = rec.count();
|
int total = rec.count();
|
||||||
QMap<QString, QVariant> map;
|
QMap<QString, QVariant> map;
|
||||||
for (int column = 0; column < total; ++column) {
|
for (int column = 0; column < total; ++column) {
|
||||||
map.insert(rec.fieldName(column), query.value(column));
|
QString columnName = rec.fieldName(column);
|
||||||
|
QString propertyName = toCamelCase(columnName);
|
||||||
|
map.insert(propertyName, query.value(column));
|
||||||
}
|
}
|
||||||
|
|
||||||
auto data = std::make_shared<T>();
|
auto data = std::make_shared<T>();
|
||||||
|
|||||||
@ -55,7 +55,7 @@ void DatabaseUtilsTest::createTable_test()
|
|||||||
QString sql = utils.createTableText(table.get(), "subjects");
|
QString sql = utils.createTableText(table.get(), "subjects");
|
||||||
|
|
||||||
QString expected = "CREATE TABLE subjects ( "
|
QString expected = "CREATE TABLE subjects ( "
|
||||||
"id TEXT PRIMARY KEY, "
|
"id TEXT PRIMARY KEY NOT NULL, "
|
||||||
"description TEXT, "
|
"description TEXT, "
|
||||||
"last_update INTEGER, "
|
"last_update INTEGER, "
|
||||||
"name TEXT, "
|
"name TEXT, "
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
// add necessary includes here
|
// add necessary includes here
|
||||||
|
|
||||||
|
|
||||||
class Names : public serversdk::DatabaseTable {
|
class Name : public serversdk::DatabaseTable {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
TABLE_PROPERTY(int, id, set_id, 0);
|
TABLE_PROPERTY(int, id, set_id, 0);
|
||||||
TABLE_PROPERTY(QString, name, set_name, 0);
|
TABLE_PROPERTY(QString, name, set_name, 0);
|
||||||
@ -68,7 +68,7 @@ void PostgresqlTest::createTable_test()
|
|||||||
QVERIFY(db.isValid());
|
QVERIFY(db.isValid());
|
||||||
QVERIFY(db.isOpen());
|
QVERIFY(db.isOpen());
|
||||||
|
|
||||||
Names names;
|
Name names;
|
||||||
|
|
||||||
//Have to drop tabel
|
//Have to drop tabel
|
||||||
QSqlQuery dropQuery = db.execPlainSql("DROP TABLE names");
|
QSqlQuery dropQuery = db.execPlainSql("DROP TABLE names");
|
||||||
@ -87,13 +87,13 @@ void PostgresqlTest::createTable_test()
|
|||||||
|
|
||||||
// SELECT FROM TABLE
|
// SELECT FROM TABLE
|
||||||
QSqlQuery selectSQL = db.execPlainSql("SELECT * FROM names");
|
QSqlQuery selectSQL = db.execPlainSql("SELECT * FROM names");
|
||||||
auto list = utils.tableFromQuery<Names>(selectSQL);
|
auto list = utils.tableFromQuery<Name>(selectSQL);
|
||||||
|
|
||||||
// ENSURE SAME
|
// ENSURE SAME
|
||||||
auto first = list.first();
|
auto first = list.first();
|
||||||
// Problem is that fromListvariantMap returns shared_ptr of class DataTable
|
// Problem is that fromListvariantMap returns shared_ptr of class DataTable
|
||||||
// Must subclass.
|
// Must subclass.
|
||||||
auto names_tab = std::dynamic_pointer_cast<Names>(first);
|
auto names_tab = std::dynamic_pointer_cast<Name>(first);
|
||||||
QCOMPARE(list.count(), 1);
|
QCOMPARE(list.count(), 1);
|
||||||
QCOMPARE(names_tab->name(), QStringLiteral("Testname"));
|
QCOMPARE(names_tab->name(), QStringLiteral("Testname"));
|
||||||
|
|
||||||
|
|||||||
@ -6,10 +6,12 @@
|
|||||||
// add necessary includes here
|
// add necessary includes here
|
||||||
|
|
||||||
|
|
||||||
class Names : public serversdk::DatabaseTable {
|
class Name : public serversdk::DatabaseTable {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
TABLE_PROPERTY(QString, uuid, set_uuid, QString());
|
||||||
TABLE_PROPERTY(int, id, set_id, 0);
|
TABLE_PROPERTY(int, id, set_id, 0);
|
||||||
TABLE_PROPERTY(QString, name, set_name, 0);
|
TABLE_PROPERTY(QString, name, set_name, "");
|
||||||
|
TABLE_PROPERTY(QString, vehicleName, set_vehicle_name, "Škodouliňkaťoučký");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -18,24 +20,14 @@ class SqliteTest : public QObject
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SqliteTest();
|
SqliteTest() = default;
|
||||||
~SqliteTest();
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void createDb_test();
|
void createDb_test();
|
||||||
void createTable_test();
|
void createTable_test();
|
||||||
|
void updateTable_test();
|
||||||
};
|
};
|
||||||
|
|
||||||
SqliteTest::SqliteTest()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
SqliteTest::~SqliteTest()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void SqliteTest::createDb_test()
|
void SqliteTest::createDb_test()
|
||||||
{
|
{
|
||||||
@ -72,27 +64,76 @@ void SqliteTest::createTable_test()
|
|||||||
db.openSQLite(dbpath);
|
db.openSQLite(dbpath);
|
||||||
QVERIFY(db.isOpen());
|
QVERIFY(db.isOpen());
|
||||||
|
|
||||||
Names names;
|
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
|
// CREATE TABLE
|
||||||
serversdk::DatabaseUtils utils(&db);
|
serversdk::DatabaseUtils utils(&db);
|
||||||
QSqlQuery query = utils.createTable(&names, "names");
|
QSqlQuery query = utils.createTable(&names, "names");
|
||||||
|
|
||||||
// INSERT INTO TABLE
|
// INSERT INTO TABLE
|
||||||
|
const QString uuidA = "48f64fab-ba2a-40b5-8fbb-75361099dfb6";
|
||||||
|
names.set_uuid(uuidA);
|
||||||
names.set_id(2);
|
names.set_id(2);
|
||||||
names.set_name("Testname");
|
names.set_name("Testname");
|
||||||
|
|
||||||
utils.insertIntoTable(&names, "names");
|
utils.insertIntoTable(&names, "names");
|
||||||
|
|
||||||
|
// NOW UPDATING TABLE WITH name: NewName
|
||||||
|
names.set_name("NewName");
|
||||||
|
utils.updateTable(&names, "names");
|
||||||
|
|
||||||
// SELECT FROM TABLE
|
// SELECT FROM TABLE
|
||||||
QSqlQuery selectSQL = db.execPlainSql("SELECT * FROM names");
|
QSqlQuery selectSQL = db.execPlainSql("SELECT * FROM names");
|
||||||
auto list = utils.tableFromQuery<Names>(selectSQL);
|
auto list = utils.tableFromQuery<Name>(selectSQL);
|
||||||
|
|
||||||
// ENSURE SAME
|
// ENSURE SAME
|
||||||
QCOMPARE(list.count(), 1);
|
QCOMPARE(list.count(), 1);
|
||||||
auto names_tab = list.first();
|
auto names_tab = list.first();
|
||||||
QVERIFY(names_tab);
|
QVERIFY(names_tab);
|
||||||
QCOMPARE(names_tab->name(), QStringLiteral("Testname"));
|
QCOMPARE(names_tab->name(), QStringLiteral("NewName"));
|
||||||
|
|
||||||
QCOMPARE(list.first()->jsonData(), names.jsonData());
|
QCOMPARE(list.first()->jsonData(), names.jsonData());
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user