From c4ae619718c4a3f2753331b1327855d2ea335634 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 11 Oct 2016 04:24:34 +0200 Subject: Ensure subquery results work with live queries --- tests/querytest.cpp | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'tests') diff --git a/tests/querytest.cpp b/tests/querytest.cpp index e978787..c5c251a 100644 --- a/tests/querytest.cpp +++ b/tests/querytest.cpp @@ -529,6 +529,61 @@ private slots: QCOMPARE(mails.first().getUid().toLatin1(), QByteArray("mail1")); } + void testLiveSubquery() + { + // Setup + auto folder1 = Folder::createEntity("sink.dummy.instance1"); + folder1.setSpecialPurpose(QByteArrayList() << "purpose1"); + VERIFYEXEC(Sink::Store::create(folder1)); + + auto folder2 = Folder::createEntity("sink.dummy.instance1"); + folder2.setSpecialPurpose(QByteArrayList() << "purpose2"); + VERIFYEXEC(Sink::Store::create(folder2)); + + { + auto mail = Mail::createEntity("sink.dummy.instance1"); + mail.setUid("mail1"); + mail.setFolder(folder1); + VERIFYEXEC(Sink::Store::create(mail)); + } + { + auto mail = Mail::createEntity("sink.dummy.instance1"); + mail.setUid("mail2"); + mail.setFolder(folder2); + VERIFYEXEC(Sink::Store::create(mail)); + } + + // Ensure all local data is processed + VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(QByteArrayList() << "sink.dummy.instance1")); + + //Setup two folders with a mail each, ensure we only get the mail from the folder that matches the folder filter. + Query query; + query.filter(Sink::Query().containsFilter("purpose1")); + query.request(); + query.liveQuery = true; + + auto model = Sink::Store::loadModel(query); + QTRY_COMPARE(model->rowCount(), 1); + + //This folder should not make it through the query + { + auto mail = Mail::createEntity("sink.dummy.instance1"); + mail.setUid("mail3"); + mail.setFolder(folder2); + VERIFYEXEC(Sink::Store::create(mail)); + } + + //But this one should + { + auto mail = Mail::createEntity("sink.dummy.instance1"); + mail.setUid("mail4"); + mail.setFolder(folder1); + VERIFYEXEC(Sink::Store::create(mail)); + } + QTRY_COMPARE(model->rowCount(), 2); + + } + void testResourceSubQuery() { using namespace Sink; -- cgit v1.2.3