summaryrefslogtreecommitdiffstats
path: root/tests/mailthreadtest.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-08-18 19:04:54 -0600
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-08-18 19:09:32 -0600
commit3a7d2e81c7fdc8c2e4b9810065028f4906fc28b3 (patch)
tree4792b784959e9118798d262861467b0d7c7203ff /tests/mailthreadtest.cpp
parentd87c789f311b7727d2db687e3891319e98ad6535 (diff)
downloadsink-3a7d2e81c7fdc8c2e4b9810065028f4906fc28b3.tar.gz
sink-3a7d2e81c7fdc8c2e4b9810065028f4906fc28b3.zip
Implemented thread merging
It can happen that thread messages are not delivered in order, which means we will have to merge threads once all messages are available.
Diffstat (limited to 'tests/mailthreadtest.cpp')
-rw-r--r--tests/mailthreadtest.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/mailthreadtest.cpp b/tests/mailthreadtest.cpp
index 741eb78..9ed5d83 100644
--- a/tests/mailthreadtest.cpp
+++ b/tests/mailthreadtest.cpp
@@ -21,6 +21,7 @@
21#include <QtTest> 21#include <QtTest>
22 22
23#include <QString> 23#include <QString>
24#include <QFile>
24#include <KMime/Message> 25#include <KMime/Message>
25 26
26#include "store.h" 27#include "store.h"
@@ -185,4 +186,67 @@ void MailThreadTest::testIndexInMixedOrder()
185 /* VERIFYEXEC(ResourceControl::flushReplayQueue(QByteArrayList() << mResourceInstanceIdentifier)); */ 186 /* VERIFYEXEC(ResourceControl::flushReplayQueue(QByteArrayList() << mResourceInstanceIdentifier)); */
186} 187}
187 188
189static QByteArray readMailFromFile(const QString &mailFile)
190{
191 QFile file(QLatin1String(THREADTESTDATAPATH) + QLatin1Char('/') + mailFile);
192 file.open(QIODevice::ReadOnly);
193 Q_ASSERT(file.isOpen());
194 return file.readAll();
195}
196
197static KMime::Message::Ptr readMail(const QString &mailFile)
198{
199 auto msg = KMime::Message::Ptr::create();
200 msg->setContent(readMailFromFile(mailFile));
201 msg->parse();
202 return msg;
203}
204
205void MailThreadTest::testRealWorldThread()
206{
207 auto folder = Folder::create(mResourceInstanceIdentifier);
208 folder.setName("folder");
209 VERIFYEXEC(Store::create(folder));
210
211 auto createMail = [this, folder] (KMime::Message::Ptr msg) {
212 auto mail = Mail::create(mResourceInstanceIdentifier);
213 mail.setMimeMessage(msg->encodedContent(true));
214 mail.setFolder(folder);
215 VERIFYEXEC(Store::create(mail));
216 };
217
218 createMail(readMail("thread1"));
219
220 VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier));
221
222 auto query = Sink::StandardQueries::threadLeaders(folder);
223 query.resourceFilter(mResourceInstanceIdentifier);
224 query.request<Mail::Subject>().request<Mail::MimeMessage>().request<Mail::Folder>().request<Mail::Date>();
225
226 //Ensure we find the thread leader
227 Mail threadLeader = [&] {
228 auto mails = Store::read<Mail>(query);
229 Q_ASSERT(mails.size() == 1);
230 return mails.first();
231 }();
232
233 createMail(readMail("thread2"));
234 createMail(readMail("thread3"));
235 createMail(readMail("thread4"));
236 createMail(readMail("thread5"));
237 createMail(readMail("thread6"));
238 createMail(readMail("thread7"));
239 createMail(readMail("thread8")); //This mail is breaking the thread
240 VERIFYEXEC(ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
241
242 //Ensure the thread is complete
243 {
244 auto query = Sink::StandardQueries::completeThread(threadLeader);
245 query.request<Mail::Subject>().request<Mail::MimeMessage>().request<Mail::Folder>().request<Mail::Date>();
246
247 auto mails = Store::read<Mail>(query);
248 QCOMPARE(mails.size(), 8);
249 }
250}
251
188#include "mailthreadtest.moc" 252#include "mailthreadtest.moc"