summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-02-13 18:33:49 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-02-13 19:42:39 +0100
commit30f873e8633340cc2f1d7aee4bb82526c673d639 (patch)
treef0d6ddf9acf59f8fe552c10b6f03acfb7a057e0c /tests
parent335251d0420523ac8b9997c802f6850c427aaf01 (diff)
downloadsink-30f873e8633340cc2f1d7aee4bb82526c673d639.tar.gz
sink-30f873e8633340cc2f1d7aee4bb82526c673d639.zip
Avoid triggering reinsert if the leader doesn't change.
Diffstat (limited to 'tests')
-rw-r--r--tests/querytest.cpp109
1 files changed, 109 insertions, 0 deletions
diff --git a/tests/querytest.cpp b/tests/querytest.cpp
index ac55d0b..bd3b927 100644
--- a/tests/querytest.cpp
+++ b/tests/querytest.cpp
@@ -933,6 +933,115 @@ private slots:
933 QCOMPARE(layoutChangedSpy.size(), 0); 933 QCOMPARE(layoutChangedSpy.size(), 0);
934 QCOMPARE(resetSpy.size(), 0); 934 QCOMPARE(resetSpy.size(), 0);
935 } 935 }
936
937 void testLivequeryThreadleaderChange()
938 {
939 // Setup
940 auto folder1 = Folder::createEntity<Folder>("sink.dummy.instance1");
941 VERIFYEXEC(Sink::Store::create<Folder>(folder1));
942
943 auto folder2 = Folder::createEntity<Folder>("sink.dummy.instance1");
944 VERIFYEXEC(Sink::Store::create<Folder>(folder2));
945
946 QDateTime earlier{QDate{2017, 2, 3}, QTime{9, 0, 0}};
947 QDateTime now{QDate{2017, 2, 3}, QTime{10, 0, 0}};
948 QDateTime later{QDate{2017, 2, 3}, QTime{11, 0, 0}};
949
950 auto mail1 = Mail::createEntity<Mail>("sink.dummy.instance1");
951 mail1.setExtractedMessageId("mail1");
952 mail1.setFolder(folder1);
953 mail1.setExtractedDate(now);
954 VERIFYEXEC(Sink::Store::create(mail1));
955
956 // Ensure all local data is processed
957 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1"));
958
959 Query query;
960 query.setId("testLivequeryThreadleaderChange");
961 query.setFlags(Query::LiveQuery);
962 query.reduce<Mail::Folder>(Query::Reduce::Selector::max<Mail::Date>()).count("count").collect<Mail::Folder>("folders");
963 query.sort<Mail::Date>();
964 query.request<Mail::MessageId>();
965
966 auto model = Sink::Store::loadModel<Mail>(query);
967 QTRY_VERIFY(model->data(QModelIndex(), Sink::Store::ChildrenFetchedRole).toBool());
968 QCOMPARE(model->rowCount(), 1);
969
970 QSignalSpy insertedSpy(model.data(), &QAbstractItemModel::rowsInserted);
971 QSignalSpy removedSpy(model.data(), &QAbstractItemModel::rowsRemoved);
972 QSignalSpy changedSpy(model.data(), &QAbstractItemModel::dataChanged);
973 QSignalSpy layoutChangedSpy(model.data(), &QAbstractItemModel::layoutChanged);
974 QSignalSpy resetSpy(model.data(), &QAbstractItemModel::modelReset);
975
976 //The leader shouldn't change to mail2 after the modification
977 {
978 auto mail2 = Mail::createEntity<Mail>("sink.dummy.instance1");
979 mail2.setExtractedMessageId("mail2");
980 mail2.setFolder(folder1);
981 mail2.setExtractedDate(earlier);
982 VERIFYEXEC(Sink::Store::create(mail2));
983 }
984
985 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1"));
986 QTRY_COMPARE(model->rowCount(), 1);
987 {
988 auto mail = model->data(model->index(0, 0, QModelIndex{}), Sink::Store::DomainObjectRole).value<Mail::Ptr>();
989 QTRY_COMPARE(mail->getMessageId(), QByteArray{"mail1"});
990 QTRY_COMPARE(mail->getProperty("count").toInt(), 2);
991 QCOMPARE(mail->getProperty("folders").toList().size(), 2);
992 }
993
994
995 QCOMPARE(insertedSpy.size(), 0);
996 QCOMPARE(removedSpy.size(), 0);
997 QCOMPARE(changedSpy.size(), 1);
998 QCOMPARE(layoutChangedSpy.size(), 0);
999 QCOMPARE(resetSpy.size(), 0);
1000
1001 //The leader should change to mail3 after the modification
1002 {
1003 auto mail3 = Mail::createEntity<Mail>("sink.dummy.instance1");
1004 mail3.setExtractedMessageId("mail3");
1005 mail3.setFolder(folder1);
1006 mail3.setExtractedDate(later);
1007 VERIFYEXEC(Sink::Store::create(mail3));
1008 }
1009
1010 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1"));
1011 QTRY_COMPARE(model->rowCount(), 1);
1012 {
1013 auto mail = model->data(model->index(0, 0, QModelIndex{}), Sink::Store::DomainObjectRole).value<Mail::Ptr>();
1014 QTRY_COMPARE(mail->getMessageId(), QByteArray{"mail3"});
1015 QCOMPARE(mail->getProperty("count").toInt(), 3);
1016 QCOMPARE(mail->getProperty("folders").toList().size(), 3);
1017 }
1018
1019 //This should eventually be just one modification instead of remove + add (See datastorequery reduce component)
1020 QCOMPARE(insertedSpy.size(), 1);
1021 QCOMPARE(removedSpy.size(), 1);
1022 QCOMPARE(changedSpy.size(), 1);
1023 QCOMPARE(layoutChangedSpy.size(), 0);
1024 QCOMPARE(resetSpy.size(), 0);
1025
1026 //Nothing should change on third mail in separate folder
1027 {
1028 auto mail = Mail::createEntity<Mail>("sink.dummy.instance1");
1029 mail.setExtractedMessageId("mail4");
1030 mail.setFolder(folder2);
1031 mail.setExtractedDate(now);
1032 VERIFYEXEC(Sink::Store::create(mail));
1033 }
1034
1035 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue("sink.dummy.instance1"));
1036 QTRY_COMPARE(model->rowCount(), 2);
1037
1038 //This should eventually be just one modification instead of remove + add (See datastorequery reduce component)
1039 QCOMPARE(insertedSpy.size(), 2);
1040 QCOMPARE(removedSpy.size(), 1);
1041 QCOMPARE(changedSpy.size(), 1);
1042 QCOMPARE(layoutChangedSpy.size(), 0);
1043 QCOMPARE(resetSpy.size(), 0);
1044 }
936}; 1045};
937 1046
938QTEST_MAIN(QueryTest) 1047QTEST_MAIN(QueryTest)