diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-03-29 18:13:50 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-03-29 18:13:50 +0200 |
commit | cad8b5fa427b825b9b5d634fd38c8d28253c8cdb (patch) | |
tree | ded862f2c37f7dd1378c4077100a1b52e760e32d /examples | |
parent | b24ac86241841ea42495617549e1387ec86b9c01 (diff) | |
download | sink-cad8b5fa427b825b9b5d634fd38c8d28253c8cdb.tar.gz sink-cad8b5fa427b825b9b5d634fd38c8d28253c8cdb.zip |
A carddav test
Diffstat (limited to 'examples')
-rw-r--r-- | examples/carddavresource/CMakeLists.txt | 2 | ||||
-rw-r--r-- | examples/carddavresource/tests/CMakeLists.txt | 9 | ||||
-rw-r--r-- | examples/carddavresource/tests/carddavtest.cpp | 116 |
3 files changed, 127 insertions, 0 deletions
diff --git a/examples/carddavresource/CMakeLists.txt b/examples/carddavresource/CMakeLists.txt index 2c69d26..fbf3d5b 100644 --- a/examples/carddavresource/CMakeLists.txt +++ b/examples/carddavresource/CMakeLists.txt | |||
@@ -9,3 +9,5 @@ add_library(${PROJECT_NAME} SHARED carddavresource.cpp) | |||
9 | target_link_libraries(${PROJECT_NAME} sink_webdav_common sink Qt5::Core Qt5::Network KPim::KDAV2) | 9 | target_link_libraries(${PROJECT_NAME} sink_webdav_common sink Qt5::Core Qt5::Network KPim::KDAV2) |
10 | 10 | ||
11 | install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${SINK_RESOURCE_PLUGINS_PATH}) | 11 | install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${SINK_RESOURCE_PLUGINS_PATH}) |
12 | |||
13 | add_subdirectory(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 @@ | |||
1 | set(CMAKE_AUTOMOC ON) | ||
2 | include_directories(${CMAKE_BINARY_DIR}) | ||
3 | |||
4 | include(SinkTest) | ||
5 | |||
6 | auto_tests ( | ||
7 | carddavtest | ||
8 | ) | ||
9 | 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 @@ | |||
1 | |||
2 | #include <QtTest> | ||
3 | |||
4 | |||
5 | #include "common/resourcecontrol.h" | ||
6 | #include "common/secretstore.h" | ||
7 | #include "common/store.h" | ||
8 | #include "common/test.h" | ||
9 | #include "tests/testutils.h" | ||
10 | #include <KDAV2/DavItem> | ||
11 | #include <KDAV2/DavUrl> | ||
12 | #include <KDAV2/DavItemCreateJob> | ||
13 | #include <KDAV2/DavCollectionsFetchJob> | ||
14 | #include <KDAV2/DavCollection> | ||
15 | |||
16 | |||
17 | using Sink::ApplicationDomain::Calendar; | ||
18 | using Sink::ApplicationDomain::Event; | ||
19 | using Sink::ApplicationDomain::SinkResource; | ||
20 | |||
21 | class CardDavTest : public QObject | ||
22 | { | ||
23 | Q_OBJECT | ||
24 | |||
25 | SinkResource createResource() | ||
26 | { | ||
27 | auto resource = Sink::ApplicationDomain::CardDavResource::create("account1"); | ||
28 | resource.setProperty("server", "http://localhost/dav/addressbooks/user/doe"); | ||
29 | resource.setProperty("username", "doe"); | ||
30 | Sink::SecretStore::instance().insert(resource.identifier(), "doe"); | ||
31 | resource.setProperty("testmode", true); | ||
32 | return resource; | ||
33 | } | ||
34 | |||
35 | |||
36 | QByteArray mResourceInstanceIdentifier; | ||
37 | |||
38 | void createContact(const QString &firstname, const QString &lastname) | ||
39 | { | ||
40 | QUrl mainUrl(QStringLiteral("http://localhost/dav/addressbooks/user/doe")); | ||
41 | mainUrl.setUserName(QStringLiteral("doe")); | ||
42 | mainUrl.setPassword(QStringLiteral("doe")); | ||
43 | |||
44 | |||
45 | KDAV2::DavUrl davUrl(mainUrl, KDAV2::CardDav); | ||
46 | |||
47 | auto *job = new KDAV2::DavCollectionsFetchJob(davUrl); | ||
48 | job->exec(); | ||
49 | |||
50 | const auto collectionUrl = [&] { | ||
51 | for(const auto collection : job->collections()) { | ||
52 | return collection.url().url(); | ||
53 | } | ||
54 | return QUrl{}; | ||
55 | }(); | ||
56 | |||
57 | |||
58 | QUrl url{collectionUrl.toString() + "xxx.vcf"}; | ||
59 | url.setUserInfo(mainUrl.userInfo()); | ||
60 | KDAV2::DavUrl testItemUrl(url, KDAV2::CardDav); | ||
61 | 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(); | ||
62 | KDAV2::DavItem item(testItemUrl, QStringLiteral("text/vcard"), data, QString()); | ||
63 | auto createJob = new KDAV2::DavItemCreateJob(item); | ||
64 | createJob->exec(); | ||
65 | if (createJob->error()) { | ||
66 | qWarning() << createJob->errorString(); | ||
67 | } | ||
68 | } | ||
69 | |||
70 | private slots: | ||
71 | |||
72 | void initTestCase() | ||
73 | { | ||
74 | Sink::Test::initTest(); | ||
75 | auto resource = createResource(); | ||
76 | QVERIFY(!resource.identifier().isEmpty()); | ||
77 | VERIFYEXEC(Sink::Store::create(resource)); | ||
78 | mResourceInstanceIdentifier = resource.identifier(); | ||
79 | } | ||
80 | |||
81 | void cleanup() | ||
82 | { | ||
83 | VERIFYEXEC(Sink::Store::removeDataFromDisk(mResourceInstanceIdentifier)); | ||
84 | } | ||
85 | |||
86 | void init() | ||
87 | { | ||
88 | VERIFYEXEC(Sink::ResourceControl::start(mResourceInstanceIdentifier)); | ||
89 | } | ||
90 | |||
91 | void testSyncContacts() | ||
92 | { | ||
93 | createContact("john", "doe"); | ||
94 | createContact("jane", "doe"); | ||
95 | Sink::SyncScope scope; | ||
96 | scope.setType<Sink::ApplicationDomain::Contact>(); | ||
97 | scope.resourceFilter(mResourceInstanceIdentifier); | ||
98 | |||
99 | VERIFYEXEC(Sink::Store::synchronize(scope)); | ||
100 | VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier)); | ||
101 | const auto contacts = Sink::Store::read<Sink::ApplicationDomain::Contact>(Sink::Query().resourceFilter(mResourceInstanceIdentifier)); | ||
102 | QCOMPARE(contacts.size(), 2); | ||
103 | |||
104 | //Ensure a resync works | ||
105 | { | ||
106 | VERIFYEXEC(Sink::Store::synchronize(scope)); | ||
107 | VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier)); | ||
108 | const auto contacts = Sink::Store::read<Sink::ApplicationDomain::Contact>(Sink::Query().resourceFilter(mResourceInstanceIdentifier)); | ||
109 | QCOMPARE(contacts.size(), 2); | ||
110 | } | ||
111 | } | ||
112 | }; | ||
113 | |||
114 | QTEST_MAIN(CardDavTest) | ||
115 | |||
116 | #include "carddavtest.moc" | ||