summaryrefslogtreecommitdiffstats
path: root/tests/mailthreadtest.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-09-21 14:47:06 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-09-21 14:47:06 +0200
commit6fc76bc690e5a2e7748936fa835338d820c7e7de (patch)
tree0f84576b25af1f2e22cb7574f175de988e694a8a /tests/mailthreadtest.cpp
parent9037bf4c869cf7e8dc2801d7e126ada24d1ec1e4 (diff)
downloadsink-6fc76bc690e5a2e7748936fa835338d820c7e7de.tar.gz
sink-6fc76bc690e5a2e7748936fa835338d820c7e7de.zip
Merge mails by subject
Diffstat (limited to 'tests/mailthreadtest.cpp')
-rw-r--r--tests/mailthreadtest.cpp101
1 files changed, 92 insertions, 9 deletions
diff --git a/tests/mailthreadtest.cpp b/tests/mailthreadtest.cpp
index 1bbe713..a3df56b 100644
--- a/tests/mailthreadtest.cpp
+++ b/tests/mailthreadtest.cpp
@@ -78,17 +78,100 @@ void MailThreadTest::testListThreadLeader()
78 auto job = Store::fetchAll<Mail>(query).syncThen<void, QList<Mail::Ptr>>([](const QList<Mail::Ptr> &mails) { 78 auto job = Store::fetchAll<Mail>(query).syncThen<void, QList<Mail::Ptr>>([](const QList<Mail::Ptr> &mails) {
79 QCOMPARE(mails.size(), 1); 79 QCOMPARE(mails.size(), 1);
80 QVERIFY(mails.first()->getSubject().startsWith(QString("ThreadLeader"))); 80 QVERIFY(mails.first()->getSubject().startsWith(QString("ThreadLeader")));
81 const auto data = mails.first()->getMimeMessage();
82 QVERIFY(!data.isEmpty());
83
84 KMime::Message m;
85 m.setContent(data);
86 m.parse();
87 QCOMPARE(mails.first()->getSubject(), m.subject(true)->asUnicodeString());
88 QVERIFY(!mails.first()->getFolder().isEmpty());
89 QVERIFY(mails.first()->getDate().isValid());
90 }); 81 });
91 VERIFYEXEC(job); 82 VERIFYEXEC(job);
92} 83}
93 84
85/*
86 * Thread:
87 * 1.
88 * 2.
89 * 3.
90 *
91 * 3. first, should result in a new thread.
92 * 1. second, should be merged by subject
93 * 2. last, should complete the thread.
94 */
95void MailThreadTest::testIndexInMixedOrder()
96{
97 auto folder = Folder::create(mResourceInstanceIdentifier);
98 folder.setName("folder");
99 VERIFYEXEC(Store::create(folder));
100
101 auto message1 = KMime::Message::Ptr::create();
102 message1->subject(true)->fromUnicodeString("1", "utf8");
103 message1->messageID(true)->generate("foobar.com");
104 message1->date(true)->setDateTime(QDateTime::currentDateTimeUtc());
105 message1->assemble();
106
107 auto message2 = KMime::Message::Ptr::create();
108 message2->subject(true)->fromUnicodeString("Re: 1", "utf8");
109 message2->messageID(true)->generate("foobar.com");
110 message2->inReplyTo(true)->appendIdentifier(message1->messageID(true)->identifier());
111 message2->date(true)->setDateTime(QDateTime::currentDateTimeUtc().addSecs(1));
112 message2->assemble();
113
114 auto message3 = KMime::Message::Ptr::create();
115 message3->subject(true)->fromUnicodeString("Re: Re: 1", "utf8");
116 message3->messageID(true)->generate("foobar.com");
117 message3->inReplyTo(true)->appendIdentifier(message2->messageID(true)->identifier());
118 message3->date(true)->setDateTime(QDateTime::currentDateTimeUtc().addSecs(2));
119 message3->assemble();
120
121 {
122 auto mail = Mail::create(mResourceInstanceIdentifier);
123 mail.setMimeMessage(message3->encodedContent());
124 mail.setFolder(folder);
125 VERIFYEXEC(Store::create(mail));
126 }
127 VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier));
128
129 Sink::Query query;
130 query.resources << mResourceInstanceIdentifier;
131 query.request<Mail::Subject>().request<Mail::MimeMessage>().request<Mail::Folder>().request<Mail::Date>();
132 query.threadLeaderOnly = true;
133 query.sort<Mail::Date>();
134 query.filter<Mail::Folder>(folder);
135
136 {
137 auto job = Store::fetchAll<Mail>(query)
138 .syncThen<void, QList<Mail::Ptr>>([=](const QList<Mail::Ptr> &mails) {
139 QCOMPARE(mails.size(), 1);
140 auto mail = *mails.first();
141 QCOMPARE(mail.getSubject(), QString::fromLatin1("Re: Re: 1"));
142 });
143 VERIFYEXEC(job);
144 }
145
146 {
147 auto mail = Mail::create(mResourceInstanceIdentifier);
148 mail.setMimeMessage(message1->encodedContent());
149 mail.setFolder(folder);
150 VERIFYEXEC(Store::create(mail));
151 }
152
153 VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier));
154 {
155 auto job = Store::fetchAll<Mail>(query)
156 .syncThen<void, QList<Mail::Ptr>>([=](const QList<Mail::Ptr> &mails) {
157 QCOMPARE(mails.size(), 1);
158 auto mail = *mails.first();
159 QCOMPARE(mail.getSubject(), QString::fromLatin1("Re: Re: 1"));
160 });
161 VERIFYEXEC(job);
162 //TODO ensure we also find message 1 as part of thread.
163 }
164
165 /* VERIFYEXEC(Store::remove(mail)); */
166 /* VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier)); */
167 /* { */
168 /* auto job = Store::fetchAll<Mail>(Query::RequestedProperties(QByteArrayList() << Mail::Folder::name << Mail::Subject::name)) */
169 /* .syncThen<void, QList<Mail::Ptr>>([=](const QList<Mail::Ptr> &mails) { */
170 /* QCOMPARE(mails.size(), 0); */
171 /* }); */
172 /* VERIFYEXEC(job); */
173 /* } */
174 /* VERIFYEXEC(ResourceControl::flushReplayQueue(QByteArrayList() << mResourceInstanceIdentifier)); */
175}
176
94#include "mailthreadtest.moc" 177#include "mailthreadtest.moc"