diff options
Diffstat (limited to 'tests/mailtest.cpp')
-rw-r--r-- | tests/mailtest.cpp | 110 |
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 | ||
47 | void MailTest::cleanup() | 48 | void MailTest::cleanup() |
@@ -131,13 +132,8 @@ void MailTest::testCreateModifyDeleteFolder() | |||
131 | 132 | ||
132 | void MailTest::testCreateModifyDeleteMail() | 133 | void 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 | |||
202 | void 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 | |||
250 | void 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" |