From be495877931f1f811f46a442e175e2ee53949a29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Nicole?= Date: Tue, 17 Apr 2018 10:33:10 +0200 Subject: Add calendar support in the Test Store Summary: Fixes T8483 Reviewers: cmollekopf Reviewed By: cmollekopf Tags: #kube Maniphest Tasks: T8483 Differential Revision: https://phabricator.kde.org/D12087 --- tests/CMakeLists.txt | 2 ++ tests/teststore.cpp | 63 +++++++++++++++++++++++++++++++++++++++++++++++++ views/calendar/main.qml | 41 +++++++++++++++++++++++++------- 3 files changed, 98 insertions(+), 8 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 35b28559..d7dfe81d 100644 --- 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 @@ install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kube/test) 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 index 6a5304ad..3a60676d 100644 --- 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 createFolder(const QVariantMap &object) }); } +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 @@ void TestStore::setup(const QVariantMap &map) } 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 @@ void TestStore::setup(const QVariantMap &map) 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 index 3cce9adf..672e3e21 100644 --- a/views/calendar/main.qml +++ b/views/calendar/main.qml @@ -32,15 +32,40 @@ ApplicationWindow { 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) } -- cgit v1.2.3