diff options
author | Rémi Nicole <nicole@kolabsystems.com> | 2018-05-06 17:42:37 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-05-06 17:52:51 +0200 |
commit | 90a8d33f7c17c802730fd9b978db0e32d28a7dff (patch) | |
tree | d270feeb64815da8de3ffb544b14af362424c279 /examples/caldavresource/tests/caldavtest.cpp | |
parent | 3d998856895f0e82a4d0eadd398dafbe1d027e34 (diff) | |
download | sink-90a8d33f7c17c802730fd9b978db0e32d28a7dff.tar.gz sink-90a8d33f7c17c802730fd9b978db0e32d28a7dff.zip |
Implement Todo entity type
Summary:
Some notes:
- Needed to specialize some flatbuffers related functions for serializing QStringList and int
- Removed useless qWarnings in caldav test
- Rename EventSynchronizer -> CalDAVSynchronizer since it also synchronizes Calendars and Todos (and more to come!)
Reviewers: cmollekopf
Tags: #sink
Differential Revision: https://phabricator.kde.org/D12695
Diffstat (limited to 'examples/caldavresource/tests/caldavtest.cpp')
-rw-r--r-- | examples/caldavresource/tests/caldavtest.cpp | 111 |
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 @@ | |||
22 | using Sink::ApplicationDomain::Calendar; | 22 | using Sink::ApplicationDomain::Calendar; |
23 | using Sink::ApplicationDomain::DummyResource; | 23 | using Sink::ApplicationDomain::DummyResource; |
24 | using Sink::ApplicationDomain::Event; | 24 | using Sink::ApplicationDomain::Event; |
25 | using Sink::ApplicationDomain::Todo; | ||
25 | using Sink::ApplicationDomain::SinkResource; | 26 | using Sink::ApplicationDomain::SinkResource; |
26 | 27 | ||
27 | class CalDavTest : public QObject | 28 | class 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 | ||
51 | private slots: | 54 | private 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 | ||
279 | QTEST_MAIN(CalDavTest) | 376 | QTEST_MAIN(CalDavTest) |