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

0001 /*
0002     SPDX-FileCopyrightText: 2020 David Faure <faure@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "davcollectionsmultifetchjobtest.h"
0008 #include "fakeserver.h"
0009 
0010 #include <KDAV/DavCollectionsMultiFetchJob>
0011 
0012 #include <QSignalSpy>
0013 #include <QTest>
0014 
0015 using KDAV::DavCollection;
0016 Q_DECLARE_METATYPE(KDAV::Protocol)
0017 
0018 void DavCollectionsMultiFetchJobTest::initTestCase()
0019 {
0020     // To let ctest exit, we shouldn't start kio_http_cache_cleaner
0021     qputenv("KIO_DISABLE_CACHE_CLEANER", "yes");
0022 
0023     qRegisterMetaType<KDAV::Protocol>();
0024 }
0025 
0026 void DavCollectionsMultiFetchJobTest::runSuccessfullTest()
0027 {
0028     FakeServer fakeServer(5990);
0029     QUrl url(QStringLiteral("http://localhost/caldav"));
0030     url.setPort(fakeServer.port());
0031     KDAV::DavUrl davUrl1(url, KDAV::CalDav);
0032     QUrl url2(url);
0033     url2.setPath(QStringLiteral("/carddav"));
0034     KDAV::DavUrl davUrl2(url2, KDAV::CardDav);
0035 
0036     auto job = new KDAV::DavCollectionsMultiFetchJob({davUrl1, davUrl2});
0037 
0038     QSignalSpy spy(job, &KDAV::DavCollectionsMultiFetchJob::collectionDiscovered);
0039 
0040     fakeServer.addScenarioFromFile(QLatin1String(AUTOTEST_DATA_DIR) + QStringLiteral("/dataitemmultifetchjob-caldav.txt"));
0041     fakeServer.addScenarioFromFile(QLatin1String(AUTOTEST_DATA_DIR) + QStringLiteral("/dataitemmultifetchjob-caldav-collections.txt"));
0042     fakeServer.addScenarioFromFile(QLatin1String(AUTOTEST_DATA_DIR) + QStringLiteral("/dataitemmultifetchjob-carddav.txt"));
0043     fakeServer.addScenarioFromFile(QLatin1String(AUTOTEST_DATA_DIR) + QStringLiteral("/dataitemmultifetchjob-carddav-collections.txt"));
0044     fakeServer.startAndWait();
0045     job->exec();
0046 
0047     QVERIFY(fakeServer.isAllScenarioDone());
0048     QCOMPARE(job->error(), 0);
0049 
0050     const KDAV::DavCollection::List collections = job->collections();
0051     QCOMPARE(collections.count(), 2);
0052     int calDavIdx = 0;
0053     int cardDavIdx = 1;
0054     if (collections.at(0).contentTypes() == DavCollection::Contacts) { // put things in a defined order
0055         std::swap(calDavIdx, cardDavIdx);
0056     }
0057 
0058     const KDAV::DavCollection calendar = collections.at(calDavIdx);
0059     QCOMPARE(calendar.displayName(), QStringLiteral("Test1 User"));
0060     QCOMPARE(calendar.contentTypes(), DavCollection::Events | DavCollection::Todos | DavCollection::FreeBusy | DavCollection::Journal);
0061     QCOMPARE(calendar.url().url().path(), QStringLiteral("/caldav.php/test1.user/home/"));
0062     QCOMPARE(calendar.CTag(), QStringLiteral("12345"));
0063     QCOMPARE(calendar.privileges(), KDAV::Read);
0064 
0065     const KDAV::DavCollection addressbook = collections.at(cardDavIdx);
0066     QCOMPARE(addressbook.displayName(), QStringLiteral("My Address Book"));
0067     QCOMPARE(addressbook.contentTypes(), DavCollection::Contacts);
0068     QCOMPARE(addressbook.url().url().path(), QStringLiteral("/carddav.php/test1.user/home/"));
0069     QCOMPARE(addressbook.CTag(), QStringLiteral("3145"));
0070     QCOMPARE(addressbook.privileges(), KDAV::All);
0071 
0072     QCOMPARE(spy.count(), 2);
0073     QCOMPARE(int(spy.at(calDavIdx).at(0).value<KDAV::Protocol>()), int(KDAV::CalDav));
0074     QCOMPARE(spy.at(calDavIdx).at(1).toString(), calendar.url().url().toString());
0075     QCOMPARE(spy.at(calDavIdx).at(2).toString(), url.toString());
0076 
0077     QCOMPARE(int(spy.at(cardDavIdx).at(0).value<KDAV::Protocol>()), int(KDAV::CardDav));
0078     QCOMPARE(spy.at(cardDavIdx).at(1).toString(), addressbook.url().url().toString());
0079     QCOMPARE(spy.at(cardDavIdx).at(2).toString(), url2.toString());
0080 }
0081 
0082 void DavCollectionsMultiFetchJobTest::shouldFailOnError()
0083 {
0084     FakeServer fakeServer(5990);
0085     QUrl url(QStringLiteral("http://localhost/caldav"));
0086     url.setPort(fakeServer.port());
0087     KDAV::DavUrl davUrl1(url, KDAV::CalDav);
0088     QUrl urlError(url);
0089     urlError.setPath(QStringLiteral("/does_not_exist"));
0090     KDAV::DavUrl davUrlError(urlError, KDAV::CalDav);
0091 
0092     auto job = new KDAV::DavCollectionsMultiFetchJob({davUrl1, davUrlError});
0093 
0094     fakeServer.addScenarioFromFile(QLatin1String(AUTOTEST_DATA_DIR) + QStringLiteral("/dataitemmultifetchjob-caldav.txt"));
0095     fakeServer.addScenarioFromFile(QLatin1String(AUTOTEST_DATA_DIR) + QStringLiteral("/dataitemmultifetchjob-caldav-collections.txt"));
0096     fakeServer.addScenarioFromFile(QLatin1String(AUTOTEST_DATA_DIR) + QStringLiteral("/dataitemmultifetchjob-error.txt"));
0097     fakeServer.startAndWait();
0098     job->exec();
0099 
0100     QVERIFY(fakeServer.isAllScenarioDone());
0101     QCOMPARE(job->error(), 300);
0102 }
0103 
0104 QTEST_MAIN(DavCollectionsMultiFetchJobTest)
0105 
0106 #include "moc_davcollectionsmultifetchjobtest.cpp"