From 871a048580d5a464fb697713a5e0e2c52dee5208 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 27 Jan 2017 16:56:17 +0100 Subject: Ensure blooming queries filter as they should After the initial bloom, it should turn into a regular filter. --- tests/querytest.cpp | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) (limited to 'tests') diff --git a/tests/querytest.cpp b/tests/querytest.cpp index 92fc1f7..10f5567 100644 --- a/tests/querytest.cpp +++ b/tests/querytest.cpp @@ -11,6 +11,7 @@ #include "modelresult.h" #include "test.h" #include "testutils.h" +#include "applicationdomaintype.h" using namespace Sink; using namespace Sink::ApplicationDomain; @@ -632,6 +633,7 @@ private slots: auto folders = Sink::Store::read(query); QCOMPARE(folders.size(), 1); } + void testLivequeryUnmatchInThread() { // Setup @@ -707,6 +709,96 @@ private slots: auto mail = model->data(model->index(0, 0, QModelIndex{}), Sink::Store::DomainObjectRole).value(); QCOMPARE(mail->getUnread(), true); } + + void testBloom() + { + // Setup + auto folder1 = Folder::createEntity("sink.dummy.instance1"); + VERIFYEXEC(Sink::Store::create(folder1)); + + auto folder2 = Folder::createEntity("sink.dummy.instance1"); + VERIFYEXEC(Sink::Store::create(folder2)); + + auto mail1 = Mail::createEntity("sink.dummy.instance1"); + mail1.setUid("mail1"); + mail1.setFolder(folder1); + VERIFYEXEC(Sink::Store::create(mail1)); + + // Ensure all local data is processed + VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1")); + + { + auto mail = Mail::createEntity("sink.dummy.instance1"); + mail.setUid("mail2"); + mail.setFolder(folder1); + VERIFYEXEC(Sink::Store::create(mail)); + } + { + auto mail = Mail::createEntity("sink.dummy.instance1"); + mail.setUid("mail3"); + mail.setFolder(folder2); + VERIFYEXEC(Sink::Store::create(mail)); + } + VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1")); + + Query query; + query.setId("testFilterCreationInThread"); + query.filter(mail1.identifier()); + query.bloom(); + query.request(); + + auto model = Sink::Store::loadModel(query); + QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool()); + QCOMPARE(model->rowCount(), 2); + } + + void testLivequeryFilterCreationInThread() + { + // Setup + auto folder1 = Folder::createEntity("sink.dummy.instance1"); + VERIFYEXEC(Sink::Store::create(folder1)); + + auto folder2 = Folder::createEntity("sink.dummy.instance1"); + VERIFYEXEC(Sink::Store::create(folder2)); + + auto mail1 = Mail::createEntity("sink.dummy.instance1"); + mail1.setUid("mail1"); + mail1.setFolder(folder1); + VERIFYEXEC(Sink::Store::create(mail1)); + + // Ensure all local data is processed + VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1")); + + Query query; + query.setId("testFilterCreationInThread"); + query.filter(mail1.identifier()); + query.bloom(); + query.sort(); + query.setFlags(Query::LiveQuery); + query.request(); + query.request(); + + auto model = Sink::Store::loadModel(query); + QTRY_COMPARE(model->rowCount(), 1); + + { + auto mail = Mail::createEntity("sink.dummy.instance1"); + mail.setUid("mail2"); + mail.setFolder(folder1); + VERIFYEXEC(Sink::Store::create(mail)); + } + { + auto mail = Mail::createEntity("sink.dummy.instance1"); + mail.setUid("mail3"); + mail.setFolder(folder2); + VERIFYEXEC(Sink::Store::create(mail)); + } + VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1")); + + QTRY_COMPARE(model->rowCount(), 2); + QTest::qWait(100); + QCOMPARE(model->rowCount(), 2); + } }; QTEST_MAIN(QueryTest) -- cgit v1.2.3