summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/mailsynctest.cpp141
-rw-r--r--tests/mailsynctest.h20
2 files changed, 128 insertions, 33 deletions
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()
47 47
48void MailSyncTest::cleanup() 48void MailSyncTest::cleanup()
49{ 49{
50 //TODO the shutdown job fails if the resource is already shut down
50 // VERIFYEXEC(ResourceControl::shutdown(mResourceInstanceIdentifier)); 51 // VERIFYEXEC(ResourceControl::shutdown(mResourceInstanceIdentifier));
51 ResourceControl::shutdown(mResourceInstanceIdentifier).exec().waitForFinished(); 52 ResourceControl::shutdown(mResourceInstanceIdentifier).exec().waitForFinished();
52 removeResourceFromDisk(mResourceInstanceIdentifier); 53 removeResourceFromDisk(mResourceInstanceIdentifier);
@@ -62,6 +63,21 @@ void MailSyncTest::init()
62 63
63void MailSyncTest::testListFolders() 64void MailSyncTest::testListFolders()
64{ 65{
66 int baseCount = 0;
67 //First figure out how many folders we have by default
68 {
69 auto job = Store::fetchAll<Folder>(Query())
70 .then<void, QList<Folder::Ptr>>([&](const QList<Folder::Ptr> &folders) {
71 QStringList names;
72 for (const auto &folder : folders) {
73 names << folder->getName();
74 }
75 Trace() << "base folder: " << names;
76 baseCount = folders.size();
77 });
78 VERIFYEXEC(job);
79 }
80
65 Sink::Query query; 81 Sink::Query query;
66 query.resources << mResourceInstanceIdentifier; 82 query.resources << mResourceInstanceIdentifier;
67 query.request<Folder::Name>(); 83 query.request<Folder::Name>();
@@ -70,20 +86,78 @@ void MailSyncTest::testListFolders()
70 VERIFYEXEC(Store::synchronize(query)); 86 VERIFYEXEC(Store::synchronize(query));
71 ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished(); 87 ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished();
72 88
73 auto job = Store::fetchAll<Folder>(query).then<void, QList<Folder::Ptr>>([](const QList<Folder::Ptr> &folders) { 89 auto job = Store::fetchAll<Folder>(query).then<void, QList<Folder::Ptr>>([=](const QList<Folder::Ptr> &folders) {
74 QCOMPARE(folders.size(), 2);
75 QStringList names; 90 QStringList names;
76 for (const auto &folder : folders) { 91 for (const auto &folder : folders) {
77 names << folder->getName(); 92 names << folder->getName();
78 } 93 }
94 //Workaround for maildir
95 if (names.contains("maildir1")) {
96 names.removeAll("maildir1");
97 }
98 if (mCapabilities.contains("drafts")) {
99 QVERIFY(names.contains("drafts"));
100 names.removeAll("drafts");
101 }
102 QCOMPARE(names.size(), 2);
79 QVERIFY(names.contains("INBOX")); 103 QVERIFY(names.contains("INBOX"));
80 QVERIFY(names.contains("test")); 104 QVERIFY(names.contains("test"));
81 }); 105 });
82 VERIFYEXEC(job); 106 VERIFYEXEC(job);
83} 107}
84 108
109void MailSyncTest::testListNewFolder()
110{
111 Sink::Query query;
112 query.resources << mResourceInstanceIdentifier;
113 query.request<Folder::Name>();
114
115 createFolder(QStringList() << "test2");
116
117 // Ensure all local data is processed
118 VERIFYEXEC(Store::synchronize(query));
119 ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished();
120
121 auto job = Store::fetchAll<Folder>(query).then<void, QList<Folder::Ptr>>([](const QList<Folder::Ptr> &folders) {
122 QStringList names;
123 for (const auto &folder : folders) {
124 names << folder->getName();
125 }
126 QVERIFY(names.contains("test2"));
127 });
128 VERIFYEXEC(job);
129}
130
131void MailSyncTest::testListRemovedFolder()
132{
133 Sink::Query query;
134 query.resources << mResourceInstanceIdentifier;
135 query.request<Folder::Name>();
136
137 VERIFYEXEC(Store::synchronize(query));
138 ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished();
139
140 removeFolder(QStringList() << "test2");
141
142 // Ensure all local data is processed
143 VERIFYEXEC(Store::synchronize(query));
144 ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished();
145
146 auto job = Store::fetchAll<Folder>(query).then<void, QList<Folder::Ptr>>([](const QList<Folder::Ptr> &folders) {
147 QStringList names;
148 for (const auto &folder : folders) {
149 names << folder->getName();
150 }
151 QVERIFY(!names.contains("test2"));
152 });
153 VERIFYEXEC(job);
154}
155
85void MailSyncTest::testListFolderHierarchy() 156void MailSyncTest::testListFolderHierarchy()
86{ 157{
158 if (!mCapabilities.contains("folder.hierarchy")) {
159 QSKIP("Missing capability folder.hierarchy");
160 }
87 Sink::Query query; 161 Sink::Query query;
88 query.resources << mResourceInstanceIdentifier; 162 query.resources << mResourceInstanceIdentifier;
89 query.request<Folder::Name>().request<Folder::Parent>(); 163 query.request<Folder::Name>().request<Folder::Parent>();
@@ -94,19 +168,35 @@ void MailSyncTest::testListFolderHierarchy()
94 VERIFYEXEC(Store::synchronize(query)); 168 VERIFYEXEC(Store::synchronize(query));
95 ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished(); 169 ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished();
96 170
97 auto job = Store::fetchAll<Folder>(query).then<void, QList<Folder::Ptr>>([](const QList<Folder::Ptr> &folders) { 171 auto job = Store::fetchAll<Folder>(query).then<void, QList<Folder::Ptr>>([=](const QList<Folder::Ptr> &folders) {
98 QCOMPARE(folders.size(), 3);
99 QHash<QString, Folder::Ptr> map; 172 QHash<QString, Folder::Ptr> map;
100 for (const auto &folder : folders) { 173 for (const auto &folder : folders) {
101 map.insert(folder->getName(), folder); 174 map.insert(folder->getName(), folder);
102 } 175 }
176 QStringList names;
177 for (const auto &folder : folders) {
178 names << folder->getName();
179 }
180
181 //Workaround for maildir
182 if (names.contains("maildir1")) {
183 names.removeAll("maildir1");
184 }
185 if (mCapabilities.contains("drafts")) {
186 QVERIFY(names.contains("drafts"));
187 names.removeAll("drafts");
188 }
189 QCOMPARE(names.size(), 3);
103 QCOMPARE(map.value("sub")->getParent(), map.value("test")->identifier()); 190 QCOMPARE(map.value("sub")->getParent(), map.value("test")->identifier());
104 }); 191 });
105 VERIFYEXEC(job); 192 VERIFYEXEC(job);
106} 193}
107 194
108void MailSyncTest::testListNewFolders() 195void MailSyncTest::testListNewSubFolder()
109{ 196{
197 if (!mCapabilities.contains("folder.hierarchy")) {
198 QSKIP("Missing capability folder.hierarchy");
199 }
110 Sink::Query query; 200 Sink::Query query;
111 query.resources << mResourceInstanceIdentifier; 201 query.resources << mResourceInstanceIdentifier;
112 query.request<Folder::Name>(); 202 query.request<Folder::Name>();
@@ -127,8 +217,11 @@ void MailSyncTest::testListNewFolders()
127 VERIFYEXEC(job); 217 VERIFYEXEC(job);
128} 218}
129 219
130void MailSyncTest::testListRemovedFolders() 220void MailSyncTest::testListRemovedSubFolder()
131{ 221{
222 if (!mCapabilities.contains("folder.hierarchy")) {
223 QSKIP("Missing capability folder.hierarchy");
224 }
132 Sink::Query query; 225 Sink::Query query;
133 query.resources << mResourceInstanceIdentifier; 226 query.resources << mResourceInstanceIdentifier;
134 query.request<Folder::Name>(); 227 query.request<Folder::Name>();
@@ -176,7 +269,7 @@ void MailSyncTest::testListMails()
176 VERIFYEXEC(job); 269 VERIFYEXEC(job);
177} 270}
178 271
179void MailSyncTest::testFetchNewMessages() 272void MailSyncTest::testFetchNewRemovedMessages()
180{ 273{
181 Sink::Query query; 274 Sink::Query query;
182 query.resources << mResourceInstanceIdentifier; 275 query.resources << mResourceInstanceIdentifier;
@@ -189,36 +282,30 @@ void MailSyncTest::testFetchNewMessages()
189 auto msg = KMime::Message::Ptr::create(); 282 auto msg = KMime::Message::Ptr::create();
190 msg->subject(true)->fromUnicodeString("Foobar", "utf8"); 283 msg->subject(true)->fromUnicodeString("Foobar", "utf8");
191 msg->assemble(); 284 msg->assemble();
192 createMessage(QStringList() << "test", msg->encodedContent(true)); 285 auto messageIdentifier = createMessage(QStringList() << "test", msg->encodedContent(true));
193 286
194 Store::synchronize(query).exec().waitForFinished(); 287 Store::synchronize(query).exec().waitForFinished();
195 ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished(); 288 ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished();
196 289
197 auto job = Store::fetchAll<Mail>(query).then<void, QList<Mail::Ptr>>([](const QList<Mail::Ptr> &mails) { 290 {
198 QCOMPARE(mails.size(), 2); 291 auto job = Store::fetchAll<Mail>(query).then<void, QList<Mail::Ptr>>([](const QList<Mail::Ptr> &mails) {
199 }); 292 QCOMPARE(mails.size(), 2);
200 VERIFYEXEC(job); 293 });
201} 294 VERIFYEXEC(job);
295 }
202 296
203void MailSyncTest::testFetchRemovedMessages()
204{
205 Sink::Query query;
206 query.resources << mResourceInstanceIdentifier;
207 query.request<Mail::Subject>().request<Mail::MimeMessage>();
208 297
209 // Ensure all local data is processed 298 removeMessage(QStringList() << "test", messageIdentifier);
210 VERIFYEXEC(Store::synchronize(query));
211 ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished();
212
213 removeMessage(QStringList() << "test", "2:*");
214 299
215 Store::synchronize(query).exec().waitForFinished(); 300 Store::synchronize(query).exec().waitForFinished();
216 ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished(); 301 ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished();
217 302
218 auto job = Store::fetchAll<Mail>(query).then<void, QList<Mail::Ptr>>([](const QList<Mail::Ptr> &mails) { 303 {
219 QCOMPARE(mails.size(), 1); 304 auto job = Store::fetchAll<Mail>(query).then<void, QList<Mail::Ptr>>([](const QList<Mail::Ptr> &mails) {
220 }); 305 QCOMPARE(mails.size(), 1);
221 VERIFYEXEC(job); 306 });
307 VERIFYEXEC(job);
308 }
222} 309}
223 310
224//TODO test flag sync 311//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 {\
45 45
46namespace Sink { 46namespace Sink {
47 47
48/**
49 * Tests if the resource can synchronize (read-only) emails.
50 *
51 * The default testenvironment is:
52 * * INBOX
53 * * INBOX.test
54 */
48class MailSyncTest : public QObject 55class MailSyncTest : public QObject
49{ 56{
50 Q_OBJECT 57 Q_OBJECT
@@ -59,8 +66,8 @@ protected:
59 virtual void removeResourceFromDisk(const QByteArray &mResourceInstanceIdentifier) = 0; 66 virtual void removeResourceFromDisk(const QByteArray &mResourceInstanceIdentifier) = 0;
60 virtual void createFolder(const QStringList &folderPath) = 0; 67 virtual void createFolder(const QStringList &folderPath) = 0;
61 virtual void removeFolder(const QStringList &folderPath) = 0; 68 virtual void removeFolder(const QStringList &folderPath) = 0;
62 virtual void createMessage(const QStringList &folderPath, const QByteArray &message) = 0; 69 virtual QByteArray createMessage(const QStringList &folderPath, const QByteArray &message) = 0;
63 virtual void removeMessage(const QStringList &folderPath, const QByteArray &message) = 0; 70 virtual void removeMessage(const QStringList &folderPath, const QByteArray &messageIdentifier) = 0;
64 71
65private slots: 72private slots:
66 void initTestCase(); 73 void initTestCase();
@@ -68,13 +75,14 @@ private slots:
68 void cleanup(); 75 void cleanup();
69 76
70 void testListFolders(); 77 void testListFolders();
78 void testListNewFolder();
79 void testListRemovedFolder();
71 void testListFolderHierarchy(); 80 void testListFolderHierarchy();
72 void testListNewFolders(); 81 void testListNewSubFolder();
73 void testListRemovedFolders(); 82 void testListRemovedSubFolder();
74 83
75 void testListMails(); 84 void testListMails();
76 void testFetchNewMessages(); 85 void testFetchNewRemovedMessages();
77 void testFetchRemovedMessages();
78 86
79 void testFailingSync(); 87 void testFailingSync();
80}; 88};