File indexing completed on 2024-04-21 03:53:54

0001 /*
0002     SPDX-FileCopyrightText: 2016 Sandro Knauß <sknauss@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include <KDAV/DavCollectionDeleteJob>
0008 #include <KDAV/DavCollectionModifyJob>
0009 #include <KDAV/DavCollectionsFetchJob>
0010 #include <KDAV/DavItemCreateJob>
0011 #include <KDAV/DavItemDeleteJob>
0012 #include <KDAV/DavItemFetchJob>
0013 #include <KDAV/DavItemModifyJob>
0014 #include <KDAV/DavItemsFetchJob>
0015 #include <KDAV/DavItemsListJob>
0016 #include <KDAV/EtagCache>
0017 
0018 #include <QCoreApplication>
0019 #include <QDebug>
0020 #include <QStringList>
0021 
0022 int main(int argc, char **argv)
0023 {
0024     QCoreApplication app(argc, argv);
0025 
0026     QUrl mainUrl(QStringLiteral("https://apps.kolabnow.com/addressbooks/test1%40kolab.org"));
0027     mainUrl.setUserName(QStringLiteral("test1@kolab.org"));
0028     mainUrl.setPassword(QStringLiteral("Welcome2KolabSystems"));
0029     KDAV::DavUrl davUrl(mainUrl, KDAV::CardDav);
0030 
0031     auto *job = new KDAV::DavCollectionsFetchJob(davUrl);
0032     job->exec();
0033 
0034     const auto collections = job->collections();
0035     for (const auto &collection : collections) {
0036         qDebug() << collection.displayName() << "PRIVS: " << collection.privileges();
0037         auto collectionUrl = collection.url();
0038         std::shared_ptr<KDAV::EtagCache> cache(new KDAV::EtagCache());
0039         int anz = -1;
0040         // Get all items in a collection add them to cache and make sure, that afterward no item is changed
0041         {
0042             auto itemListJob = new KDAV::DavItemsListJob(collectionUrl, cache);
0043             itemListJob->exec();
0044             anz = itemListJob->items().size();
0045             qDebug() << "items:" << itemListJob->items().size();
0046             qDebug() << "changed Items:" << itemListJob->changedItems().size();
0047             qDebug() << "deleted Items:" << itemListJob->deletedItems();
0048             const auto changedItems = itemListJob->changedItems();
0049             for (const auto &item : changedItems) {
0050                 qDebug() << item.url().url() << item.contentType() << item.data();
0051                 auto itemFetchJob = new KDAV::DavItemFetchJob(item);
0052                 itemFetchJob->exec();
0053                 const auto fetchedItem = itemFetchJob->item();
0054                 qDebug() << fetchedItem.contentType() << fetchedItem.data();
0055 
0056                 auto itemsFetchJob = new KDAV::DavItemsFetchJob(collectionUrl, QStringList() << item.url().toDisplayString());
0057                 itemsFetchJob->exec();
0058                 if (itemsFetchJob->item(item.url().toDisplayString()).contentType() != fetchedItem.contentType()) { // itemsfetchjob do not get contentType
0059                     qDebug() << "Fetched same item but got different contentType:" << itemsFetchJob->item(item.url().toDisplayString()).contentType();
0060                 }
0061 
0062                 if (itemsFetchJob->item(item.url().toDisplayString()).data() != fetchedItem.data()) {
0063                     qDebug() << "Fetched same item but got different data:" << itemsFetchJob->item(item.url().toDisplayString()).data();
0064                 }
0065 
0066                 cache->setEtag(item.url().toDisplayString(), item.etag());
0067             }
0068             cache->setEtag(QStringLiteral("invalid"), QStringLiteral("invalid"));
0069         }
0070         {
0071             qDebug() << "second run: (should be empty).";
0072             auto itemListJob = new KDAV::DavItemsListJob(collectionUrl, cache);
0073             itemListJob->exec();
0074             if (itemListJob->items().size() != anz) {
0075                 qDebug() << "Items have added/deleted on server.";
0076             }
0077             if (itemListJob->changedItems().size() != 0) {
0078                 qDebug() << "Items have changed on server.";
0079             }
0080             if (itemListJob->deletedItems() != QStringList() << QStringLiteral("invalid")) {
0081                 qDebug() << "more items deleted:" << itemListJob->deletedItems();
0082             }
0083         }
0084     }
0085 
0086     {
0087         QUrl url(QStringLiteral("https://apps.kolabnow.com/addressbooks/test1%40kolab.org/cbbf386d-7e9b-4e72-947d-0b813ea9b347/"));
0088         url.setUserInfo(mainUrl.userInfo());
0089         KDAV::DavUrl collectionUrl(url, KDAV::CardDav);
0090         auto collectionDeleteJob = new KDAV::DavCollectionDeleteJob(collectionUrl);
0091         collectionDeleteJob->exec();
0092         if (collectionDeleteJob->error()) {
0093             qDebug() << collectionDeleteJob->errorString();
0094         }
0095     }
0096 
0097     {
0098         QUrl url(QStringLiteral("https://apps.kolabnow.com/addressbooks/test1%40kolab.org/9290e784-c876-412f-8385-be292d64b2c6/"));
0099         url.setUserInfo(mainUrl.userInfo());
0100         KDAV::DavUrl testCollectionUrl(url, KDAV::CardDav);
0101         auto collectionModifyJob = new KDAV::DavCollectionModifyJob(testCollectionUrl);
0102         collectionModifyJob->setProperty(QStringLiteral("displayname"), QStringLiteral("test234"));
0103         collectionModifyJob->exec();
0104         if (collectionModifyJob->error()) {
0105             qDebug() << collectionModifyJob->errorString();
0106         }
0107     }
0108 
0109     // create element with "wrong put url" test if we get the correct url back
0110     {
0111         QUrl url(QStringLiteral("https://apps.kolabnow.com/addressbooks/test1%40kolab.org/9290e784-c876-412f-8385-be292d64b2c6/xxx.vcf"));
0112         url.setUserInfo(mainUrl.userInfo());
0113         KDAV::DavUrl testItemUrl(url, KDAV::CardDav);
0114         QByteArray data =
0115             "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Kolab//iRony DAV Server 0.3.1//Sabre//Sabre VObject "
0116             "2.1.7//EN\r\nUID:12345678-1234-1234-1234-123456789abc\r\nFN:John "
0117             "Doe\r\nN:Doe;John;;;\r\nEMAIL;TYPE=INTERNET;TYPE=HOME:john.doe@example.com\r\nREV;VALUE=DATE-TIME:20161221T145611Z\r\nEND:VCARD\r\n";
0118         KDAV::DavItem item(testItemUrl, QStringLiteral("text/x-vcard"), data, QString());
0119         auto createJob = new KDAV::DavItemCreateJob(item);
0120         createJob->exec();
0121         if (createJob->error()) {
0122             qDebug() << createJob->errorString();
0123         }
0124         if (createJob->item().url().toDisplayString()
0125             != QLatin1String(
0126                 "https://apps.kolabnow.com/addressbooks/test1%40kolab.org/9290e784-c876-412f-8385-be292d64b2c6/12345678-1234-1234-1234-123456789abc.vcf")) {
0127             qDebug() << "unexpected url" << createJob->item().url().url();
0128         }
0129     }
0130 
0131     {
0132         QUrl url(QStringLiteral(
0133             "https://apps.kolabnow.com/addressbooks/test1%40kolab.org/9290e784-c876-412f-8385-be292d64b2c6/12345678-1234-1234-1234-123456789abc.vcf"));
0134         url.setUserInfo(mainUrl.userInfo());
0135         KDAV::DavUrl testItemUrl(url, KDAV::CardDav);
0136         QByteArray data =
0137             "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Kolab//iRony DAV Server 0.3.1//Sabre//Sabre VObject "
0138             "2.1.7//EN\r\nUID:12345678-1234-1234-1234-123456789abc\r\nFN:John2 "
0139             "Doe\r\nN:Doe;John2;;;\r\nEMAIL;TYPE=INTERNET;TYPE=HOME:john2.doe@example.com\r\nREV;VALUE=DATE-TIME:20161221T145611Z\r\nEND:VCARD\r\n";
0140         KDAV::DavItem item(testItemUrl, QStringLiteral("text/x-vcard"), data, QString());
0141         auto modifyJob = new KDAV::DavItemModifyJob(item);
0142         modifyJob->exec();
0143         if (modifyJob->error()) {
0144             qDebug() << modifyJob->errorString();
0145         }
0146     }
0147 
0148     {
0149         QUrl url(QStringLiteral(
0150             "https://apps.kolabnow.com/addressbooks/test1%40kolab.org/9290e784-c876-412f-8385-be292d64b2c6/12345678-1234-1234-1234-123456789abc.vcf"));
0151         url.setUserInfo(mainUrl.userInfo());
0152         KDAV::DavUrl testItemUrl(url, KDAV::CardDav);
0153         QByteArray data =
0154             "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Kolab//iRony DAV Server 0.3.1//Sabre//Sabre VObject "
0155             "2.1.7//EN\r\nUID:12345678-1234-1234-1234-123456789abc\r\nFN:John2 "
0156             "Doe\r\nN:Doe;John2;;;\r\nEMAIL;TYPE=INTERNET;TYPE=HOME:john2.doe@example.com\r\nREV;VALUE=DATE-TIME:20161221T145611Z\r\nEND:VCARD\r\n";
0157         KDAV::DavItem item(testItemUrl, QStringLiteral("text/x-vcard"), data, QString());
0158         auto deleteJob = new KDAV::DavItemDeleteJob(item);
0159         deleteJob->exec();
0160         if (deleteJob->error()) {
0161             qDebug() << deleteJob->errorString();
0162         }
0163     }
0164 }