#include #include "Common/Query.hpp" #include "Databases/ContactsDB.hpp" #include "Database/Database.hpp" #include "Databases/SmsDB.hpp" #include "SMSRecord.hpp" #include "ThreadRecord.hpp" #include "queries/sms/QuerySMSSearch.hpp" #include #include #include namespace db { class TestQuery : public Query { public: TestQuery() : Query(Query::Type::Read) {} [[nodiscard]] auto debugInfo() const -> std::string override { return "Test!"; } }; } // namespace db TEST_CASE("Query interface") { Database::initialize(); auto contactsDB = std::make_unique(); auto smsDB = std::make_unique(); auto smsInterface = std::make_unique(smsDB.get(), contactsDB.get()); auto threadInterface = std::make_unique(smsDB.get(), contactsDB.get()); REQUIRE(contactsDB); REQUIRE(smsDB); REQUIRE(smsInterface); SECTION("unknown query -> no results") { REQUIRE(smsInterface->runQuery(std::make_shared()) == nullptr); } auto query = std::make_shared("a", 0, 10); SECTION("known query, wrong interface") { auto result = smsInterface->runQuery(query); REQUIRE(result == nullptr); } SECTION("proper result returned") { auto result = threadInterface->runQuery(query); REQUIRE(dynamic_cast(result.get())); } SECTION("Endpoint callback test") { std::shared_ptr query = std::make_shared(); auto testMessage = R"({"endpoint":6, "method":1, "uuid":12345, "body":{"test":"test"}})"; std::string err; auto msgJson = json11::Json::parse(testMessage, err); REQUIRE(err.empty()); Context context(msgJson); auto listener = std::make_unique( [=](db::QueryResult *result, Context &context) { if (auto SMSResult = dynamic_cast(result)) { auto id = SMSResult->getResults(); auto body = json11::Json::object{{"count", static_cast(id)}}; return true; } else { return false; } }, context); query->setQueryListener(std::move(listener)); auto result = smsInterface->runQuery(query); auto queryListener = result->getRequestQuery()->getQueryListener(); REQUIRE(queryListener->handleQueryResponse(result.get()) == true); } }