summaryrefslogtreecommitdiffstats
path: root/tests/mailsynctest.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-05-31 15:11:54 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-05-31 15:11:54 +0200
commit2061ba0cf16b6a0a3313f861f79b90cf2905efce (patch)
treec0e28aa0ff2271140bb58d6a0f1b51c9fc28a103 /tests/mailsynctest.cpp
parent4798de83c9f198bfc0a802a987c9002968fb6c2c (diff)
downloadsink-2061ba0cf16b6a0a3313f861f79b90cf2905efce.tar.gz
sink-2061ba0cf16b6a0a3313f861f79b90cf2905efce.zip
The maildir resource passes the maildirmailsync test
Diffstat (limited to 'tests/mailsynctest.cpp')
-rw-r--r--tests/mailsynctest.cpp141
1 files changed, 114 insertions, 27 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