From cad8b5fa427b825b9b5d634fd38c8d28253c8cdb Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 29 Mar 2018 18:13:50 +0200 Subject: A carddav test --- examples/carddavresource/tests/CMakeLists.txt | 9 ++ examples/carddavresource/tests/carddavtest.cpp | 116 +++++++++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 examples/carddavresource/tests/CMakeLists.txt create mode 100644 examples/carddavresource/tests/carddavtest.cpp (limited to 'examples/carddavresource/tests') diff --git a/examples/carddavresource/tests/CMakeLists.txt b/examples/carddavresource/tests/CMakeLists.txt new file mode 100644 index 0000000..e7e8c18 --- /dev/null +++ b/examples/carddavresource/tests/CMakeLists.txt @@ -0,0 +1,9 @@ +set(CMAKE_AUTOMOC ON) +include_directories(${CMAKE_BINARY_DIR}) + +include(SinkTest) + +auto_tests ( + carddavtest +) +target_link_libraries(carddavtest sink_resource_carddav) diff --git a/examples/carddavresource/tests/carddavtest.cpp b/examples/carddavresource/tests/carddavtest.cpp new file mode 100644 index 0000000..107e1e3 --- /dev/null +++ b/examples/carddavresource/tests/carddavtest.cpp @@ -0,0 +1,116 @@ + +#include + + +#include "common/resourcecontrol.h" +#include "common/secretstore.h" +#include "common/store.h" +#include "common/test.h" +#include "tests/testutils.h" +#include +#include +#include +#include +#include + + +using Sink::ApplicationDomain::Calendar; +using Sink::ApplicationDomain::Event; +using Sink::ApplicationDomain::SinkResource; + +class CardDavTest : public QObject +{ + Q_OBJECT + + SinkResource createResource() + { + auto resource = Sink::ApplicationDomain::CardDavResource::create("account1"); + resource.setProperty("server", "http://localhost/dav/addressbooks/user/doe"); + resource.setProperty("username", "doe"); + Sink::SecretStore::instance().insert(resource.identifier(), "doe"); + resource.setProperty("testmode", true); + return resource; + } + + + QByteArray mResourceInstanceIdentifier; + + void createContact(const QString &firstname, const QString &lastname) + { + QUrl mainUrl(QStringLiteral("http://localhost/dav/addressbooks/user/doe")); + mainUrl.setUserName(QStringLiteral("doe")); + mainUrl.setPassword(QStringLiteral("doe")); + + + KDAV2::DavUrl davUrl(mainUrl, KDAV2::CardDav); + + auto *job = new KDAV2::DavCollectionsFetchJob(davUrl); + job->exec(); + + const auto collectionUrl = [&] { + for(const auto collection : job->collections()) { + return collection.url().url(); + } + return QUrl{}; + }(); + + + QUrl url{collectionUrl.toString() + "xxx.vcf"}; + url.setUserInfo(mainUrl.userInfo()); + KDAV2::DavUrl testItemUrl(url, KDAV2::CardDav); + QByteArray data = QString("BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Kolab//iRony DAV Server 0.3.1//Sabre//Sabre VObject 2.1.7//EN\r\nUID:12345678-1234-1234-%1-%2\r\nFN:%1 %2\r\nN:%2;%1;;;\r\nEMAIL;TYPE=INTERNET;TYPE=HOME:%1.%2@example.com\r\nREV;VALUE=DATE-TIME:20161221T145611Z\r\nEND:VCARD\r\n").arg(firstname).arg(lastname).toUtf8(); + KDAV2::DavItem item(testItemUrl, QStringLiteral("text/vcard"), data, QString()); + auto createJob = new KDAV2::DavItemCreateJob(item); + createJob->exec(); + if (createJob->error()) { + qWarning() << createJob->errorString(); + } + } + +private slots: + + void initTestCase() + { + Sink::Test::initTest(); + auto resource = createResource(); + QVERIFY(!resource.identifier().isEmpty()); + VERIFYEXEC(Sink::Store::create(resource)); + mResourceInstanceIdentifier = resource.identifier(); + } + + void cleanup() + { + VERIFYEXEC(Sink::Store::removeDataFromDisk(mResourceInstanceIdentifier)); + } + + void init() + { + VERIFYEXEC(Sink::ResourceControl::start(mResourceInstanceIdentifier)); + } + + void testSyncContacts() + { + createContact("john", "doe"); + createContact("jane", "doe"); + Sink::SyncScope scope; + scope.setType(); + scope.resourceFilter(mResourceInstanceIdentifier); + + VERIFYEXEC(Sink::Store::synchronize(scope)); + VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier)); + const auto contacts = Sink::Store::read(Sink::Query().resourceFilter(mResourceInstanceIdentifier)); + QCOMPARE(contacts.size(), 2); + + //Ensure a resync works + { + VERIFYEXEC(Sink::Store::synchronize(scope)); + VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier)); + const auto contacts = Sink::Store::read(Sink::Query().resourceFilter(mResourceInstanceIdentifier)); + QCOMPARE(contacts.size(), 2); + } + } +}; + +QTEST_MAIN(CardDavTest) + +#include "carddavtest.moc" -- cgit v1.2.3