From 761328989492db9bd603c2d7f1134d20e485d2f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Nicole?= Date: Tue, 27 Mar 2018 18:26:11 +0200 Subject: Add CalDAV support Summary: Notes: - Add a `webdavcommon` folder for WebDAV generic resource code - Move `davresource` to `carddaveresource` and make it use the WebDAV code - For now it tests the CalDAV resource directly on KolabNow (to be changed) - Only synchronization, not adding / changing / removing WebDAV collections or items (to be implemented) - Only events are currently supported (todo, freebusy, etc. are to be implemented but should be straightforward) Fixes T8224 Reviewers: cmollekopf Tags: #sink Maniphest Tasks: T8224 Differential Revision: https://phabricator.kde.org/D11741 --- examples/caldavresource/tests/CMakeLists.txt | 9 +++ examples/caldavresource/tests/caldavtest.cpp | 93 ++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 examples/caldavresource/tests/CMakeLists.txt create mode 100644 examples/caldavresource/tests/caldavtest.cpp (limited to 'examples/caldavresource/tests') diff --git a/examples/caldavresource/tests/CMakeLists.txt b/examples/caldavresource/tests/CMakeLists.txt new file mode 100644 index 0000000..d2f9b50 --- /dev/null +++ b/examples/caldavresource/tests/CMakeLists.txt @@ -0,0 +1,9 @@ +set(CMAKE_AUTOMOC ON) +include_directories(${CMAKE_BINARY_DIR}) + +include(SinkTest) + +auto_tests ( + caldavtest +) +target_link_libraries(caldavtest sink_resource_caldav) diff --git a/examples/caldavresource/tests/caldavtest.cpp b/examples/caldavresource/tests/caldavtest.cpp new file mode 100644 index 0000000..f999590 --- /dev/null +++ b/examples/caldavresource/tests/caldavtest.cpp @@ -0,0 +1,93 @@ +#include + +#include "../caldavresource.h" + +#include "common/resourcecontrol.h" +#include "common/secretstore.h" +#include "common/store.h" +#include "common/test.h" +#include "tests/testutils.h" + +using Sink::ApplicationDomain::Calendar; +using Sink::ApplicationDomain::DummyResource; +using Sink::ApplicationDomain::Event; +using Sink::ApplicationDomain::SinkResource; + +class CalDavTest : public QObject +{ + Q_OBJECT + + SinkResource createResource() + { + auto resource = Sink::ApplicationDomain::CalDavResource::create("account1"); + resource.setProperty("server", "http://localhost/dav/calendars/users/doe"); + resource.setProperty("username", "doe"); + Sink::SecretStore::instance().insert(resource.identifier(), "doe"); + resource.setProperty("testmode", true); + return resource; + } + + + QByteArray mResourceInstanceIdentifier; + QByteArray mStorageResource; + +private slots: + + void initTestCase() + { + Sink::Test::initTest(); + auto resource = createResource(); + QVERIFY(!resource.identifier().isEmpty()); + VERIFYEXEC(Sink::Store::create(resource)); + mResourceInstanceIdentifier = resource.identifier(); + + auto dummyResource = DummyResource::create("account1"); + VERIFYEXEC(Sink::Store::create(dummyResource)); + mStorageResource = dummyResource.identifier(); + QVERIFY(!mStorageResource.isEmpty()); + } + + void cleanup() + { + VERIFYEXEC(Sink::Store::removeDataFromDisk(mResourceInstanceIdentifier)); + VERIFYEXEC(Sink::Store::removeDataFromDisk(mStorageResource)); + } + + void init() + { + VERIFYEXEC(Sink::ResourceControl::start(mResourceInstanceIdentifier)); + } + + void testSyncCal() + { + VERIFYEXEC(Sink::Store::synchronize(Sink::Query().resourceFilter(mResourceInstanceIdentifier))); + // Check in the logs that it doesn't synchronize events again because same CTag + VERIFYEXEC(Sink::Store::synchronize(Sink::Query().resourceFilter(mResourceInstanceIdentifier))); + } + + void testSyncCalEmpty() + { + VERIFYEXEC(Sink::Store::synchronize(Sink::Query().resourceFilter(mResourceInstanceIdentifier))); + + auto eventJob = + Sink::Store::fetchAll(Sink::Query().request()).then([](const QList &events) { + QCOMPARE(events.size(), 14); + }); + VERIFYEXEC(eventJob); + + auto calendarJob = + Sink::Store::fetchAll(Sink::Query().request()).then([](const QList &calendars) { + QCOMPARE(calendars.size(), 2); + for (const auto &calendar : calendars) { + QVERIFY(calendar->getName() == "Calendar" || calendar->getName() == "Tasks"); + } + }); + VERIFYEXEC(calendarJob); + + SinkLog() << "Finished"; + } +}; + +QTEST_MAIN(CalDavTest) + +#include "caldavtest.moc" -- cgit v1.2.3