summaryrefslogtreecommitdiffstats
path: root/tests/mailtest.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-05-24 23:48:28 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-05-24 23:48:28 +0200
commitb4be5caff7691b5a4325938dc10abc02432af26e (patch)
treecd41cde8bea050f9793ce5fc4e451945aec6082c /tests/mailtest.cpp
parent78a59b874ba088caec06c10761ebacaba3f120b5 (diff)
downloadsink-b4be5caff7691b5a4325938dc10abc02432af26e.tar.gz
sink-b4be5caff7691b5a4325938dc10abc02432af26e.zip
A much more comprehensive mail test
Diffstat (limited to 'tests/mailtest.cpp')
-rw-r--r--tests/mailtest.cpp110
1 files changed, 98 insertions, 12 deletions
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()
42 VERIFYEXEC(Store::create(resource)); 42 VERIFYEXEC(Store::create(resource));
43 43
44 mResourceInstanceIdentifier = resource.identifier(); 44 mResourceInstanceIdentifier = resource.identifier();
45 mCapabilities = resource.getProperty("capabilities").value<QByteArrayList>();
45} 46}
46 47
47void MailTest::cleanup() 48void MailTest::cleanup()
@@ -131,13 +132,8 @@ void MailTest::testCreateModifyDeleteFolder()
131 132
132void MailTest::testCreateModifyDeleteMail() 133void MailTest::testCreateModifyDeleteMail()
133{ 134{
134
135 const auto subject = QString::fromLatin1("Foobar"); 135 const auto subject = QString::fromLatin1("Foobar");
136 136
137 Query query;
138 query.resources << mResourceInstanceIdentifier;
139 query.request<Mail::Folder>().request<Mail::Subject>();
140
141 auto folder = Folder::create(mResourceInstanceIdentifier); 137 auto folder = Folder::create(mResourceInstanceIdentifier);
142 folder.setName("folder"); 138 folder.setName("folder");
143 VERIFYEXEC(Store::create(folder)); 139 VERIFYEXEC(Store::create(folder));
@@ -151,7 +147,7 @@ void MailTest::testCreateModifyDeleteMail()
151 mail.setFolder(folder); 147 mail.setFolder(folder);
152 148
153 VERIFYEXEC(Store::create(mail)); 149 VERIFYEXEC(Store::create(mail));
154 VERIFYEXEC(ResourceControl::flushMessageQueue(query.resources)); 150 VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier));
155 { 151 {
156 auto job = Store::fetchAll<Mail>(Query::RequestedProperties(QByteArrayList() << Mail::Folder::name << Mail::Subject::name << Mail::MimeMessage::name)) 152 auto job = Store::fetchAll<Mail>(Query::RequestedProperties(QByteArrayList() << Mail::Folder::name << Mail::Subject::name << Mail::MimeMessage::name))
157 .then<void, QList<Mail::Ptr>>([=](const QList<Mail::Ptr> &mails) { 153 .then<void, QList<Mail::Ptr>>([=](const QList<Mail::Ptr> &mails) {
@@ -160,14 +156,13 @@ void MailTest::testCreateModifyDeleteMail()
160 QCOMPARE(mail.getSubject(), subject); 156 QCOMPARE(mail.getSubject(), subject);
161 QCOMPARE(mail.getFolder(), folder.identifier()); 157 QCOMPARE(mail.getFolder(), folder.identifier());
162 QVERIFY(QFile(mail.getMimeMessagePath()).exists()); 158 QVERIFY(QFile(mail.getMimeMessagePath()).exists());
163
164 // return Store::remove(*mail)
165 // .then(ResourceControl::flushReplayQueue(query.resources)) // The change needs to be replayed already
166 // .then(ResourceControl::inspect<Mail>(ResourceControl::Inspection::ExistenceInspection(*mail, false)));
167 }); 159 });
168 VERIFYEXEC(job); 160 VERIFYEXEC(job);
169 } 161 }
170 162
163 VERIFYEXEC(ResourceControl::inspect<ApplicationDomain::Mail>(ResourceControl::Inspection::ExistenceInspection(mail, true)));
164 VERIFYEXEC(ResourceControl::inspect<ApplicationDomain::Folder>(ResourceControl::Inspection::CacheIntegrityInspection(folder)));
165
171 const auto subject2 = QString::fromLatin1("Foobar2"); 166 const auto subject2 = QString::fromLatin1("Foobar2");
172 auto message2 = KMime::Message::Ptr::create(); 167 auto message2 = KMime::Message::Ptr::create();
173 message2->subject(true)->fromUnicodeString(subject2, "utf8"); 168 message2->subject(true)->fromUnicodeString(subject2, "utf8");
@@ -175,7 +170,7 @@ void MailTest::testCreateModifyDeleteMail()
175 mail.setMimeMessage(message2->encodedContent()); 170 mail.setMimeMessage(message2->encodedContent());
176 171
177 VERIFYEXEC(Store::modify(mail)); 172 VERIFYEXEC(Store::modify(mail));
178 VERIFYEXEC(ResourceControl::flushMessageQueue(query.resources)); 173 VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier));
179 { 174 {
180 auto job = Store::fetchAll<Mail>(Query::RequestedProperties(QByteArrayList() << Mail::Folder::name << Mail::Subject::name)) 175 auto job = Store::fetchAll<Mail>(Query::RequestedProperties(QByteArrayList() << Mail::Folder::name << Mail::Subject::name))
181 .then<void, QList<Mail::Ptr>>([=](const QList<Mail::Ptr> &mails) { 176 .then<void, QList<Mail::Ptr>>([=](const QList<Mail::Ptr> &mails) {
@@ -188,9 +183,11 @@ void MailTest::testCreateModifyDeleteMail()
188 }); 183 });
189 VERIFYEXEC(job); 184 VERIFYEXEC(job);
190 } 185 }
186 VERIFYEXEC(ResourceControl::inspect<ApplicationDomain::Mail>(ResourceControl::Inspection::ExistenceInspection(mail, true)));
187 VERIFYEXEC(ResourceControl::inspect<ApplicationDomain::Folder>(ResourceControl::Inspection::CacheIntegrityInspection(folder)));
191 188
192 VERIFYEXEC(Store::remove(mail)); 189 VERIFYEXEC(Store::remove(mail));
193 VERIFYEXEC(ResourceControl::flushMessageQueue(query.resources)); 190 VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier));
194 { 191 {
195 auto job = Store::fetchAll<Mail>(Query::RequestedProperties(QByteArrayList() << Mail::Folder::name << Mail::Subject::name)) 192 auto job = Store::fetchAll<Mail>(Query::RequestedProperties(QByteArrayList() << Mail::Folder::name << Mail::Subject::name))
196 .then<void, QList<Mail::Ptr>>([=](const QList<Mail::Ptr> &mails) { 193 .then<void, QList<Mail::Ptr>>([=](const QList<Mail::Ptr> &mails) {
@@ -198,6 +195,95 @@ void MailTest::testCreateModifyDeleteMail()
198 }); 195 });
199 VERIFYEXEC(job); 196 VERIFYEXEC(job);
200 } 197 }
198 VERIFYEXEC(ResourceControl::inspect<ApplicationDomain::Mail>(ResourceControl::Inspection::ExistenceInspection(mail, false)));
199 VERIFYEXEC(ResourceControl::inspect<ApplicationDomain::Folder>(ResourceControl::Inspection::CacheIntegrityInspection(folder)));
200}
201
202void MailTest::testMarkMailAsRead()
203{
204 auto folder = Folder::create(mResourceInstanceIdentifier);
205 folder.setName("folder");
206 VERIFYEXEC(Store::create(folder));
207
208 auto message = KMime::Message::Ptr::create();
209 message->subject(true)->fromUnicodeString("subject", "utf8");
210 message->assemble();
211
212 auto mail = Mail::create(mResourceInstanceIdentifier);
213 mail.setMimeMessage(message->encodedContent());
214 mail.setFolder(folder);
215 mail.setUnread(false);
216 VERIFYEXEC(Store::create(mail));
217 VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier));
218
219 auto job = Store::fetchAll<Mail>(Query::ResourceFilter(mResourceInstanceIdentifier) +
220 Query::RequestedProperties(QByteArrayList() << Mail::Folder::name
221 << Mail::Subject::name))
222 .then<void, KAsync::Job<void>, QList<Mail::Ptr>>([this](const QList<Mail::Ptr> &mails) {
223 ASYNCCOMPARE(mails.size(), 1);
224 auto mail = mails.first();
225 mail->setProperty("unread", true);
226 return Store::modify(*mail)
227 .then<void>(ResourceControl::flushReplayQueue(QByteArrayList() << mResourceInstanceIdentifier)) // The change needs to be replayed already
228 .then(ResourceControl::inspect<Mail>(ResourceControl::Inspection::PropertyInspection(*mail, Mail::Unread::name, true)))
229 .then(ResourceControl::inspect<Mail>(ResourceControl::Inspection::PropertyInspection(*mail, Mail::Subject::name, mail->getSubject())));
230 });
231 VERIFYEXEC(job);
232
233 // Verify that we can still query for all relevant information
234 auto job2 = Store::fetchAll<Mail>(
235 Query::ResourceFilter(mResourceInstanceIdentifier) + Query::RequestedProperties(QByteArrayList() << Mail::Folder::name
236 << Mail::Subject::name
237 << Mail::MimeMessage::name
238 << Mail::Unread::name))
239 .then<void, KAsync::Job<void>, QList<Mail::Ptr>>([](const QList<Mail::Ptr> &mails) {
240 ASYNCCOMPARE(mails.size(), 1);
241 auto mail = mails.first();
242 ASYNCVERIFY(!mail->getSubject().isEmpty());
243 ASYNCCOMPARE(mail->getUnread(), true);
244 ASYNCVERIFY(QFileInfo(mail->getMimeMessagePath()).exists());
245 return KAsync::null<void>();
246 });
247 VERIFYEXEC(job2);
248}
249
250void MailTest::testCreateDraft()
251{
252 if (!mCapabilities.contains("drafts")) {
253 QSKIP("Resource doesn't have the drafts capability");
254 }
255
256 auto message = KMime::Message::Ptr::create();
257 message->subject(true)->fromUnicodeString(QString::fromLatin1("Foobar"), "utf8");
258 message->assemble();
259
260 auto mail = ApplicationDomain::Mail::create(mResourceInstanceIdentifier);
261 mail.setMimeMessage(message->encodedContent());
262 mail.setDraft(true);
263
264 VERIFYEXEC(Store::create(mail));
265 VERIFYEXEC(ResourceControl::flushMessageQueue(QByteArrayList() << mResourceInstanceIdentifier));
266
267 QByteArray folderIdentifier;
268 auto job = Store::fetchOne<ApplicationDomain::Mail>(Query::IdentityFilter(mail.identifier()) + Query::RequestedProperties(QByteArrayList() << Mail::MimeMessage::name << Mail::Folder::name))
269 .then<void, ApplicationDomain::Mail>([&](const ApplicationDomain::Mail &mail) {
270 folderIdentifier = mail.getProperty("folder").toByteArray();
271 QVERIFY(!folderIdentifier.isEmpty());
272 });
273 VERIFYEXEC(job);
274
275 //Ensure we can also query by folder
276 auto job2 = Store::fetchAll<ApplicationDomain::Mail>(Query::PropertyFilter("folder", folderIdentifier))
277 .then<void, QList<ApplicationDomain::Mail::Ptr> >([&](const QList<ApplicationDomain::Mail::Ptr> &mails) {
278 bool found = false;
279 for (const auto m : mails) {
280 if (m->identifier() == mail.identifier()) {
281 found = true;
282 }
283 }
284 QVERIFY(found);
285 });
286 VERIFYEXEC(job2);
201} 287}
202 288
203#include "mailtest.moc" 289#include "mailtest.moc"