summaryrefslogtreecommitdiffstats
path: root/examples/caldavresource/tests/caldavtest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/caldavresource/tests/caldavtest.cpp')
-rw-r--r--examples/caldavresource/tests/caldavtest.cpp111
1 files changed, 104 insertions, 7 deletions
diff --git a/examples/caldavresource/tests/caldavtest.cpp b/examples/caldavresource/tests/caldavtest.cpp
index f9920d9..9609fa0 100644
--- a/examples/caldavresource/tests/caldavtest.cpp
+++ b/examples/caldavresource/tests/caldavtest.cpp
@@ -22,13 +22,15 @@
22using Sink::ApplicationDomain::Calendar; 22using Sink::ApplicationDomain::Calendar;
23using Sink::ApplicationDomain::DummyResource; 23using Sink::ApplicationDomain::DummyResource;
24using Sink::ApplicationDomain::Event; 24using Sink::ApplicationDomain::Event;
25using Sink::ApplicationDomain::Todo;
25using Sink::ApplicationDomain::SinkResource; 26using Sink::ApplicationDomain::SinkResource;
26 27
27class CalDavTest : public QObject 28class CalDavTest : public QObject
28{ 29{
29 Q_OBJECT 30 Q_OBJECT
30 31
31 // This test assumes a calendar MyCalendar with one event in it. 32 // This test assumes a calendar MyCalendar with one event and one todo in
33 // it.
32 34
33 const QString baseUrl = "http://localhost/dav/calendars/users/doe"; 35 const QString baseUrl = "http://localhost/dav/calendars/users/doe";
34 const QString username = "doe"; 36 const QString username = "doe";
@@ -47,6 +49,7 @@ class CalDavTest : public QObject
47 QByteArray mResourceInstanceIdentifier; 49 QByteArray mResourceInstanceIdentifier;
48 50
49 QString addedEventUid; 51 QString addedEventUid;
52 QString addedTodoUid;
50 53
51private slots: 54private slots:
52 55
@@ -74,6 +77,7 @@ private slots:
74 VERIFYEXEC(Sink::Store::synchronize(Sink::Query().resourceFilter(mResourceInstanceIdentifier))); 77 VERIFYEXEC(Sink::Store::synchronize(Sink::Query().resourceFilter(mResourceInstanceIdentifier)));
75 // Check in the logs that it doesn't synchronize events again because same CTag 78 // Check in the logs that it doesn't synchronize events again because same CTag
76 VERIFYEXEC(Sink::Store::synchronize(Sink::Query().resourceFilter(mResourceInstanceIdentifier))); 79 VERIFYEXEC(Sink::Store::synchronize(Sink::Query().resourceFilter(mResourceInstanceIdentifier)));
80 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
77 } 81 }
78 82
79 void testSyncCalEmpty() 83 void testSyncCalEmpty()
@@ -83,7 +87,11 @@ private slots:
83 87
84 auto eventJob = Sink::Store::fetchAll<Event>(Sink::Query().request<Event::Uid>()) 88 auto eventJob = Sink::Store::fetchAll<Event>(Sink::Query().request<Event::Uid>())
85 .then([](const QList<Event::Ptr> &events) { QCOMPARE(events.size(), 1); }); 89 .then([](const QList<Event::Ptr> &events) { QCOMPARE(events.size(), 1); });
90 auto todoJob = Sink::Store::fetchAll<Todo>(Sink::Query().request<Todo::Uid>())
91 .then([](const QList<Todo::Ptr> &todos) { QCOMPARE(todos.size(), 1); });
92
86 VERIFYEXEC(eventJob); 93 VERIFYEXEC(eventJob);
94 VERIFYEXEC(todoJob);
87 95
88 auto calendarJob = Sink::Store::fetchAll<Calendar>(Sink::Query().request<Calendar::Name>()) 96 auto calendarJob = Sink::Store::fetchAll<Calendar>(Sink::Query().request<Calendar::Name>())
89 .then([](const QList<Calendar::Ptr> &calendars) { 97 .then([](const QList<Calendar::Ptr> &calendars) {
@@ -136,6 +144,44 @@ private slots:
136 VERIFYEXEC(verifyEventJob); 144 VERIFYEXEC(verifyEventJob);
137 } 145 }
138 146
147 void testAddTodo()
148 {
149 VERIFYEXEC(Sink::Store::synchronize(Sink::Query().resourceFilter(mResourceInstanceIdentifier)));
150 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
151
152 auto job = Sink::Store::fetchOne<Calendar>({}).exec();
153 job.waitForFinished();
154 QVERIFY2(!job.errorCode(), "Fetching Calendar failed");
155 auto calendar = job.value();
156
157 auto todo = QSharedPointer<KCalCore::Todo>::create();
158 todo->setSummary("Hello");
159 todo->setDtStart(QDateTime::currentDateTime());
160 todo->setCreated(QDateTime::currentDateTime());
161 addedTodoUid = QUuid::createUuid().toString();
162 todo->setUid(addedTodoUid);
163
164 auto ical = KCalCore::ICalFormat().toICalString(todo);
165 Todo sinkTodo(mResourceInstanceIdentifier);
166 sinkTodo.setIcal(ical.toUtf8());
167 sinkTodo.setCalendar(calendar);
168
169 SinkLog() << "Adding todo";
170 VERIFYEXEC(Sink::Store::create(sinkTodo));
171 VERIFYEXEC(Sink::ResourceControl::flushReplayQueue(mResourceInstanceIdentifier));
172
173 auto verifyTodoCountJob =
174 Sink::Store::fetchAll<Todo>(Sink::Query().request<Todo::Uid>()).then([](const QList<Todo::Ptr> &todos) {
175 QCOMPARE(todos.size(), 2);
176 });
177 VERIFYEXEC(verifyTodoCountJob);
178
179 auto verifyTodoJob =
180 Sink::Store::fetchOne<Todo>(Sink::Query().filter("uid", Sink::Query::Comparator(addedTodoUid)))
181 .then([](const Todo &todo) { QCOMPARE(todo.getSummary(), {"Hello"}); });
182 VERIFYEXEC(verifyTodoJob);
183 }
184
139 void testModifyEvent() 185 void testModifyEvent()
140 { 186 {
141 VERIFYEXEC(Sink::Store::synchronize(Sink::Query().resourceFilter(mResourceInstanceIdentifier))); 187 VERIFYEXEC(Sink::Store::synchronize(Sink::Query().resourceFilter(mResourceInstanceIdentifier)));
@@ -173,6 +219,43 @@ private slots:
173 VERIFYEXEC(verifyEventJob); 219 VERIFYEXEC(verifyEventJob);
174 } 220 }
175 221
222 void testModifyTodo()
223 {
224 VERIFYEXEC(Sink::Store::synchronize(Sink::Query().resourceFilter(mResourceInstanceIdentifier)));
225 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
226
227 auto job = Sink::Store::fetchOne<Todo>(
228 Sink::Query().filter("uid", Sink::Query::Comparator(addedTodoUid)))
229 .exec();
230 job.waitForFinished();
231 QVERIFY2(!job.errorCode(), "Fetching Todo failed");
232 auto todo = job.value();
233
234 auto incidence = KCalCore::ICalFormat().readIncidence(todo.getIcal());
235 auto caltodo = incidence.dynamicCast<KCalCore::Todo>();
236 QVERIFY2(caltodo, "Cannot convert to KCalCore todo");
237
238 caltodo->setSummary("Hello World!");
239 auto dummy = QSharedPointer<KCalCore::Todo>(caltodo);
240 auto newical = KCalCore::ICalFormat().toICalString(dummy);
241
242 todo.setIcal(newical.toUtf8());
243
244 VERIFYEXEC(Sink::Store::modify(todo));
245
246 VERIFYEXEC(Sink::Store::synchronize(Sink::Query().resourceFilter(mResourceInstanceIdentifier)));
247 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
248
249 auto verifyTodoCountJob = Sink::Store::fetchAll<Todo>({}).then(
250 [](const QList<Todo::Ptr> &todos) { QCOMPARE(todos.size(), 2); });
251 VERIFYEXEC(verifyTodoCountJob);
252
253 auto verifyTodoJob =
254 Sink::Store::fetchOne<Todo>(Sink::Query().filter("uid", Sink::Query::Comparator(addedTodoUid)))
255 .then([](const Todo &todo) { QCOMPARE(todo.getSummary(), {"Hello World!"}); });
256 VERIFYEXEC(verifyTodoJob);
257 }
258
176 void testSneakyModifyEvent() 259 void testSneakyModifyEvent()
177 { 260 {
178 VERIFYEXEC(Sink::Store::synchronize(Sink::Query().resourceFilter(mResourceInstanceIdentifier))); 261 VERIFYEXEC(Sink::Store::synchronize(Sink::Query().resourceFilter(mResourceInstanceIdentifier)));
@@ -180,7 +263,6 @@ private slots:
180 263
181 // Change the item without sink's knowledge 264 // Change the item without sink's knowledge
182 { 265 {
183 qWarning() << 1;
184 auto collection = ([this]() -> KDAV2::DavCollection { 266 auto collection = ([this]() -> KDAV2::DavCollection {
185 QUrl url(baseUrl); 267 QUrl url(baseUrl);
186 url.setUserName(username); 268 url.setUserName(username);
@@ -212,22 +294,17 @@ private slots:
212 return itemFetchJob.item(); 294 return itemFetchJob.item();
213 })(); 295 })();
214 296
215 qWarning() << 3;
216 auto incidence = KCalCore::ICalFormat().readIncidence(davitem.data()); 297 auto incidence = KCalCore::ICalFormat().readIncidence(davitem.data());
217 auto calevent = incidence.dynamicCast<KCalCore::Event>(); 298 auto calevent = incidence.dynamicCast<KCalCore::Event>();
218 QVERIFY2(calevent, "Cannot convert to KCalCore event"); 299 QVERIFY2(calevent, "Cannot convert to KCalCore event");
219 300
220 qWarning() << 4;
221 calevent->setSummary("Manual Hello World!"); 301 calevent->setSummary("Manual Hello World!");
222 auto newical = KCalCore::ICalFormat().toICalString(calevent); 302 auto newical = KCalCore::ICalFormat().toICalString(calevent);
223 303
224 qWarning() << 5;
225 davitem.setData(newical.toUtf8()); 304 davitem.setData(newical.toUtf8());
226 KDAV2::DavItemModifyJob itemModifyJob(davitem); 305 KDAV2::DavItemModifyJob itemModifyJob(davitem);
227 itemModifyJob.exec(); 306 itemModifyJob.exec();
228 QVERIFY2(itemModifyJob.error() == 0, "Cannot modify item"); 307 QVERIFY2(itemModifyJob.error() == 0, "Cannot modify item");
229
230 qWarning() << 6;
231 } 308 }
232 309
233 // Try to change the item with sink 310 // Try to change the item with sink
@@ -274,6 +351,26 @@ private slots:
274 [](const QList<Event::Ptr> &events) { QCOMPARE(events.size(), 1); }); 351 [](const QList<Event::Ptr> &events) { QCOMPARE(events.size(), 1); });
275 VERIFYEXEC(verifyEventCountJob); 352 VERIFYEXEC(verifyEventCountJob);
276 } 353 }
354
355 void testRemoveTodo()
356 {
357 VERIFYEXEC(Sink::Store::synchronize(Sink::Query().resourceFilter(mResourceInstanceIdentifier)));
358 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
359
360 auto job = Sink::Store::fetchOne<Todo>(
361 Sink::Query().filter("uid", Sink::Query::Comparator(addedTodoUid)))
362 .exec();
363 job.waitForFinished();
364 QVERIFY2(!job.errorCode(), "Fetching Todo failed");
365 auto todo = job.value();
366
367 VERIFYEXEC(Sink::Store::remove(todo));
368 VERIFYEXEC(Sink::ResourceControl::flushReplayQueue(mResourceInstanceIdentifier));
369
370 auto verifyTodoCountJob = Sink::Store::fetchAll<Todo>({}).then(
371 [](const QList<Todo::Ptr> &todos) { QCOMPARE(todos.size(), 1); });
372 VERIFYEXEC(verifyTodoCountJob);
373 }
277}; 374};
278 375
279QTEST_MAIN(CalDavTest) 376QTEST_MAIN(CalDavTest)