Changeset View
Changeset View
Standalone View
Standalone View
src/tests/db-store-test.cpp
| /* | /* | ||||
| * This file is part of kazv. | * This file is part of kazv. | ||||
| * SPDX-FileCopyrightText: 2026 tusooa <tusooa@kazv.moe> | * SPDX-FileCopyrightText: 2026 tusooa <tusooa@kazv.moe> | ||||
| * SPDX-License-Identifier: AGPL-3.0-or-later | * SPDX-License-Identifier: AGPL-3.0-or-later | ||||
| */ | */ | ||||
| #include <kazv-defs.hpp> | #include <kazv-defs.hpp> | ||||
| #include "db-store.hpp" | #include "db-store.hpp" | ||||
| #include <QtTest> | #include <QtTest> | ||||
| #include <QTemporaryDir> | #include <QTemporaryDir> | ||||
| #include <QCoroCore> | #include <QCoroCore> | ||||
| #include <factory.hpp> | #include <factory.hpp> | ||||
| using namespace Kazv::Factory; | using namespace Kazv::Factory; | ||||
| using namespace Kazv; | using namespace Kazv; | ||||
| using namespace Qt::Literals::StringLiterals; | |||||
| class DbStoreTest : public QObject | class DbStoreTest : public QObject | ||||
| { | { | ||||
| Q_OBJECT | Q_OBJECT | ||||
| private Q_SLOTS: | private Q_SLOTS: | ||||
| void init(); | void init(); | ||||
| void testSetup(); | void testSetup(); | ||||
| void testImportAllFrom(); | void testImportAllFrom(); | ||||
| void testResultToEvent(); | |||||
| void testSaveEvents(); | |||||
| void cleanup(); | void cleanup(); | ||||
| private: | private: | ||||
| QTemporaryDir m_tempDir; | QTemporaryDir m_tempDir; | ||||
| }; | }; | ||||
| void DbStoreTest::init() | void DbStoreTest::init() | ||||
| { | { | ||||
| Show All 23 Lines | void DbStoreTest::testImportAllFrom() | ||||
| auto stat = QCoro::waitFor([]( | auto stat = QCoro::waitFor([]( | ||||
| std::string tempDir, DbStore &dbStore, SdkModel m | std::string tempDir, DbStore &dbStore, SdkModel m | ||||
| ) -> QCoro::Task<std::pair<bool, QString>> { | ) -> QCoro::Task<std::pair<bool, QString>> { | ||||
| auto res = co_await dbStore.setup(tempDir, "@userid:example.com", "device1"); | auto res = co_await dbStore.setup(tempDir, "@userid:example.com", "device1"); | ||||
| if (!res.first) { co_return res; } | if (!res.first) { co_return res; } | ||||
| co_return co_await dbStore.importAllFrom(m); | co_return co_await dbStore.importAllFrom(m); | ||||
| }(m_tempDir.path().toStdString(), dbStore, m)); | }(m_tempDir.path().toStdString(), dbStore, m)); | ||||
| QVERIFY(stat.first); | QVERIFY(stat.first); | ||||
| } | |||||
| void DbStoreTest::testResultToEvent() | |||||
| { | |||||
| { | |||||
| Event e = makeEvent(withEventType("m.room.encrypted")) | |||||
| .setDecryptedJson(json{{"content", {{"text", "mew"}}}}, Event::Decrypted); | |||||
| QVERIFY(e == DbStore::resultToEvent( | |||||
| e.encrypted(), | |||||
| e.decrypted(), | |||||
| QString::fromStdString(e.originalJson().get().dump()), | |||||
| QString::fromStdString(e.decryptedJson().get().dump()) | |||||
| )); | |||||
| } | |||||
| { | |||||
| Event e = makeEvent(); | |||||
| QVERIFY(e == DbStore::resultToEvent( | |||||
| e.encrypted(), | |||||
| e.decrypted(), | |||||
| QString::fromStdString(e.originalJson().get().dump()), | |||||
| QVariant().toString() | |||||
| )); | |||||
| } | |||||
| } | |||||
| void DbStoreTest::testSaveEvents() | |||||
| { | |||||
| DbStore dbStore; | |||||
| { | |||||
| auto stat = QCoro::waitFor(dbStore.setup(m_tempDir.path().toStdString(), "@userid:example.com", "device1")); | |||||
| QVERIFY(stat.first); | |||||
| } | |||||
| auto e1 = makeEvent(); | |||||
| auto e2 = makeEvent(); | |||||
| auto e3 = makeEvent(); | |||||
| SaveEventsRequested s{ | |||||
| {{"!room1:example.com", {e1, e2}}}, | |||||
| {{"!room2:example.com", {e3}}}, | |||||
| }; | |||||
| { | |||||
| auto stat = QCoro::waitFor(dbStore.saveEvents(s)); | |||||
| QVERIFY(stat.first); | |||||
| } | |||||
| auto res = QCoro::waitFor(dbStore.getEventById(u"!room1:example.com"_s, QString::fromStdString(e1.id()))); | |||||
| QVERIFY(res.has_value() && res.value().first == e1 && res.value().second); | |||||
| res = QCoro::waitFor(dbStore.getEventById(u"!room2:example.com"_s, QString::fromStdString(e3.id()))); | |||||
| QVERIFY(res.has_value() && res.value().first == e3 && !res.value().second); | |||||
| } | } | ||||
| QTEST_MAIN(DbStoreTest) | QTEST_MAIN(DbStoreTest) | ||||
| #include "db-store-test.moc" | #include "db-store-test.moc" | ||||