summaryrefslogtreecommitdiffstats
path: root/examples/carddavresource/tests/carddavtest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/carddavresource/tests/carddavtest.cpp')
-rw-r--r--examples/carddavresource/tests/carddavtest.cpp75
1 files changed, 55 insertions, 20 deletions
diff --git a/examples/carddavresource/tests/carddavtest.cpp b/examples/carddavresource/tests/carddavtest.cpp
index b0f41d1..1d6762d 100644
--- a/examples/carddavresource/tests/carddavtest.cpp
+++ b/examples/carddavresource/tests/carddavtest.cpp
@@ -11,6 +11,7 @@
11#include <KDAV2/DavUrl> 11#include <KDAV2/DavUrl>
12#include <KDAV2/DavItemCreateJob> 12#include <KDAV2/DavItemCreateJob>
13#include <KDAV2/DavCollectionsFetchJob> 13#include <KDAV2/DavCollectionsFetchJob>
14#include <KDAV2/DavCollectionCreateJob>
14#include <KDAV2/DavCollection> 15#include <KDAV2/DavCollection>
15#include <KContacts/Addressee> 16#include <KContacts/Addressee>
16#include <KContacts/VCardConverter> 17#include <KContacts/VCardConverter>
@@ -30,28 +31,28 @@ class CardDavTest : public QObject
30 resource.setProperty("server", "http://localhost/dav/addressbooks/user/doe"); 31 resource.setProperty("server", "http://localhost/dav/addressbooks/user/doe");
31 resource.setProperty("username", "doe"); 32 resource.setProperty("username", "doe");
32 Sink::SecretStore::instance().insert(resource.identifier(), "doe"); 33 Sink::SecretStore::instance().insert(resource.identifier(), "doe");
33 resource.setProperty("testmode", true);
34 return resource; 34 return resource;
35 } 35 }
36 36
37 37
38 QByteArray mResourceInstanceIdentifier; 38 QByteArray mResourceInstanceIdentifier;
39 39
40 void createContact(const QString &firstname, const QString &lastname) 40 void createContact(const QString &firstname, const QString &lastname, const QString &collectionName)
41 { 41 {
42 QUrl mainUrl(QStringLiteral("http://localhost/dav/addressbooks/user/doe")); 42 QUrl mainUrl(QStringLiteral("http://localhost/dav/addressbooks/user/doe"));
43 mainUrl.setUserName(QStringLiteral("doe")); 43 mainUrl.setUserName(QStringLiteral("doe"));
44 mainUrl.setPassword(QStringLiteral("doe")); 44 mainUrl.setPassword(QStringLiteral("doe"));
45 45
46
47 KDAV2::DavUrl davUrl(mainUrl, KDAV2::CardDav); 46 KDAV2::DavUrl davUrl(mainUrl, KDAV2::CardDav);
48 47
49 auto *job = new KDAV2::DavCollectionsFetchJob(davUrl); 48 auto *job = new KDAV2::DavCollectionsFetchJob(davUrl);
50 job->exec(); 49 job->exec();
51 50
52 const auto collectionUrl = [&] { 51 const auto collectionUrl = [&] {
53 if (!job->collections().isEmpty()) { 52 for (const auto &col : job->collections()) {
54 return job->collections().first().url().url(); 53 if (col.displayName() == collectionName) {
54 return col.url().url();
55 }
55 } 56 }
56 return QUrl{}; 57 return QUrl{};
57 }(); 58 }();
@@ -69,11 +70,33 @@ class CardDavTest : public QObject
69 } 70 }
70 } 71 }
71 72
73 void createCollection(const QString &name)
74 {
75 QUrl mainUrl(QStringLiteral("http://localhost/dav/addressbooks/user/doe/") + name);
76 mainUrl.setUserName(QStringLiteral("doe"));
77 mainUrl.setPassword(QStringLiteral("doe"));
78
79 KDAV2::DavUrl davUrl(mainUrl, KDAV2::CardDav);
80 KDAV2::DavCollection collection{davUrl, name, KDAV2::DavCollection::Contacts};
81
82 auto createJob = new KDAV2::DavCollectionCreateJob(collection);
83 createJob->exec();
84 if (createJob->error()) {
85 qWarning() << createJob->errorString();
86 }
87 }
88
89 void resetTestEnvironment()
90 {
91 system("resetmailbox.sh");
92 }
93
72private slots: 94private slots:
73 95
74 void initTestCase() 96 void initTestCase()
75 { 97 {
76 Sink::Test::initTest(); 98 Sink::Test::initTest();
99 resetTestEnvironment();
77 auto resource = createResource(); 100 auto resource = createResource();
78 QVERIFY(!resource.identifier().isEmpty()); 101 QVERIFY(!resource.identifier().isEmpty());
79 VERIFYEXEC(Sink::Store::create(resource)); 102 VERIFYEXEC(Sink::Store::create(resource));
@@ -90,10 +113,25 @@ private slots:
90 VERIFYEXEC(Sink::ResourceControl::start(mResourceInstanceIdentifier)); 113 VERIFYEXEC(Sink::ResourceControl::start(mResourceInstanceIdentifier));
91 } 114 }
92 115
116 void testSyncAddressbooks()
117 {
118 createCollection("addressbook2");
119
120 Sink::SyncScope scope;
121 scope.setType<Addressbook>();
122 scope.resourceFilter(mResourceInstanceIdentifier);
123
124 VERIFYEXEC(Sink::Store::synchronize(scope));
125 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
126 const auto addressbooks = Sink::Store::read<Addressbook>(Sink::Query().resourceFilter(mResourceInstanceIdentifier));
127 QCOMPARE(addressbooks.size(), 2);
128 }
129
93 void testSyncContacts() 130 void testSyncContacts()
94 { 131 {
95 createContact("john", "doe"); 132 createContact("john", "doe", "personal");
96 createContact("jane", "doe"); 133 createContact("jane", "doe", "personal");
134 createContact("fred", "durst", "addressbook2");
97 Sink::SyncScope scope; 135 Sink::SyncScope scope;
98 scope.setType<Sink::ApplicationDomain::Contact>(); 136 scope.setType<Sink::ApplicationDomain::Contact>();
99 scope.resourceFilter(mResourceInstanceIdentifier); 137 scope.resourceFilter(mResourceInstanceIdentifier);
@@ -101,27 +139,24 @@ private slots:
101 VERIFYEXEC(Sink::Store::synchronize(scope)); 139 VERIFYEXEC(Sink::Store::synchronize(scope));
102 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier)); 140 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
103 const auto contacts = Sink::Store::read<Sink::ApplicationDomain::Contact>(Sink::Query().resourceFilter(mResourceInstanceIdentifier)); 141 const auto contacts = Sink::Store::read<Sink::ApplicationDomain::Contact>(Sink::Query().resourceFilter(mResourceInstanceIdentifier));
104 QCOMPARE(contacts.size(), 2); 142 QCOMPARE(contacts.size(), 3);
105 143
106 //Ensure a resync works 144 //Ensure a resync works
107 { 145 {
108 VERIFYEXEC(Sink::Store::synchronize(scope)); 146 VERIFYEXEC(Sink::Store::synchronize(scope));
109 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier)); 147 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
110 const auto contacts = Sink::Store::read<Sink::ApplicationDomain::Contact>(Sink::Query().resourceFilter(mResourceInstanceIdentifier)); 148 const auto contacts = Sink::Store::read<Sink::ApplicationDomain::Contact>(Sink::Query().resourceFilter(mResourceInstanceIdentifier));
111 QCOMPARE(contacts.size(), 2); 149 QCOMPARE(contacts.size(), 3);
112 } 150 }
113 }
114 151
115 void testSyncAddressbooks() 152 //Ensure a resync after another creation works
116 { 153 createContact("alf", "alf", "addressbook2");
117 Sink::SyncScope scope; 154 {
118 scope.setType<Addressbook>(); 155 VERIFYEXEC(Sink::Store::synchronize(scope));
119 scope.resourceFilter(mResourceInstanceIdentifier); 156 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier));
120 157 const auto contacts = Sink::Store::read<Sink::ApplicationDomain::Contact>(Sink::Query().resourceFilter(mResourceInstanceIdentifier));
121 VERIFYEXEC(Sink::Store::synchronize(scope)); 158 QCOMPARE(contacts.size(), 4);
122 VERIFYEXEC(Sink::ResourceControl::flushMessageQueue(mResourceInstanceIdentifier)); 159 }
123 const auto addressbooks = Sink::Store::read<Addressbook>(Sink::Query().resourceFilter(mResourceInstanceIdentifier));
124 QCOMPARE(addressbooks.size(), 1);
125 } 160 }
126 161
127 void testAddContact() 162 void testAddContact()