summaryrefslogtreecommitdiffstats
path: root/tests/querytest.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-02-11 12:02:58 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-02-13 19:42:39 +0100
commit1259b236704e790fa1284a63ec537525bce23841 (patch)
tree85cd0491e56d2f604cc8aa291a49d20f8f73c684 /tests/querytest.cpp
parentb4bd3932aa2a8e841ed204b341bcbf65ba59c5b2 (diff)
downloadsink-1259b236704e790fa1284a63ec537525bce23841.tar.gz
sink-1259b236704e790fa1284a63ec537525bce23841.zip
Fixed reduction updates with stateful query.
Some filters need to maintain state between runs in order to be able to emit only what has changed. This now also make reduction work for live queries.
Diffstat (limited to 'tests/querytest.cpp')
-rw-r--r--tests/querytest.cpp58
1 files changed, 56 insertions, 2 deletions
diff --git a/tests/querytest.cpp b/tests/querytest.cpp
index 0641c0d..328448f 100644
--- a/tests/querytest.cpp
+++ b/tests/querytest.cpp
@@ -731,7 +731,7 @@ private slots:
731 Query query; 731 Query query;
732 query.setId("testLivequeryUnmatch"); 732 query.setId("testLivequeryUnmatch");
733 query.filter<Mail::Folder>(folder1); 733 query.filter<Mail::Folder>(folder1);
734 query.reduce<Mail::ThreadId>(Query::Reduce::Selector::max<Mail::Date>()).count("count").collect<Mail::Sender>("senders"); 734 query.reduce<Mail::ThreadId>(Query::Reduce::Selector::max<Mail::Date>()).count("count").collect<Mail::Folder>("folders");
735 query.sort<Mail::Date>(); 735 query.sort<Mail::Date>();
736 query.setFlags(Query::LiveQuery); 736 query.setFlags(Query::LiveQuery);
737 query.request<Mail::Unread>(); 737 query.request<Mail::Unread>();
@@ -747,7 +747,61 @@ private slots:
747 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1")); 747 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1"));
748 QTRY_COMPARE(model->rowCount(), 1); 748 QTRY_COMPARE(model->rowCount(), 1);
749 auto mail = model->data(model->index(0, 0, QModelIndex{}), Sink::Store::DomainObjectRole).value<Mail::Ptr>(); 749 auto mail = model->data(model->index(0, 0, QModelIndex{}), Sink::Store::DomainObjectRole).value<Mail::Ptr>();
750 QCOMPARE(mail->getUnread(), true); 750 QTRY_COMPARE(mail->getUnread(), true);
751 QCOMPARE(mail->getProperty("count").toInt(), 1);
752 QCOMPARE(mail->getProperty("folders").toList().size(), 1);
753 }
754
755 void testReductionUpdate()
756 {
757 // Setup
758 auto folder1 = Folder::createEntity<Folder>("sink.dummy.instance1");
759 VERIFYEXEC(Sink::Store::create<Folder>(folder1));
760
761 auto folder2 = Folder::createEntity<Folder>("sink.dummy.instance1");
762 VERIFYEXEC(Sink::Store::create<Folder>(folder2));
763
764 QDateTime now{QDate{2017, 2, 3}, QTime{10, 0, 0}};
765 QDateTime later{QDate{2017, 2, 3}, QTime{11, 0, 0}};
766
767 auto mail1 = Mail::createEntity<Mail>("sink.dummy.instance1");
768 mail1.setExtractedMessageId("mail1");
769 mail1.setFolder(folder1);
770 mail1.setUnread(false);
771 mail1.setExtractedDate(now);
772 VERIFYEXEC(Sink::Store::create(mail1));
773
774 // Ensure all local data is processed
775 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1"));
776
777 Query query;
778 query.setId("testLivequeryUnmatch");
779 query.setFlags(Query::LiveQuery);
780 query.filter<Mail::Folder>(folder1);
781 query.reduce<Mail::Folder>(Query::Reduce::Selector::max<Mail::Date>()).count("count").collect<Mail::Folder>("folders");
782 query.sort<Mail::Date>();
783 query.request<Mail::Unread>();
784 query.request<Mail::MessageId>();
785
786 auto model = Sink::Store::loadModel<Mail>(query);
787 QTRY_COMPARE(model->rowCount(), 1);
788
789 //The leader should change to mail2 after the modification
790 {
791 auto mail2 = Mail::createEntity<Mail>("sink.dummy.instance1");
792 mail2.setExtractedMessageId("mail2");
793 mail2.setFolder(folder1);
794 mail2.setUnread(false);
795 mail2.setExtractedDate(later);
796 VERIFYEXEC(Sink::Store::create(mail2));
797 }
798
799 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1"));
800 QTRY_COMPARE(model->rowCount(), 1);
801 auto mail = model->data(model->index(0, 0, QModelIndex{}), Sink::Store::DomainObjectRole).value<Mail::Ptr>();
802 QTRY_COMPARE(mail->getMessageId(), QByteArray{"mail2"});
803 QCOMPARE(mail->getProperty("count").toInt(), 2);
804 QCOMPARE(mail->getProperty("folders").toList().size(), 2);
751 } 805 }
752 806
753 void testBloom() 807 void testBloom()