diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,6 +1,7 @@ find_package(Qt5 REQUIRED NO_MODULE COMPONENTS QuickTest Network Quick) find_package(Sink CONFIG REQUIRED) find_package(KAsync CONFIG REQUIRED) +find_package(KF5CalendarCore CONFIG REQUIRED) add_executable(kubetestrunner kubetestrunner.cpp) target_link_libraries(kubetestrunner @@ -15,5 +16,6 @@ add_library(testplugin SHARED testplugin.cpp teststore.cpp) target_link_libraries(testplugin kubeframework + KF5::CalendarCore ) install(TARGETS testplugin DESTINATION ${QML_INSTALL_DIR}/org/kube/test) diff --git a/tests/teststore.cpp b/tests/teststore.cpp --- a/tests/teststore.cpp +++ b/tests/teststore.cpp @@ -21,9 +21,14 @@ #include #include #include + #include +#include +#include + #include +#include #include #include "framework/src/domain/mime/mailtemplates.h" @@ -124,6 +129,59 @@ }); } +static void createEvent(const QVariantMap &object, const QByteArray &calendarId = {}) +{ + using Sink::ApplicationDomain::ApplicationDomainType; + using Sink::ApplicationDomain::Event; + + auto sinkEvent = ApplicationDomainType::createEntity(object["resource"].toByteArray()); + + auto calcoreEvent = QSharedPointer::create(); + + QString uid; + if (object.contains("uid")) { + uid = object["uid"].toString(); + } else { + uid = QUuid::createUuid().toString(); + } + calcoreEvent->setUid(uid); + + auto summary = object["summary"].toString(); + calcoreEvent->setSummary(summary); + + if (object.contains("description")) { + auto description = object["description"].toString(); + calcoreEvent->setDescription(description); + } + + auto startTime = object["starts"].toDateTime(); + auto endTime = object["ends"].toDateTime(); + + calcoreEvent->setDtStart(startTime); + calcoreEvent->setDtEnd(endTime); + + auto ical = KCalCore::ICalFormat().toICalString(calcoreEvent); + sinkEvent.setIcal(ical.toUtf8()); + + sinkEvent.setCalendar(calendarId); + + Sink::Store::create(sinkEvent).exec().waitForFinished(); +} + +static void createCalendar(const QVariantMap &object) +{ + using Sink::ApplicationDomain::Calendar; + using Sink::ApplicationDomain::ApplicationDomainType; + + auto calendar = ApplicationDomainType::createEntity(object["resource"].toByteArray()); + calendar.setName(object["name"].toString()); + Sink::Store::create(calendar).exec().waitForFinished(); + + auto calendarId = calendar.identifier(); + iterateOverObjects(object.value("events").toList(), + [calendarId](const QVariantMap &object) { createEvent(object, calendarId); }); +} + void TestStore::setup(const QVariantMap &map) { using namespace Sink::ApplicationDomain; @@ -143,6 +201,9 @@ } else if (object["type"] == "mailtransport") { resource.setResourceType("sink.mailtransport"); resource.setProperty("testmode", true); + } else if (object["type"] == "caldav") { + resource.setResourceType("sink.caldav"); + resource.setProperty("testmode", true); } else { Q_ASSERT(false); } @@ -166,6 +227,8 @@ createMail(map); }); + iterateOverObjects(map.value("calendars").toList(), createCalendar); + Sink::ResourceControl::flushMessageQueue(resources).exec().waitForFinished(); } diff --git a/views/calendar/main.qml b/views/calendar/main.qml --- a/views/calendar/main.qml +++ b/views/calendar/main.qml @@ -32,15 +32,40 @@ Component.onCompleted: { var initialState = { accounts: [{ - id: "account1", - name: "Test Account" - }], + id: "account1", + name: "Test Account" + }], identities: [{ - account: "account1", - name: "Test Identity", - address: "identity@example.org" - }], - resources: [] + account: "account1", + name: "Test Identity", + address: "identity@example.org" + }], + resources: [{ + id: "caldavresource", + account: "account1", + type: "caldav", + }], + calendars: [{ + id: "calendar1", + resource: "caldavresource", + name: "Test Calendar", + events: [ + { + resource: "caldavresource", + summary: "Test Event1", + description: "This is test event #1", + starts: "2018-04-10T14:03:00", + ends: "2018-04-10T17:03:00", + }, + { + resource: "caldavresource", + summary: "Test Event2", + description: "This is test event #2", + starts: "2018-04-11T09:03:00", + ends: "2018-04-11T14:03:00", + }, + ], + }], } TestStore.setup(initialState) }