diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-08-18 19:04:54 -0600 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-08-18 19:09:32 -0600 |
commit | 3a7d2e81c7fdc8c2e4b9810065028f4906fc28b3 (patch) | |
tree | 4792b784959e9118798d262861467b0d7c7203ff /tests/mailthreadtest.cpp | |
parent | d87c789f311b7727d2db687e3891319e98ad6535 (diff) | |
download | sink-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.cpp | 64 |
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 | ||
189 | static 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 | |||
197 | static 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 | |||
205 | void 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" |