summaryrefslogtreecommitdiffstats
path: root/examples/imapresource/tests/imapmailsynctest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/imapresource/tests/imapmailsynctest.cpp')
-rw-r--r--examples/imapresource/tests/imapmailsynctest.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/examples/imapresource/tests/imapmailsynctest.cpp b/examples/imapresource/tests/imapmailsynctest.cpp
index 3e975b8..e40aec8 100644
--- a/examples/imapresource/tests/imapmailsynctest.cpp
+++ b/examples/imapresource/tests/imapmailsynctest.cpp
@@ -26,6 +26,9 @@
26#include "common/test.h" 26#include "common/test.h"
27#include "common/domain/applicationdomaintype.h" 27#include "common/domain/applicationdomaintype.h"
28#include "common/secretstore.h" 28#include "common/secretstore.h"
29#include "common/store.h"
30#include "common/resourcecontrol.h"
31#include "common/notifier.h"
29 32
30using namespace Sink; 33using namespace Sink;
31using namespace Sink::ApplicationDomain; 34using namespace Sink::ApplicationDomain;
@@ -115,6 +118,64 @@ protected:
115 VERIFYEXEC(imap.select("INBOX." + folderPath.join('.'))); 118 VERIFYEXEC(imap.select("INBOX." + folderPath.join('.')));
116 VERIFYEXEC(imap.addFlags(KIMAP2::ImapSet::fromImapSequenceSet(messageIdentifier), QByteArrayList() << Imap::Flags::Flagged)); 119 VERIFYEXEC(imap.addFlags(KIMAP2::ImapSet::fromImapSequenceSet(messageIdentifier), QByteArrayList() << Imap::Flags::Flagged));
117 } 120 }
121
122 static QByteArray newMessage(const QString &subject)
123 {
124 auto msg = KMime::Message::Ptr::create();
125 msg->subject(true)->fromUnicodeString(subject, "utf8");
126 msg->date(true)->setDateTime(QDateTime::currentDateTimeUtc());
127 msg->assemble();
128 return msg->encodedContent(true);
129 }
130
131private slots:
132 void testNewMailNotification()
133 {
134 const auto syncFolders = Sink::SyncScope{ApplicationDomain::getTypeName<Folder>()}.resourceFilter(mResourceInstanceIdentifier);
135 //Fetch folders initially
136 VERIFYEXEC(Store::synchronize(syncFolders));
137 VERIFYEXEC(ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
138
139 auto folder = Store::readOne<Folder>(Sink::Query{}.resourceFilter(mResourceInstanceIdentifier).filter<Folder::Name>("test"));
140 Q_ASSERT(!folder.identifier().isEmpty());
141
142 const auto syncTestMails = Sink::SyncScope{ApplicationDomain::getTypeName<Mail>()}.resourceFilter(mResourceInstanceIdentifier).filter<Mail::Folder>(QVariant::fromValue(folder.identifier()));
143
144 bool notificationReceived = false;
145 auto notifier = QSharedPointer<Sink::Notifier>::create(mResourceInstanceIdentifier);
146 notifier->registerHandler([&](const Notification &notification) {
147 if (notification.type == Sink::Notification::Info && notification.code == ApplicationDomain::NewContentAvailable && notification.entities.contains(folder.identifier())) {
148 notificationReceived = true;
149 }
150 });
151
152 //Should result in a change notification for test
153 VERIFYEXEC(Store::synchronize(syncFolders));
154 VERIFYEXEC(ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
155
156 QTRY_VERIFY(notificationReceived);
157
158 notificationReceived = false;
159
160 //Fetch test mails to skip change notification
161 VERIFYEXEC(Store::synchronize(syncTestMails));
162 VERIFYEXEC(ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
163
164 //Should no longer result in change notifications for test
165 VERIFYEXEC(Store::synchronize(syncFolders));
166 VERIFYEXEC(ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
167
168 QVERIFY(!notificationReceived);
169
170 //Create message and retry
171 createMessage(QStringList() << "test", newMessage("This is a Subject."));
172
173 //Should result in change notification
174 VERIFYEXEC(Store::synchronize(syncFolders));
175 VERIFYEXEC(ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
176
177 QTRY_VERIFY(notificationReceived);
178 }
118}; 179};
119 180
120QTEST_MAIN(ImapMailSyncTest) 181QTEST_MAIN(ImapMailSyncTest)