From 03fd475039b418f2f16b2890554fb59403d708dd Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 23 Jan 2018 17:05:10 +0100 Subject: Track uidvalidity to detect changes behind our back. --- tests/mailsynctest.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++------ tests/mailsynctest.h | 1 + 2 files changed, 59 insertions(+), 7 deletions(-) (limited to 'tests') diff --git a/tests/mailsynctest.cpp b/tests/mailsynctest.cpp index 058cae4..69541e1 100644 --- a/tests/mailsynctest.cpp +++ b/tests/mailsynctest.cpp @@ -33,6 +33,16 @@ using namespace Sink; using namespace Sink::ApplicationDomain; +static QByteArray newMessage(const QString &subject) +{ + auto msg = KMime::Message::Ptr::create(); + msg->subject(true)->fromUnicodeString(subject, "utf8"); + msg->date(true)->setDateTime(QDateTime::currentDateTimeUtc()); + msg->assemble(); + return msg->encodedContent(true); +} + + void MailSyncTest::initTestCase() { Test::initTest(); @@ -261,11 +271,7 @@ void MailSyncTest::testListRemovedSubFolder() void MailSyncTest::testListMails() { - auto msg = KMime::Message::Ptr::create(); - msg->subject(true)->fromUnicodeString("This is a Subject.", "utf8"); - msg->date(true)->setDateTime(QDateTime::currentDateTimeUtc()); - msg->assemble(); - createMessage(QStringList() << "test", msg->encodedContent(true)); + createMessage(QStringList() << "test", newMessage("This is a Subject.")); Sink::Query query; query.resourceFilter(mResourceInstanceIdentifier); @@ -420,8 +426,6 @@ void MailSyncTest::testSyncSingleFolder() // Ensure all local data is processed VERIFYEXEC(Store::synchronize(syncScope)); VERIFYEXEC(ResourceControl::flushMessageQueue(mResourceInstanceIdentifier)); - - } void MailSyncTest::testSyncSingleMail() @@ -490,3 +494,50 @@ void MailSyncTest::testFailingSync() // Ensure sync fails if resource is misconfigured QTRY_VERIFY(errorReceived); } + +void MailSyncTest::testSyncUidvalidity() +{ + createFolder({"uidvalidity"}); + createMessage({"uidvalidity"}, newMessage("old")); + + VERIFYEXEC(Store::synchronize(SyncScope{ApplicationDomain::getTypeName()}.resourceFilter(mResourceInstanceIdentifier))); + VERIFYEXEC(ResourceControl::flushMessageQueue(mResourceInstanceIdentifier)); + + auto folder = Store::readOne(Query{}.resourceFilter(mResourceInstanceIdentifier).filter("uidvalidity")); + + auto folderSyncScope = SyncScope{ApplicationDomain::getTypeName()}; + folderSyncScope.resourceFilter(mResourceInstanceIdentifier); + folderSyncScope.filter(QVariant::fromValue(folder.identifier())); + VERIFYEXEC(Store::synchronize(folderSyncScope)); + VERIFYEXEC(ResourceControl::flushMessageQueue(mResourceInstanceIdentifier)); + + + { + Sink::Query query; + query.resourceFilter(mResourceInstanceIdentifier); + query.request().request().request().request(); + query.filter(folder); + auto mails = Store::read(query); + QCOMPARE(mails.size(), 1); + } + + resetTestEnvironment(); + + createFolder({"uidvalidity"}); + createMessage({"uidvalidity"}, newMessage("new")); + + // Ensure all local data is processed + VERIFYEXEC(Store::synchronize(folderSyncScope)); + VERIFYEXEC(ResourceControl::flushMessageQueue(mResourceInstanceIdentifier)); + + //Now we should have one message + auto folder2 = Store::readOne(Query{}.resourceFilter(mResourceInstanceIdentifier).filter("uidvalidity")); + Sink::Query query; + query.resourceFilter(mResourceInstanceIdentifier); + query.request().request().request().request(); + query.filter(folder2); + auto mails = Store::read(query); + QCOMPARE(mails.size(), 1); + QCOMPARE(mails.first().getSubject(), {"new"}); +} + diff --git a/tests/mailsynctest.h b/tests/mailsynctest.h index 0decf00..f197833 100644 --- a/tests/mailsynctest.h +++ b/tests/mailsynctest.h @@ -74,6 +74,7 @@ private slots: void testSyncSingleMailWithBogusId(); void testFailingSync(); + void testSyncUidvalidity(); }; } -- cgit v1.2.3