summaryrefslogtreecommitdiffstats
path: root/tests/querytest.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-10-04 08:25:18 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-10-04 08:25:18 +0200
commitd6a01b3f82d626856001356c0875aa738a0346ac (patch)
treed77a6000e9d53be7844d72697496efa093b5f8ad /tests/querytest.cpp
parent48ba18c92eede967afc4cf8894a3b06fd6a3c179 (diff)
downloadsink-d6a01b3f82d626856001356c0875aa738a0346ac.tar.gz
sink-d6a01b3f82d626856001356c0875aa738a0346ac.zip
Support for subqueries.
This allows us to match properties from a subquery. Unfortunately this also means that DataStoreQuery needs access to all type implementations to issue the subquery (for potentially another type).
Diffstat (limited to 'tests/querytest.cpp')
-rw-r--r--tests/querytest.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/querytest.cpp b/tests/querytest.cpp
index afa8e33..6011a99 100644
--- a/tests/querytest.cpp
+++ b/tests/querytest.cpp
@@ -492,6 +492,42 @@ private slots:
492 QCOMPARE(folders.size(), 1); 492 QCOMPARE(folders.size(), 1);
493 } 493 }
494 494
495 void testSubquery()
496 {
497 // Setup
498 auto folder1 = Folder::createEntity<Folder>("sink.dummy.instance1");
499 folder1.setSpecialPurpose(QByteArrayList() << "purpose1");
500 VERIFYEXEC(Sink::Store::create<Folder>(folder1));
501
502 auto folder2 = Folder::createEntity<Folder>("sink.dummy.instance1");
503 folder2.setSpecialPurpose(QByteArrayList() << "purpose2");
504 VERIFYEXEC(Sink::Store::create<Folder>(folder2));
505
506 {
507 auto mail = Mail::createEntity<Mail>("sink.dummy.instance1");
508 mail.setUid("mail1");
509 mail.setFolder(folder1);
510 VERIFYEXEC(Sink::Store::create(mail));
511 }
512 {
513 auto mail = Mail::createEntity<Mail>("sink.dummy.instance1");
514 mail.setUid("mail2");
515 mail.setFolder(folder2);
516 VERIFYEXEC(Sink::Store::create(mail));
517 }
518
519 // Ensure all local data is processed
520 Sink::ResourceControl::flushMessageQueue(QByteArrayList() << "sink.dummy.instance1").exec().waitForFinished();
521
522 //Setup two folders with a mail each, ensure we only get the mail from the folder that matches the folder filter.
523 Query query;
524 query.filter<Mail::Folder>(Sink::Query().containsFilter<Folder::SpecialPurpose>("purpose1"));
525 query.request<Mail::Uid>();
526
527 auto mails = Sink::Store::read<Mail>(query);
528 QCOMPARE(mails.size(), 1);
529 QCOMPARE(mails.first().getUid().toLatin1(), QByteArray("mail1"));
530 }
495}; 531};
496 532
497QTEST_MAIN(QueryTest) 533QTEST_MAIN(QueryTest)