diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-02-11 12:02:58 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-02-13 19:42:39 +0100 |
commit | 1259b236704e790fa1284a63ec537525bce23841 (patch) | |
tree | 85cd0491e56d2f604cc8aa291a49d20f8f73c684 /tests/querytest.cpp | |
parent | b4bd3932aa2a8e841ed204b341bcbf65ba59c5b2 (diff) | |
download | sink-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.cpp | 58 |
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() |