Warning, file /frameworks/kcontacts/autotests/calendarurltest.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 This file is part of the KContacts framework. 0003 SPDX-FileCopyrightText: 2015-2019 Laurent Montel <montel@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "calendarurltest.h" 0009 #include "parametermap_p.h" 0010 0011 #include "calendarurl.h" 0012 #include "vcardtool_p.h" 0013 #include <QTest> 0014 0015 using namespace KContacts; 0016 Q_DECLARE_METATYPE(KContacts::CalendarUrl::CalendarType) 0017 CalendarUrlTest::CalendarUrlTest(QObject *parent) 0018 : QObject(parent) 0019 { 0020 } 0021 0022 CalendarUrlTest::~CalendarUrlTest() 0023 { 0024 } 0025 0026 void CalendarUrlTest::shouldHaveDefaultValue() 0027 { 0028 CalendarUrl calendarUrl(CalendarUrl::FBUrl); 0029 QVERIFY(!calendarUrl.isValid()); 0030 QVERIFY(calendarUrl.url().isEmpty()); 0031 QVERIFY(calendarUrl.params().empty()); 0032 } 0033 0034 void CalendarUrlTest::shouldAssignValue() 0035 { 0036 KContacts::ParameterMap params; 0037 params.push_back({QStringLiteral("Foo1"), {QStringLiteral("bla1"), QStringLiteral("blo1")}}); 0038 params.push_back({QStringLiteral("Foo2"), {QStringLiteral("bla2"), QStringLiteral("blo2")}}); 0039 CalendarUrl calendarUrl(CalendarUrl::FBUrl); 0040 calendarUrl.setParams(params); 0041 QVERIFY(!calendarUrl.isValid()); 0042 QCOMPARE(calendarUrl.type(), CalendarUrl::FBUrl); 0043 QVERIFY(calendarUrl.url().isEmpty()); 0044 QVERIFY(!calendarUrl.params().empty()); 0045 QCOMPARE(calendarUrl.params(), params); 0046 } 0047 0048 void CalendarUrlTest::shouldAssignExternal() 0049 { 0050 CalendarUrl calendarUrl(CalendarUrl::FBUrl); 0051 const CalendarUrl::CalendarType type = CalendarUrl::CALUri; 0052 calendarUrl.setType(type); 0053 QVERIFY(calendarUrl.url().isEmpty()); 0054 QCOMPARE(calendarUrl.type(), type); 0055 } 0056 0057 void CalendarUrlTest::shouldSerialized() 0058 { 0059 for (int i = 0; i < CalendarUrl::EndCalendarType; ++i) { 0060 CalendarUrl calendarUrl; 0061 CalendarUrl result; 0062 CalendarUrl::CalendarType type = static_cast<CalendarUrl::CalendarType>(i); 0063 calendarUrl.setType(type); 0064 KContacts::ParameterMap params; 0065 params.push_back({QStringLiteral("Foo1"), {QStringLiteral("bla1"), QStringLiteral("blo1")}}); 0066 params.push_back({QStringLiteral("Foo2"), {QStringLiteral("bla2"), QStringLiteral("blo2")}}); 0067 calendarUrl.setParams(params); 0068 calendarUrl.setUrl(QUrl(QStringLiteral("mailto:foo@kde.org"))); 0069 0070 QByteArray data; 0071 QDataStream s(&data, QIODevice::WriteOnly); 0072 s << calendarUrl; 0073 0074 QDataStream t(&data, QIODevice::ReadOnly); 0075 t >> result; 0076 0077 QVERIFY(calendarUrl == result); 0078 } 0079 } 0080 0081 void CalendarUrlTest::shouldEqualCalendarUrl() 0082 { 0083 for (int i = 0; i < CalendarUrl::EndCalendarType; ++i) { 0084 CalendarUrl calendarUrl; 0085 CalendarUrl result; 0086 CalendarUrl::CalendarType type = static_cast<CalendarUrl::CalendarType>(i); 0087 calendarUrl.setType(type); 0088 KContacts::ParameterMap params; 0089 params.push_back({QStringLiteral("Foo1"), {QStringLiteral("bla1"), QStringLiteral("blo1")}}); 0090 params.push_back({QStringLiteral("Foo2"), {QStringLiteral("bla2"), QStringLiteral("blo2")}}); 0091 calendarUrl.setUrl(QUrl(QStringLiteral("mailto:foo@kde.org"))); 0092 calendarUrl.setParams(params); 0093 0094 result = calendarUrl; 0095 QVERIFY(calendarUrl == result); 0096 } 0097 } 0098 0099 void CalendarUrlTest::shouldParseCalendarUrl() 0100 { 0101 for (int i = CalendarUrl::Unknown + 1; i < CalendarUrl::EndCalendarType; ++i) { 0102 CalendarUrl::CalendarType type = static_cast<CalendarUrl::CalendarType>(i); 0103 QByteArray baType; 0104 switch (type) { 0105 case CalendarUrl::Unknown: 0106 case CalendarUrl::EndCalendarType: 0107 break; 0108 case CalendarUrl::FBUrl: 0109 baType = QByteArray("FBURL"); 0110 break; 0111 case CalendarUrl::CALUri: 0112 baType = QByteArray("CALURI"); 0113 break; 0114 case CalendarUrl::CALADRUri: 0115 baType = QByteArray("CALADRURI"); 0116 break; 0117 } 0118 0119 QByteArray vcarddata( 0120 "BEGIN:VCARD\n" 0121 "VERSION:3.0\n" 0122 "N:LastName;FirstName;;;\n" 0123 "UID:c80cf296-0825-4eb0-ab16-1fac1d522a33@xxxxxx.xx\n"); 0124 vcarddata += baType; 0125 vcarddata += QByteArray( 0126 ";PREF=1:https://sherlockholmes.com/calendar/sherlockholmes\n" 0127 "REV:2015-03-14T09:24:45+00:00\n" 0128 "FN:FirstName LastName\n" 0129 "END:VCARD\n"); 0130 0131 KContacts::VCardTool vcard; 0132 const KContacts::AddresseeList lst = vcard.parseVCards(vcarddata); 0133 QCOMPARE(lst.count(), 1); 0134 QCOMPARE(lst.at(0).calendarUrlList().count(), 1); 0135 const CalendarUrl calurl = lst.at(0).calendarUrlList().at(0); 0136 QCOMPARE(calurl.type(), type); 0137 QCOMPARE(calurl.url(), QUrl(QStringLiteral("https://sherlockholmes.com/calendar/sherlockholmes"))); 0138 QVERIFY(!calurl.params().empty()); 0139 } 0140 } 0141 0142 void CalendarUrlTest::shouldGenerateVCard_data() 0143 { 0144 QTest::addColumn<KContacts::CalendarUrl::CalendarType>("type"); 0145 QTest::addColumn<QByteArray>("value"); 0146 for (int i = CalendarUrl::Unknown + 1; i < CalendarUrl::EndCalendarType; ++i) { 0147 KContacts::CalendarUrl::CalendarType type = static_cast<KContacts::CalendarUrl::CalendarType>(i); 0148 QByteArray baType; 0149 switch (type) { 0150 case CalendarUrl::Unknown: 0151 case CalendarUrl::EndCalendarType: 0152 break; 0153 case CalendarUrl::FBUrl: 0154 baType = QByteArray("FBURL"); 0155 break; 0156 case CalendarUrl::CALUri: 0157 baType = QByteArray("CALURI"); 0158 break; 0159 case CalendarUrl::CALADRUri: 0160 baType = QByteArray("CALADRURI"); 0161 break; 0162 } 0163 QTest::newRow(baType.constData()) << type << baType; 0164 } 0165 } 0166 0167 void CalendarUrlTest::shouldGenerateVCard() 0168 { 0169 QFETCH(KContacts::CalendarUrl::CalendarType, type); 0170 QFETCH(QByteArray, value); 0171 0172 KContacts::AddresseeList lst; 0173 KContacts::Addressee addr; 0174 addr.setEmails(QStringList() << QStringLiteral("foo@kde.org")); 0175 addr.setUid(QStringLiteral("testuid")); 0176 CalendarUrl url; 0177 url.setType(type); 0178 url.setUrl(QUrl(QStringLiteral("https://sherlockholmes.com/calendar/sherlockholmes"))); 0179 addr.insertCalendarUrl(url); 0180 lst << addr; 0181 KContacts::VCardTool vcard; 0182 const QByteArray ba = vcard.exportVCards(lst, KContacts::VCard::v4_0); 0183 QByteArray expected; 0184 // Different order 0185 if (type == KContacts::CalendarUrl::FBUrl) { 0186 expected = QByteArray( 0187 "BEGIN:VCARD\r\n" 0188 "VERSION:4.0\r\n" 0189 "EMAIL:foo@kde.org\r\n"); 0190 expected += value 0191 + QByteArray( 0192 ":https://sherlockholmes.com/calendar/sherlockholmes\r\n" 0193 "N:;;;;\r\n" 0194 "UID:testuid\r\n" 0195 "END:VCARD\r\n\r\n"); 0196 } else { 0197 expected = QByteArray( 0198 "BEGIN:VCARD\r\n" 0199 "VERSION:4.0\r\n"); 0200 expected += value 0201 + QByteArray( 0202 ":https://sherlockholmes.com/calendar/sherlockholmes\r\n" 0203 "EMAIL:foo@kde.org\r\n" 0204 "N:;;;;\r\n" 0205 "UID:testuid\r\n" 0206 "END:VCARD\r\n\r\n"); 0207 } 0208 0209 QCOMPARE(ba, expected); 0210 } 0211 0212 void CalendarUrlTest::shouldGenerateVCardWithParameter() 0213 { 0214 KContacts::AddresseeList lst; 0215 KContacts::Addressee addr; 0216 addr.setEmails(QStringList() << QStringLiteral("foo@kde.org")); 0217 addr.setUid(QStringLiteral("testuid")); 0218 CalendarUrl url; 0219 url.setType(CalendarUrl::CALUri); 0220 url.setUrl(QUrl(QStringLiteral("https://sherlockholmes.com/calendar/sherlockholmes"))); 0221 KContacts::ParameterMap params; 0222 params.push_back({QStringLiteral("Foo2"), {QStringLiteral("bla2"), QStringLiteral("blo2")}}); 0223 url.setParams(params); 0224 addr.insertCalendarUrl(url); 0225 lst << addr; 0226 KContacts::VCardTool vcard; 0227 const QByteArray ba = vcard.exportVCards(lst, KContacts::VCard::v4_0); 0228 QByteArray expected = QByteArray( 0229 "BEGIN:VCARD\r\n" 0230 "VERSION:4.0\r\n" 0231 "CALURI;FOO2=bla2,blo2:https://sherlockholmes.com/calendar/sherlockholmes\r\n" 0232 "EMAIL:foo@kde.org\r\n" 0233 "N:;;;;\r\n" 0234 "UID:testuid\r\n" 0235 "END:VCARD\r\n\r\n"); 0236 QCOMPARE(ba, expected); 0237 } 0238 0239 void CalendarUrlTest::shouldNotGeneratedAttributeForVcard3() 0240 { 0241 KContacts::AddresseeList lst; 0242 KContacts::Addressee addr; 0243 addr.setEmails(QStringList() << QStringLiteral("foo@kde.org")); 0244 addr.setUid(QStringLiteral("testuid")); 0245 CalendarUrl url; 0246 url.setType(CalendarUrl::CALUri); 0247 url.setUrl(QUrl(QStringLiteral("https://sherlockholmes.com/calendar/sherlockholmes"))); 0248 KContacts::ParameterMap params; 0249 params.push_back({QStringLiteral("Foo2"), {QStringLiteral("bla2"), QStringLiteral("blo2")}}); 0250 url.setParams(params); 0251 addr.insertCalendarUrl(url); 0252 lst << addr; 0253 KContacts::VCardTool vcard; 0254 const QByteArray ba = vcard.exportVCards(lst, KContacts::VCard::v3_0); 0255 QByteArray expected = QByteArray( 0256 "BEGIN:VCARD\r\n" 0257 "VERSION:3.0\r\n" 0258 "EMAIL:foo@kde.org\r\n" 0259 "N:;;;;\r\n" 0260 "UID:testuid\r\n" 0261 "END:VCARD\r\n\r\n"); 0262 QCOMPARE(ba, expected); 0263 } 0264 0265 void CalendarUrlTest::shouldGenerateMultiCalendarUrl() 0266 { 0267 KContacts::AddresseeList lst; 0268 KContacts::Addressee addr; 0269 addr.setEmails(QStringList() << QStringLiteral("foo@kde.org")); 0270 addr.setUid(QStringLiteral("testuid")); 0271 CalendarUrl url; 0272 url.setType(CalendarUrl::CALUri); 0273 url.setUrl(QUrl(QStringLiteral("https://sherlockholmes.com/calendar/sherlockholmes"))); 0274 KContacts::ParameterMap params; 0275 params.push_back({QStringLiteral("Foo2"), {QStringLiteral("bla2"), QStringLiteral("blo2")}}); 0276 url.setParams(params); 0277 addr.insertCalendarUrl(url); 0278 0279 url.setType(CalendarUrl::FBUrl); 0280 url.setUrl(QUrl(QStringLiteral("https://sherlockholmes.com/calendar/sherlockholmes2"))); 0281 params.clear(); 0282 0283 params.push_back({QStringLiteral("Foo1"), {QStringLiteral("bla1"), QStringLiteral("blo1")}}); 0284 url.setParams(params); 0285 addr.insertCalendarUrl(url); 0286 0287 lst << addr; 0288 KContacts::VCardTool vcard; 0289 const QByteArray ba = vcard.exportVCards(lst, KContacts::VCard::v4_0); 0290 QByteArray expected = QByteArray( 0291 "BEGIN:VCARD\r\n" 0292 "VERSION:4.0\r\n" 0293 "CALURI;FOO2=bla2,blo2:https://sherlockholmes.com/calendar/sherlockholmes\r\n" 0294 "EMAIL:foo@kde.org\r\n" 0295 "FBURL;FOO1=bla1,blo1:https://sherlockholmes.com/calendar/sherlockholmes2\r\n" 0296 "N:;;;;\r\n" 0297 "UID:testuid\r\n" 0298 "END:VCARD\r\n\r\n"); 0299 QCOMPARE(ba, expected); 0300 } 0301 0302 QTEST_MAIN(CalendarUrlTest)