From 6fc76bc690e5a2e7748936fa835338d820c7e7de Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 21 Sep 2016 14:47:06 +0200 Subject: Merge mails by subject --- tests/mailthreadtest.cpp | 101 ++++++++++++++++++++++++++++++++++++++++++----- tests/mailthreadtest.h | 1 + 2 files changed, 93 insertions(+), 9 deletions(-) (limited to 'tests') 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() auto job = Store::fetchAll(query).syncThen>([](const QList &mails) { QCOMPARE(mails.size(), 1); QVERIFY(mails.first()->getSubject().startsWith(QString("ThreadLeader"))); - const auto data = mails.first()->getMimeMessage(); - QVERIFY(!data.isEmpty()); - - KMime::Message m; - m.setContent(data); - m.parse(); - QCOMPARE(mails.first()->getSubject(), m.subject(true)->asUnicodeString()); - QVERIFY(!mails.first()->getFolder().isEmpty()); - QVERIFY(mails.first()->getDate().isValid()); }); VERIFYEXEC(job); } +/* + * Thread: + * 1. + * 2. + * 3. + * + * 3. first, should result in a new thread. + * 1. second, should be merged by subject + * 2. last, should complete the thread. + */ +void MailThreadTest::testIndexInMixedOrder() +{ + auto folder = Folder::create(mResourceInstanceIdentifier); + folder.setName("folder"); + VERIFYEXEC(Store::create(folder)); + + auto message1 = KMime::Message::Ptr::create(); + message1->subject(true)->fromUnicodeString("1", "utf8"); + message1->messageID(true)->generate("foobar.com"); + message1->date(true)->setDateTime(QDateTime::currentDateTimeUtc()); + message1->assemble(); + + auto message2 = KMime::Message::Ptr::create(); + message2->subject(true)->fromUnicodeString("Re: 1", "utf8"); + message2->messageID(true)->generate("foobar.com"); + message2->inReplyTo(true)->appendIdentifier(message1->messageID(true)->identifier()); + message2->date(true)->setDateTime(QDateTime::currentDateTimeUtc().addSecs(1)); + message2->assemble(); + + auto message3 = KMime::Message::Ptr::create(); + message3->subject(true)->fromUnicodeString("Re: Re: 1", "utf8"); + message3->messageID(true)->generate("foobar.com"); + message3->inReplyTo(true)->appendIdentifier(message2->messageID(true)->identifier()); + message3->date(true)->setDateTime(QDateTime::currentDateTimeUtc().addSecs(2)); + message3->assemble(); + + { + auto mail = Mail::create(mResourceInstanceIdentifier); + mail.setMimeMessage(message3->encodedContent()); + mail.setFolder(folder); + VERIFYEXEC(Store::create(mail)); + } + VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier)); + + Sink::Query query; + query.resources << mResourceInstanceIdentifier; + query.request().request().request().request(); + query.threadLeaderOnly = true; + query.sort(); + query.filter(folder); + + { + auto job = Store::fetchAll(query) + .syncThen>([=](const QList &mails) { + QCOMPARE(mails.size(), 1); + auto mail = *mails.first(); + QCOMPARE(mail.getSubject(), QString::fromLatin1("Re: Re: 1")); + }); + VERIFYEXEC(job); + } + + { + auto mail = Mail::create(mResourceInstanceIdentifier); + mail.setMimeMessage(message1->encodedContent()); + mail.setFolder(folder); + VERIFYEXEC(Store::create(mail)); + } + + VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier)); + { + auto job = Store::fetchAll(query) + .syncThen>([=](const QList &mails) { + QCOMPARE(mails.size(), 1); + auto mail = *mails.first(); + QCOMPARE(mail.getSubject(), QString::fromLatin1("Re: Re: 1")); + }); + VERIFYEXEC(job); + //TODO ensure we also find message 1 as part of thread. + } + + /* VERIFYEXEC(Store::remove(mail)); */ + /* VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier)); */ + /* { */ + /* auto job = Store::fetchAll(Query::RequestedProperties(QByteArrayList() << Mail::Folder::name << Mail::Subject::name)) */ + /* .syncThen>([=](const QList &mails) { */ + /* QCOMPARE(mails.size(), 0); */ + /* }); */ + /* VERIFYEXEC(job); */ + /* } */ + /* VERIFYEXEC(ResourceControl::flushReplayQueue(QByteArrayList() << mResourceInstanceIdentifier)); */ +} + #include "mailthreadtest.moc" diff --git a/tests/mailthreadtest.h b/tests/mailthreadtest.h index d6b9c24..8730ec6 100644 --- a/tests/mailthreadtest.h +++ b/tests/mailthreadtest.h @@ -51,6 +51,7 @@ private slots: void cleanup(); void testListThreadLeader(); + void testIndexInMixedOrder(); }; } -- cgit v1.2.3