From 2061ba0cf16b6a0a3313f861f79b90cf2905efce Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 31 May 2016 15:11:54 +0200 Subject: The maildir resource passes the maildirmailsync test --- tests/mailsynctest.cpp | 141 +++++++++++++++++++++++++++++++++++++++---------- tests/mailsynctest.h | 20 ++++--- 2 files changed, 128 insertions(+), 33 deletions(-) (limited to 'tests') diff --git a/tests/mailsynctest.cpp b/tests/mailsynctest.cpp index b86fbae..2fc8568 100644 --- a/tests/mailsynctest.cpp +++ b/tests/mailsynctest.cpp @@ -47,6 +47,7 @@ void MailSyncTest::initTestCase() void MailSyncTest::cleanup() { + //TODO the shutdown job fails if the resource is already shut down // VERIFYEXEC(ResourceControl::shutdown(mResourceInstanceIdentifier)); ResourceControl::shutdown(mResourceInstanceIdentifier).exec().waitForFinished(); removeResourceFromDisk(mResourceInstanceIdentifier); @@ -62,6 +63,21 @@ void MailSyncTest::init() void MailSyncTest::testListFolders() { + int baseCount = 0; + //First figure out how many folders we have by default + { + auto job = Store::fetchAll(Query()) + .then>([&](const QList &folders) { + QStringList names; + for (const auto &folder : folders) { + names << folder->getName(); + } + Trace() << "base folder: " << names; + baseCount = folders.size(); + }); + VERIFYEXEC(job); + } + Sink::Query query; query.resources << mResourceInstanceIdentifier; query.request(); @@ -70,20 +86,78 @@ void MailSyncTest::testListFolders() VERIFYEXEC(Store::synchronize(query)); ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished(); - auto job = Store::fetchAll(query).then>([](const QList &folders) { - QCOMPARE(folders.size(), 2); + auto job = Store::fetchAll(query).then>([=](const QList &folders) { QStringList names; for (const auto &folder : folders) { names << folder->getName(); } + //Workaround for maildir + if (names.contains("maildir1")) { + names.removeAll("maildir1"); + } + if (mCapabilities.contains("drafts")) { + QVERIFY(names.contains("drafts")); + names.removeAll("drafts"); + } + QCOMPARE(names.size(), 2); QVERIFY(names.contains("INBOX")); QVERIFY(names.contains("test")); }); VERIFYEXEC(job); } +void MailSyncTest::testListNewFolder() +{ + Sink::Query query; + query.resources << mResourceInstanceIdentifier; + query.request(); + + createFolder(QStringList() << "test2"); + + // Ensure all local data is processed + VERIFYEXEC(Store::synchronize(query)); + ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished(); + + auto job = Store::fetchAll(query).then>([](const QList &folders) { + QStringList names; + for (const auto &folder : folders) { + names << folder->getName(); + } + QVERIFY(names.contains("test2")); + }); + VERIFYEXEC(job); +} + +void MailSyncTest::testListRemovedFolder() +{ + Sink::Query query; + query.resources << mResourceInstanceIdentifier; + query.request(); + + VERIFYEXEC(Store::synchronize(query)); + ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished(); + + removeFolder(QStringList() << "test2"); + + // Ensure all local data is processed + VERIFYEXEC(Store::synchronize(query)); + ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished(); + + auto job = Store::fetchAll(query).then>([](const QList &folders) { + QStringList names; + for (const auto &folder : folders) { + names << folder->getName(); + } + QVERIFY(!names.contains("test2")); + }); + VERIFYEXEC(job); +} + void MailSyncTest::testListFolderHierarchy() { + if (!mCapabilities.contains("folder.hierarchy")) { + QSKIP("Missing capability folder.hierarchy"); + } Sink::Query query; query.resources << mResourceInstanceIdentifier; query.request().request(); @@ -94,19 +168,35 @@ void MailSyncTest::testListFolderHierarchy() VERIFYEXEC(Store::synchronize(query)); ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished(); - auto job = Store::fetchAll(query).then>([](const QList &folders) { - QCOMPARE(folders.size(), 3); + auto job = Store::fetchAll(query).then>([=](const QList &folders) { QHash map; for (const auto &folder : folders) { map.insert(folder->getName(), folder); } + QStringList names; + for (const auto &folder : folders) { + names << folder->getName(); + } + + //Workaround for maildir + if (names.contains("maildir1")) { + names.removeAll("maildir1"); + } + if (mCapabilities.contains("drafts")) { + QVERIFY(names.contains("drafts")); + names.removeAll("drafts"); + } + QCOMPARE(names.size(), 3); QCOMPARE(map.value("sub")->getParent(), map.value("test")->identifier()); }); VERIFYEXEC(job); } -void MailSyncTest::testListNewFolders() +void MailSyncTest::testListNewSubFolder() { + if (!mCapabilities.contains("folder.hierarchy")) { + QSKIP("Missing capability folder.hierarchy"); + } Sink::Query query; query.resources << mResourceInstanceIdentifier; query.request(); @@ -127,8 +217,11 @@ void MailSyncTest::testListNewFolders() VERIFYEXEC(job); } -void MailSyncTest::testListRemovedFolders() +void MailSyncTest::testListRemovedSubFolder() { + if (!mCapabilities.contains("folder.hierarchy")) { + QSKIP("Missing capability folder.hierarchy"); + } Sink::Query query; query.resources << mResourceInstanceIdentifier; query.request(); @@ -176,7 +269,7 @@ void MailSyncTest::testListMails() VERIFYEXEC(job); } -void MailSyncTest::testFetchNewMessages() +void MailSyncTest::testFetchNewRemovedMessages() { Sink::Query query; query.resources << mResourceInstanceIdentifier; @@ -189,36 +282,30 @@ void MailSyncTest::testFetchNewMessages() auto msg = KMime::Message::Ptr::create(); msg->subject(true)->fromUnicodeString("Foobar", "utf8"); msg->assemble(); - createMessage(QStringList() << "test", msg->encodedContent(true)); + auto messageIdentifier = createMessage(QStringList() << "test", msg->encodedContent(true)); Store::synchronize(query).exec().waitForFinished(); ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished(); - auto job = Store::fetchAll(query).then>([](const QList &mails) { - QCOMPARE(mails.size(), 2); - }); - VERIFYEXEC(job); -} + { + auto job = Store::fetchAll(query).then>([](const QList &mails) { + QCOMPARE(mails.size(), 2); + }); + VERIFYEXEC(job); + } -void MailSyncTest::testFetchRemovedMessages() -{ - Sink::Query query; - query.resources << mResourceInstanceIdentifier; - query.request().request(); - // Ensure all local data is processed - VERIFYEXEC(Store::synchronize(query)); - ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished(); - - removeMessage(QStringList() << "test", "2:*"); + removeMessage(QStringList() << "test", messageIdentifier); Store::synchronize(query).exec().waitForFinished(); ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished(); - auto job = Store::fetchAll(query).then>([](const QList &mails) { - QCOMPARE(mails.size(), 1); - }); - VERIFYEXEC(job); + { + auto job = Store::fetchAll(query).then>([](const QList &mails) { + QCOMPARE(mails.size(), 1); + }); + VERIFYEXEC(job); + } } //TODO test flag sync diff --git a/tests/mailsynctest.h b/tests/mailsynctest.h index f9ee7be..b0fda7c 100644 --- a/tests/mailsynctest.h +++ b/tests/mailsynctest.h @@ -45,6 +45,13 @@ do {\ namespace Sink { +/** + * Tests if the resource can synchronize (read-only) emails. + * + * The default testenvironment is: + * * INBOX + * * INBOX.test + */ class MailSyncTest : public QObject { Q_OBJECT @@ -59,8 +66,8 @@ protected: virtual void removeResourceFromDisk(const QByteArray &mResourceInstanceIdentifier) = 0; virtual void createFolder(const QStringList &folderPath) = 0; virtual void removeFolder(const QStringList &folderPath) = 0; - virtual void createMessage(const QStringList &folderPath, const QByteArray &message) = 0; - virtual void removeMessage(const QStringList &folderPath, const QByteArray &message) = 0; + virtual QByteArray createMessage(const QStringList &folderPath, const QByteArray &message) = 0; + virtual void removeMessage(const QStringList &folderPath, const QByteArray &messageIdentifier) = 0; private slots: void initTestCase(); @@ -68,13 +75,14 @@ private slots: void cleanup(); void testListFolders(); + void testListNewFolder(); + void testListRemovedFolder(); void testListFolderHierarchy(); - void testListNewFolders(); - void testListRemovedFolders(); + void testListNewSubFolder(); + void testListRemovedSubFolder(); void testListMails(); - void testFetchNewMessages(); - void testFetchRemovedMessages(); + void testFetchNewRemovedMessages(); void testFailingSync(); }; -- cgit v1.2.3