1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
#include <QtTest>
#include "common/resourcecontrol.h"
#include "common/secretstore.h"
#include "common/store.h"
#include "common/test.h"
#include "tests/testutils.h"
#include <KDAV2/DavItem>
#include <KDAV2/DavUrl>
#include <KDAV2/DavItemCreateJob>
#include <KDAV2/DavCollectionsFetchJob>
#include <KDAV2/DavCollection>
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<Sink::ApplicationDomain::Contact>();
scope.resourceFilter(mResourceInstanceIdentifier);
VERIFYEXEC(Sink::Store::synchronize(scope));
VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
const auto contacts = Sink::Store::read<Sink::ApplicationDomain::Contact>(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::ApplicationDomain::Contact>(Sink::Query().resourceFilter(mResourceInstanceIdentifier));
QCOMPARE(contacts.size(), 2);
}
}
};
QTEST_MAIN(CardDavTest)
#include "carddavtest.moc"
|