summaryrefslogtreecommitdiffstats
path: root/tests/mailthreadtest.cpp
diff options
context:
space:
mode:
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"