From b4be5caff7691b5a4325938dc10abc02432af26e Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 24 May 2016 23:48:28 +0200 Subject: A much more comprehensive mail test --- tests/mailtest.cpp | 110 +++++++++++++++++++++++++++++++++++++++++++++++------ tests/mailtest.h | 3 ++ 2 files changed, 101 insertions(+), 12 deletions(-) (limited to 'tests') diff --git a/tests/mailtest.cpp b/tests/mailtest.cpp index 3ca8eaa..496b7ef 100644 --- a/tests/mailtest.cpp +++ b/tests/mailtest.cpp @@ -42,6 +42,7 @@ void MailTest::initTestCase() VERIFYEXEC(Store::create(resource)); mResourceInstanceIdentifier = resource.identifier(); + mCapabilities = resource.getProperty("capabilities").value(); } void MailTest::cleanup() @@ -131,13 +132,8 @@ void MailTest::testCreateModifyDeleteFolder() void MailTest::testCreateModifyDeleteMail() { - const auto subject = QString::fromLatin1("Foobar"); - Query query; - query.resources << mResourceInstanceIdentifier; - query.request().request(); - auto folder = Folder::create(mResourceInstanceIdentifier); folder.setName("folder"); VERIFYEXEC(Store::create(folder)); @@ -151,7 +147,7 @@ void MailTest::testCreateModifyDeleteMail() mail.setFolder(folder); VERIFYEXEC(Store::create(mail)); - VERIFYEXEC(ResourceControl::flushMessageQueue(query.resources)); + VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier)); { auto job = Store::fetchAll(Query::RequestedProperties(QByteArrayList() << Mail::Folder::name << Mail::Subject::name << Mail::MimeMessage::name)) .then>([=](const QList &mails) { @@ -160,14 +156,13 @@ void MailTest::testCreateModifyDeleteMail() QCOMPARE(mail.getSubject(), subject); QCOMPARE(mail.getFolder(), folder.identifier()); QVERIFY(QFile(mail.getMimeMessagePath()).exists()); - - // return Store::remove(*mail) - // .then(ResourceControl::flushReplayQueue(query.resources)) // The change needs to be replayed already - // .then(ResourceControl::inspect(ResourceControl::Inspection::ExistenceInspection(*mail, false))); }); VERIFYEXEC(job); } + VERIFYEXEC(ResourceControl::inspect(ResourceControl::Inspection::ExistenceInspection(mail, true))); + VERIFYEXEC(ResourceControl::inspect(ResourceControl::Inspection::CacheIntegrityInspection(folder))); + const auto subject2 = QString::fromLatin1("Foobar2"); auto message2 = KMime::Message::Ptr::create(); message2->subject(true)->fromUnicodeString(subject2, "utf8"); @@ -175,7 +170,7 @@ void MailTest::testCreateModifyDeleteMail() mail.setMimeMessage(message2->encodedContent()); VERIFYEXEC(Store::modify(mail)); - VERIFYEXEC(ResourceControl::flushMessageQueue(query.resources)); + VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier)); { auto job = Store::fetchAll(Query::RequestedProperties(QByteArrayList() << Mail::Folder::name << Mail::Subject::name)) .then>([=](const QList &mails) { @@ -188,9 +183,11 @@ void MailTest::testCreateModifyDeleteMail() }); VERIFYEXEC(job); } + VERIFYEXEC(ResourceControl::inspect(ResourceControl::Inspection::ExistenceInspection(mail, true))); + VERIFYEXEC(ResourceControl::inspect(ResourceControl::Inspection::CacheIntegrityInspection(folder))); VERIFYEXEC(Store::remove(mail)); - VERIFYEXEC(ResourceControl::flushMessageQueue(query.resources)); + VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier)); { auto job = Store::fetchAll(Query::RequestedProperties(QByteArrayList() << Mail::Folder::name << Mail::Subject::name)) .then>([=](const QList &mails) { @@ -198,6 +195,95 @@ void MailTest::testCreateModifyDeleteMail() }); VERIFYEXEC(job); } + VERIFYEXEC(ResourceControl::inspect(ResourceControl::Inspection::ExistenceInspection(mail, false))); + VERIFYEXEC(ResourceControl::inspect(ResourceControl::Inspection::CacheIntegrityInspection(folder))); +} + +void MailTest::testMarkMailAsRead() +{ + auto folder = Folder::create(mResourceInstanceIdentifier); + folder.setName("folder"); + VERIFYEXEC(Store::create(folder)); + + auto message = KMime::Message::Ptr::create(); + message->subject(true)->fromUnicodeString("subject", "utf8"); + message->assemble(); + + auto mail = Mail::create(mResourceInstanceIdentifier); + mail.setMimeMessage(message->encodedContent()); + mail.setFolder(folder); + mail.setUnread(false); + VERIFYEXEC(Store::create(mail)); + VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier)); + + auto job = Store::fetchAll(Query::ResourceFilter(mResourceInstanceIdentifier) + + Query::RequestedProperties(QByteArrayList() << Mail::Folder::name + << Mail::Subject::name)) + .then, QList>([this](const QList &mails) { + ASYNCCOMPARE(mails.size(), 1); + auto mail = mails.first(); + mail->setProperty("unread", true); + return Store::modify(*mail) + .then(ResourceControl::flushReplayQueue(QByteArrayList() << mResourceInstanceIdentifier)) // The change needs to be replayed already + .then(ResourceControl::inspect(ResourceControl::Inspection::PropertyInspection(*mail, Mail::Unread::name, true))) + .then(ResourceControl::inspect(ResourceControl::Inspection::PropertyInspection(*mail, Mail::Subject::name, mail->getSubject()))); + }); + VERIFYEXEC(job); + + // Verify that we can still query for all relevant information + auto job2 = Store::fetchAll( + Query::ResourceFilter(mResourceInstanceIdentifier) + Query::RequestedProperties(QByteArrayList() << Mail::Folder::name + << Mail::Subject::name + << Mail::MimeMessage::name + << Mail::Unread::name)) + .then, QList>([](const QList &mails) { + ASYNCCOMPARE(mails.size(), 1); + auto mail = mails.first(); + ASYNCVERIFY(!mail->getSubject().isEmpty()); + ASYNCCOMPARE(mail->getUnread(), true); + ASYNCVERIFY(QFileInfo(mail->getMimeMessagePath()).exists()); + return KAsync::null(); + }); + VERIFYEXEC(job2); +} + +void MailTest::testCreateDraft() +{ + if (!mCapabilities.contains("drafts")) { + QSKIP("Resource doesn't have the drafts capability"); + } + + auto message = KMime::Message::Ptr::create(); + message->subject(true)->fromUnicodeString(QString::fromLatin1("Foobar"), "utf8"); + message->assemble(); + + auto mail = ApplicationDomain::Mail::create(mResourceInstanceIdentifier); + mail.setMimeMessage(message->encodedContent()); + mail.setDraft(true); + + VERIFYEXEC(Store::create(mail)); + VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier)); + + QByteArray folderIdentifier; + auto job = Store::fetchOne(Query::IdentityFilter(mail.identifier()) + Query::RequestedProperties(QByteArrayList() << Mail::MimeMessage::name << Mail::Folder::name)) + .then([&](const ApplicationDomain::Mail &mail) { + folderIdentifier = mail.getProperty("folder").toByteArray(); + QVERIFY(!folderIdentifier.isEmpty()); + }); + VERIFYEXEC(job); + + //Ensure we can also query by folder + auto job2 = Store::fetchAll(Query::PropertyFilter("folder", folderIdentifier)) + .then >([&](const QList &mails) { + bool found = false; + for (const auto m : mails) { + if (m->identifier() == mail.identifier()) { + found = true; + } + } + QVERIFY(found); + }); + VERIFYEXEC(job2); } #include "mailtest.moc" diff --git a/tests/mailtest.h b/tests/mailtest.h index 0729a91..43d4f75 100644 --- a/tests/mailtest.h +++ b/tests/mailtest.h @@ -51,6 +51,7 @@ class MailTest : public QObject protected: QByteArray mResourceInstanceIdentifier; + QByteArrayList mCapabilities; virtual void resetTestEnvironment() = 0; virtual Sink::ApplicationDomain::SinkResource createResource() = 0; @@ -63,6 +64,8 @@ private slots: void testCreateModifyDeleteFolder(); void testCreateModifyDeleteMail(); + void testMarkMailAsRead(); + void testCreateDraft(); }; } -- cgit v1.2.3