diff --git a/src/colnod/databaseapi.cpp b/src/colnod/databaseapi.cpp index 163ccbd..549332d 100644 --- a/src/colnod/databaseapi.cpp +++ b/src/colnod/databaseapi.cpp @@ -269,7 +269,7 @@ bool DatabaseAPI::deleteItems(const QList &ids, const QString &tableNam std::shared_ptr DatabaseAPI::getToken(const QString &id) { auto query = mDbMan->createQuery(); - query.prepare("SELECT * FROM colnod_token WHERE d = :id"); + query.prepare("SELECT * FROM colnod_token WHERE id = :id"); query.bindValue(":id", id); if (!executeQuery(query)) { qCritical(database) << "ERROR during accessing existing tokens. EXIT"; @@ -278,7 +278,7 @@ std::shared_ptr DatabaseAPI::getToken(const QString &id) } auto list = utils->tableFromQuery(query); if (list.isEmpty()) - return nullptr; + return std::make_shared(); return list.at(0); } diff --git a/src/colnod/syncmanager.cpp b/src/colnod/syncmanager.cpp index 31e35ac..442a23b 100644 --- a/src/colnod/syncmanager.cpp +++ b/src/colnod/syncmanager.cpp @@ -76,7 +76,7 @@ bool SyncManager::startSynchronization() std::unique_ptr preparedData = prepareDataNew(databaseData, colnodData); if (!preparedData) { - qCritical(syncmanager) << "Not possible to get correct data from colnod"; + qCritical(syncmanager) << "Not possible to compose data"; QCoreApplication::exit(-1); return; } @@ -167,6 +167,18 @@ std::unique_ptr SyncManager::prepareDataNew(const std::shared_ptr< // not conflict so add to prepered tokens if (!databaseData->updatedTokens.contains(colnodToken->id())) { + auto token = database->getToken(colnodToken->id()); + if (!token) { + qCritical(syncmanager) << "Not possible to access database."; + return nullptr; + } + if ( token ) { + // alredy synced ( tokens are same ) + if (token == colnodToken) { + alreadySynced.append(colnodToken->id()); + continue; + } + } preparedColnodData->updatedTokens.insert(colnodToken->id(), colnodToken); continue; } @@ -178,12 +190,6 @@ std::unique_ptr SyncManager::prepareDataNew(const std::shared_ptr< else { conflicts.append(colnodToken->id()); } - - auto token = database->getToken(colnodToken->id()); - if ( token ) - // alredy synced ( tokens are same ) - if (token == colnodToken) - alreadySynced.append(colnodToken->id()); } for (const auto &id : colnodData->deletedTokens) { diff --git a/test/auto/database/tst_databaseapi.cpp b/test/auto/database/tst_databaseapi.cpp index 43632ef..51989f0 100644 --- a/test/auto/database/tst_databaseapi.cpp +++ b/test/auto/database/tst_databaseapi.cpp @@ -2,6 +2,7 @@ #include "databaseapi.h" // add necessary includes here +#include "token.h" class DatabaseTest : public QObject { @@ -14,6 +15,7 @@ private slots: void open_database_password_fail_test(); void download_data_test(); void download_data_fail_test(); + void get_token_test(); }; void DatabaseTest::open_database_test() @@ -76,6 +78,33 @@ void DatabaseTest::download_data_fail_test() QVERIFY(!db.downloadData()); } +void DatabaseTest::get_token_test() +{ + serversdk::DatabaseManager dbManager; + DatabaseAPI db(&dbManager, false); + + QVERIFY(!db.getToken("6c907a42-0401-4403-8af4-9d58eb35cddc")); + + db.open(); + + auto token = db.getToken("6c907a42-0401-4403-8af4-9d58eb35cddc"); + QVERIFY(token); + auto compareToken = std::make_shared(); + compareToken->setId("6c907a42-0401-4403-8af4-9d58eb35cddc"); + compareToken->setName("Losenicky"); + compareToken->setDescription(""); + compareToken->setLastUpdate(QDateTime::fromMSecsSinceEpoch(1543494713260)); + compareToken->setTokenData("AB1EA4D4"); + compareToken->setSubjectId("69c6e3b3-3f23-456f-a6c2-73ef08e589a4"); + QCOMPARE(compareToken, token); + + auto compareToken1 = std::make_shared(); + auto token1 = db.getToken("non-existing-id"); + QVERIFY(token1); + QCOMPARE(compareToken1, token1); + +} + QTEST_APPLESS_MAIN(DatabaseTest)