File indexing completed on 2024-04-14 14:18:55

0001 /*
0002     This file is part of libkabc.
0003     SPDX-FileCopyrightText: 2015-2019 Laurent Montel <montel@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "ldifconvertertest.h"
0009 #include "converter/ldifconverter.h"
0010 #include <QTest>
0011 using namespace KContacts;
0012 
0013 LDifConverterTest::LDifConverterTest(QObject *parent)
0014     : QObject(parent)
0015 {
0016 }
0017 
0018 LDifConverterTest::~LDifConverterTest()
0019 {
0020 }
0021 
0022 void LDifConverterTest::shouldImportEmail()
0023 {
0024     QString str = QStringLiteral(
0025         "dn: cn=laurent,mail=foo@kde.org\n"
0026         "sn: laurent\n"
0027         "cn: laurent\n"
0028         "uid: d1d5cdd4-7d5d-484b-828d-58864d8efe74\n"
0029         "mail: foo@kde.org\n"
0030         "objectclass: top_n"
0031         "objectclass: person\n"
0032         "objectclass: organizationalPerson");
0033     AddresseeList lst;
0034     ContactGroup::List contactGroup;
0035     bool result = LDIFConverter::LDIFToAddressee(str, lst, contactGroup);
0036     QVERIFY(result);
0037     QCOMPARE(lst.count(), 1);
0038     QCOMPARE(lst.at(0).emails().count(), 1);
0039     QCOMPARE(lst.at(0).emails().at(0), QStringLiteral("foo@kde.org"));
0040     QCOMPARE(contactGroup.count(), 0);
0041 }
0042 
0043 void LDifConverterTest::shouldImportMultiEmails()
0044 {
0045     QString str = QStringLiteral(
0046         "dn: cn=laurent,mail=foo@kde.org\n"
0047         "sn: laurent\n"
0048         "cn: laurent\n"
0049         "uid: d1d5cdd4-7d5d-484b-828d-58864d8efe74\n"
0050         "mail: foo@kde.org\n"
0051         "mail: foo2@kde.org\n"
0052         "objectclass: top_n"
0053         "objectclass: person\n"
0054         "objectclass: organizationalPerson");
0055     AddresseeList lst;
0056     ContactGroup::List contactGroup;
0057     bool result = LDIFConverter::LDIFToAddressee(str, lst, contactGroup);
0058     QVERIFY(result);
0059     QCOMPARE(lst.count(), 1);
0060     QCOMPARE(lst.at(0).emails().count(), 2);
0061     QCOMPARE(lst.at(0).emails().at(0), QStringLiteral("foo@kde.org"));
0062     QCOMPARE(lst.at(0).emails().at(1), QStringLiteral("foo2@kde.org"));
0063     QCOMPARE(contactGroup.count(), 0);
0064 }
0065 
0066 void LDifConverterTest::shouldImportStandardBirthday()
0067 {
0068     QString str = QStringLiteral(
0069         "dn: cn=laurent,mail=foo@kde.org\n"
0070         "sn: laurent\n"
0071         "cn: laurent\n"
0072         "uid: d1d5cdd4-7d5d-484b-828d-58864d8efe74\n"
0073         "birthyear: 2015\n"
0074         "birthmonth: 3\n"
0075         "birthday: 19\n"
0076         "mail: foo@kde.org\n"
0077         "objectclass: top_n"
0078         "objectclass: person\n"
0079         "objectclass: organizationalPerson");
0080     AddresseeList lst;
0081     ContactGroup::List contactGroup;
0082     bool result = LDIFConverter::LDIFToAddressee(str, lst, contactGroup);
0083     QVERIFY(result);
0084     QCOMPARE(lst.count(), 1);
0085     QVERIFY(lst.at(0).birthday().date().isValid());
0086     QCOMPARE(lst.at(0).birthday().date(), QDate(2015, 3, 19));
0087     QVERIFY(!lst.at(0).birthdayHasTime());
0088     QCOMPARE(contactGroup.count(), 0);
0089 }
0090 
0091 void LDifConverterTest::shouldImportStandardBirthdayWithoutYear()
0092 {
0093     QString str = QStringLiteral(
0094         "dn: cn=laurent,mail=foo@kde.org\n"
0095         "sn: laurent\n"
0096         "cn: laurent\n"
0097         "uid: d1d5cdd4-7d5d-484b-828d-58864d8efe74\n"
0098         "birthmonth: 3\n"
0099         "birthday: 19\n"
0100         "mail: foo@kde.org\n"
0101         "objectclass: top_n"
0102         "objectclass: person\n"
0103         "objectclass: organizationalPerson");
0104     AddresseeList lst;
0105     ContactGroup::List contactGroup;
0106     bool result = LDIFConverter::LDIFToAddressee(str, lst, contactGroup);
0107     QVERIFY(result);
0108     QCOMPARE(lst.count(), 1);
0109     QVERIFY(lst.at(0).birthday().date().isValid());
0110     QCOMPARE(lst.at(0).birthday().date(), QDate(-1, 3, 19));
0111     QVERIFY(!lst.at(0).birthdayHasTime());
0112     QCOMPARE(contactGroup.count(), 0);
0113 }
0114 
0115 void LDifConverterTest::shouldImportTheBatsBirthday()
0116 {
0117     QString str = QStringLiteral(
0118         "dn: cn=laurent,mail=foo@kde.org\n"
0119         "sn: laurent\n"
0120         "cn: laurent\n"
0121         "uid: d1d5cdd4-7d5d-484b-828d-58864d8efe74\n"
0122         "xbatBirthday: 20150319\n"
0123         "mail: foo@kde.org\n"
0124         "objectclass: top_n"
0125         "objectclass: person\n"
0126         "objectclass: organizationalPerson");
0127     AddresseeList lst;
0128     ContactGroup::List contactGroup;
0129     bool result = LDIFConverter::LDIFToAddressee(str, lst, contactGroup);
0130     QVERIFY(result);
0131     QCOMPARE(lst.count(), 1);
0132     QVERIFY(lst.at(0).birthday().date().isValid());
0133     QCOMPARE(lst.at(0).birthday().date(), QDate(2015, 3, 19));
0134     QVERIFY(!lst.at(0).birthdayHasTime());
0135     QCOMPARE(contactGroup.count(), 0);
0136 }
0137 
0138 void LDifConverterTest::shouldImportTheBatsEmails()
0139 {
0140     QString str = QStringLiteral(
0141         "dn: cn=laurent,mail=foo@kde.org\n"
0142         "sn: laurent\n"
0143         "cn: laurent\n"
0144         "uid: d1d5cdd4-7d5d-484b-828d-58864d8efe74\n"
0145         "mail: foo@kde.org\n"
0146         "othermailbox: foo2@kde.org\n"
0147         "othermailbox: foo3@kde.org\n"
0148         "objectclass: top_n"
0149         "objectclass: person\n"
0150         "objectclass: organizationalPerson");
0151     AddresseeList lst;
0152     ContactGroup::List contactGroup;
0153     bool result = LDIFConverter::LDIFToAddressee(str, lst, contactGroup);
0154     QVERIFY(result);
0155     QCOMPARE(lst.count(), 1);
0156     QCOMPARE(lst.at(0).emails().count(), 3);
0157     QCOMPARE(lst.at(0).emails().at(0), QStringLiteral("foo@kde.org"));
0158     QCOMPARE(lst.at(0).emails().at(1), QStringLiteral("foo2@kde.org"));
0159     QCOMPARE(lst.at(0).emails().at(2), QStringLiteral("foo3@kde.org"));
0160     QCOMPARE(contactGroup.count(), 0);
0161 }
0162 
0163 void LDifConverterTest::shouldImportTitle()
0164 {
0165     QString str = QStringLiteral(
0166         "dn: cn=laurent,mail=foo@kde.org\n"
0167         "sn: laurent\n"
0168         "cn: laurent\n"
0169         "uid: d1d5cdd4-7d5d-484b-828d-58864d8efe74\n"
0170         "title: foo\n"
0171         "mail: foo@kde.org\n"
0172         "objectclass: top_n"
0173         "objectclass: person\n"
0174         "objectclass: organizationalPerson");
0175     AddresseeList lst;
0176     ContactGroup::List contactGroup;
0177     bool result = LDIFConverter::LDIFToAddressee(str, lst, contactGroup);
0178     QVERIFY(result);
0179     QCOMPARE(lst.count(), 1);
0180     QCOMPARE(lst.at(0).title(), QStringLiteral("foo"));
0181     QCOMPARE(contactGroup.count(), 0);
0182 }
0183 
0184 void LDifConverterTest::shouldImportWorkStreet()
0185 {
0186     QString str = QStringLiteral(
0187         "dn: cn=laurent,mail=foo@kde.org\n"
0188         "sn: laurent\n"
0189         "cn: laurent\n"
0190         "uid: d1d5cdd4-7d5d-484b-828d-58864d8efe74\n"
0191         "title: foo\n"
0192         "mail: foo@kde.org\n"
0193         "street: work address\n"
0194         "mozillaWorkStreet2: work address next\n"
0195         "objectclass: top_n"
0196         "objectclass: person\n"
0197         "objectclass: organizationalPerson");
0198     AddresseeList lst;
0199     ContactGroup::List contactGroup;
0200     bool result = LDIFConverter::LDIFToAddressee(str, lst, contactGroup);
0201     QVERIFY(result);
0202     QCOMPARE(lst.count(), 1);
0203     QCOMPARE(lst.at(0).address(Address::Work).street(), QStringLiteral("work address\nwork address next"));
0204     QCOMPARE(contactGroup.count(), 0);
0205 }
0206 
0207 void LDifConverterTest::shouldImportContactGroup()
0208 {
0209     QString str = QStringLiteral(
0210         "dn: cn=test,mail=\n"
0211         "cn: test\n"
0212         "modifyTimeStamp: 20080526T234914Z\n"
0213         "display-name: Test\n"
0214         "objectclass: top\n"
0215         "objectclass: groupOfNames\n"
0216         "member: cn=Jim Doe,mail=jim.doe@foobar.com\n"
0217         "member: cn=Jane Doe,mail=jane.doe@foobar.com\n"
0218         "member: cn=John Doe,mail=john.doe@foobar.com\n");
0219     AddresseeList lst;
0220     ContactGroup::List contactGroup;
0221     bool result = LDIFConverter::LDIFToAddressee(str, lst, contactGroup);
0222     QVERIFY(result);
0223     QCOMPARE(lst.count(), 0);
0224     QCOMPARE(contactGroup.count(), 1);
0225     ContactGroup first = contactGroup.first();
0226     QCOMPARE(first.name(), QStringLiteral("Test"));
0227     QCOMPARE((int)first.count(), 3);
0228 }
0229 
0230 void LDifConverterTest::shouldImportMultiEntries()
0231 {
0232     QString str = QStringLiteral(
0233         "dn: cn=test1,mail=test1@test.test\n"
0234         "sn: test1\n"
0235         "cn: test1\n"
0236         "uid: jpgdf2NrLQ\n"
0237         "mail: test1@test.test\n"
0238         "modifytimestamp: 20121219T140848Z\n"
0239         "objectclass: top\n"
0240         "objectclass: person\n"
0241         "objectclass: organizationalPerson\n"
0242         "\n"
0243         "dn: cn=test2,mail=test2@test.test\n"
0244         "sn: test2\n"
0245         "cn: test2\n"
0246         "uid: ow2mwdUb6A\n"
0247         "mail: test2@test.test\n"
0248         "objectclass: top\n"
0249         "objectclass: person\n"
0250         "objectclass: organizationalPerson\n");
0251     AddresseeList lst;
0252     ContactGroup::List contactGroup;
0253     bool result = LDIFConverter::LDIFToAddressee(str, lst, contactGroup);
0254     QVERIFY(result);
0255     QCOMPARE(lst.count(), 2);
0256     QCOMPARE(contactGroup.count(), 0);
0257     QCOMPARE(lst.at(0).emails().at(0), QStringLiteral("test1@test.test"));
0258     QCOMPARE(lst.at(1).emails().at(0), QStringLiteral("test2@test.test"));
0259 }
0260 
0261 void LDifConverterTest::shouldImportGroupAndAddress()
0262 {
0263     QString str = QStringLiteral(
0264         "dn: cn=laurent,mail=foo@kde.org\n"
0265         "sn: laurent\n"
0266         "cn: laurent\n"
0267         "uid: d1d5cdd4-7d5d-484b-828d-58864d8efe74\n"
0268         "title: foo\n"
0269         "mail: foo@kde.org\n"
0270         "street: work address\n"
0271         "mozillaWorkStreet2: work address next\n"
0272         "objectclass: top_n"
0273         "objectclass: person\n"
0274         "objectclass: organizationalPerson\n"
0275         "\n"
0276         "dn: cn=test,mail=\n"
0277         "cn: test\n"
0278         "modifyTimeStamp: 20080526T234914Z\n"
0279         "display-name: Test\n"
0280         "objectclass: top\n"
0281         "objectclass: groupOfNames\n"
0282         "member: cn=Jim Doe,mail=jim.doe@foobar.com\n"
0283         "member: cn=Jane Doe,mail=jane.doe@foobar.com\n"
0284         "member: cn=John Doe,mail=john.doe@foobar.com\n");
0285 
0286     AddresseeList lst;
0287     ContactGroup::List contactGroup;
0288     bool result = LDIFConverter::LDIFToAddressee(str, lst, contactGroup);
0289     QVERIFY(result);
0290     QCOMPARE(lst.count(), 1);
0291     QCOMPARE(contactGroup.count(), 1);
0292 }
0293 
0294 void LDifConverterTest::shouldExportEmail()
0295 {
0296     AddresseeList lst;
0297     ContactGroup::List contactGroup;
0298     Addressee addr;
0299     addr.setEmails(QStringList() << QStringLiteral("foo@kde.org"));
0300     addr.setUid(QStringLiteral("testuid"));
0301     lst << addr;
0302     QString str;
0303     bool result = LDIFConverter::addresseeAndContactGroupToLDIF(lst, contactGroup, str);
0304     QVERIFY(result);
0305     QString expected = QStringLiteral(
0306         "dn: cn=,mail=foo@kde.org\n"
0307         "objectclass: top\n"
0308         "objectclass: person\n"
0309         "objectclass: organizationalPerson\n"
0310         "uid: testuid\n"
0311         "mail: foo@kde.org\n\n");
0312 
0313     QCOMPARE(str, expected);
0314 }
0315 
0316 void LDifConverterTest::shouldExportMultiEmails()
0317 {
0318     AddresseeList lst;
0319     ContactGroup::List contactGroup;
0320     Addressee addr;
0321     addr.setEmails(QStringList() << QStringLiteral("foo@kde.org") << QStringLiteral("foo2@kde.org") << QStringLiteral("foo3@kde.org"));
0322     addr.setUid(QStringLiteral("testuid"));
0323     lst << addr;
0324     QString str;
0325     bool result = LDIFConverter::addresseeAndContactGroupToLDIF(lst, contactGroup, str);
0326     QVERIFY(result);
0327     QString expected = QStringLiteral(
0328         "dn: cn=,mail=foo@kde.org\n"
0329         "objectclass: top\n"
0330         "objectclass: person\n"
0331         "objectclass: organizationalPerson\n"
0332         "uid: testuid\n"
0333         "mail: foo@kde.org\n"
0334         "mozillasecondemail: foo2@kde.org\n"
0335         "othermailbox: foo3@kde.org\n"
0336         "\n");
0337 
0338     QCOMPARE(str, expected);
0339 }
0340 
0341 void LDifConverterTest::shouldExportBirthday()
0342 {
0343     AddresseeList lst;
0344     ContactGroup::List contactGroup;
0345     Addressee addr;
0346     QDate date(2015, 3, 3);
0347     addr.setBirthday(date);
0348     addr.setEmails(QStringList() << QStringLiteral("foo@kde.org"));
0349     addr.setUid(QStringLiteral("testuid"));
0350     lst << addr;
0351     QString str;
0352     bool result = LDIFConverter::addresseeAndContactGroupToLDIF(lst, contactGroup, str);
0353     QVERIFY(result);
0354     QString expected = QStringLiteral(
0355         "dn: cn=,mail=foo@kde.org\n"
0356         "objectclass: top\n"
0357         "objectclass: person\n"
0358         "objectclass: organizationalPerson\n"
0359         "uid: testuid\n"
0360         "mail: foo@kde.org\n"
0361         "birthyear: 2015\n"
0362         "birthmonth: 3\n"
0363         "birthday: 3\n"
0364         "\n");
0365 
0366     QCOMPARE(str, expected);
0367 }
0368 
0369 void LDifConverterTest::shouldExportBirthdayWithoutYear()
0370 {
0371     AddresseeList lst;
0372     ContactGroup::List contactGroup;
0373     Addressee addr;
0374     QDate date(-1, 3, 3);
0375     addr.setBirthday(date);
0376     addr.setEmails(QStringList() << QStringLiteral("foo@kde.org"));
0377     addr.setUid(QStringLiteral("testuid"));
0378     lst << addr;
0379     QString str;
0380     bool result = LDIFConverter::addresseeAndContactGroupToLDIF(lst, contactGroup, str);
0381     QVERIFY(result);
0382     QString expected = QStringLiteral(
0383         "dn: cn=,mail=foo@kde.org\n"
0384         "objectclass: top\n"
0385         "objectclass: person\n"
0386         "objectclass: organizationalPerson\n"
0387         "uid: testuid\n"
0388         "mail: foo@kde.org\n"
0389         "birthmonth: 3\n"
0390         "birthday: 3\n"
0391         "\n");
0392 
0393     QCOMPARE(str, expected);
0394 }
0395 
0396 void LDifConverterTest::shouldExportTitle()
0397 {
0398     AddresseeList lst;
0399     ContactGroup::List contactGroup;
0400     Addressee addr;
0401     addr.setEmails(QStringList() << QStringLiteral("foo@kde.org"));
0402     addr.setTitle(QStringLiteral("foo"));
0403     addr.setUid(QStringLiteral("testuid"));
0404     lst << addr;
0405     QString str;
0406     bool result = LDIFConverter::addresseeAndContactGroupToLDIF(lst, contactGroup, str);
0407     QVERIFY(result);
0408     QString expected = QStringLiteral(
0409         "dn: cn=,mail=foo@kde.org\n"
0410         "objectclass: top\n"
0411         "objectclass: person\n"
0412         "objectclass: organizationalPerson\n"
0413         "uid: testuid\n"
0414         "mail: foo@kde.org\n"
0415         "title: foo\n"
0416         "\n");
0417 
0418     QCOMPARE(str, expected);
0419 }
0420 
0421 void LDifConverterTest::shouldExportMultiEntries()
0422 {
0423     AddresseeList lst;
0424     ContactGroup::List contactGroup;
0425     Addressee addr;
0426     addr.setEmails(QStringList() << QStringLiteral("foo@kde.org"));
0427     addr.setTitle(QStringLiteral("foo"));
0428     addr.setUid(QStringLiteral("testuid"));
0429     lst << addr;
0430 
0431     Addressee addr2;
0432     QDate date(2015, 3, 3);
0433     addr2.setBirthday(date);
0434     addr2.setEmails(QStringList() << QStringLiteral("foo@kde.org"));
0435     addr2.setUid(QStringLiteral("testuid"));
0436     lst << addr2;
0437 
0438     QString str;
0439     bool result = LDIFConverter::addresseeAndContactGroupToLDIF(lst, contactGroup, str);
0440     QVERIFY(result);
0441 
0442     const QString expected = QStringLiteral(
0443         "dn: cn=,mail=foo@kde.org\n"
0444         "objectclass: top\n"
0445         "objectclass: person\n"
0446         "objectclass: organizationalPerson\n"
0447         "uid: testuid\n"
0448         "mail: foo@kde.org\n"
0449         "title: foo\n"
0450         "\n"
0451         "dn: cn=,mail=foo@kde.org\n"
0452         "objectclass: top\n"
0453         "objectclass: person\n"
0454         "objectclass: organizationalPerson\n"
0455         "uid: testuid\n"
0456         "mail: foo@kde.org\n"
0457         "birthyear: 2015\n"
0458         "birthmonth: 3\n"
0459         "birthday: 3\n"
0460         "\n");
0461     QCOMPARE(str, expected);
0462 }
0463 
0464 void LDifConverterTest::shouldExportGroup()
0465 {
0466     AddresseeList lst;
0467     ContactGroup::List contactGroup;
0468     ContactGroup grp;
0469     ContactGroup::Data data;
0470     data.setEmail(QStringLiteral("foo@kde.org"));
0471     data.setName(QStringLiteral("foo"));
0472     grp.append(data);
0473     ContactGroup::Data data2;
0474     data2.setEmail(QStringLiteral("foo2@kde.org"));
0475     data2.setName(QStringLiteral("foo2"));
0476     grp.append(data2);
0477     contactGroup.append(grp);
0478 
0479     QString str;
0480     bool result = LDIFConverter::addresseeAndContactGroupToLDIF(lst, contactGroup, str);
0481     QVERIFY(result);
0482 
0483     const QString expected = QStringLiteral(
0484         "objectclass: top\n"
0485         "objectclass: groupOfNames\n"
0486         "member: cn=foo,mail=foo@kde.org\n"
0487         "member: cn=foo2,mail=foo2@kde.org\n"
0488         "\n");
0489     QCOMPARE(str, expected);
0490 }
0491 
0492 void LDifConverterTest::shouldExportWorkStreet()
0493 {
0494     AddresseeList lst;
0495     Addressee addr;
0496     addr.setEmails(QStringList() << QStringLiteral("foo@kde.org"));
0497     addr.setUid(QStringLiteral("testuid"));
0498     Address address(Address::Work);
0499     address.setStreet(QStringLiteral("work address"));
0500     address.setPostalCode(QStringLiteral("postal"));
0501     addr.insertAddress(address);
0502     lst << addr;
0503     ContactGroup::List contactGroup;
0504 
0505     QString str;
0506     bool result = LDIFConverter::addresseeAndContactGroupToLDIF(lst, contactGroup, str);
0507     QVERIFY(result);
0508 
0509     const QString expected = QStringLiteral(
0510         "dn: cn=,mail=foo@kde.org\n"
0511         "objectclass: top\n"
0512         "objectclass: person\n"
0513         "objectclass: organizationalPerson\n"
0514         "uid: testuid\n"
0515         "mail: foo@kde.org\n"
0516         "postalcode: postal\n"
0517         "streetaddress: work address\n"
0518         "street: work address\n"
0519         "\n");
0520     QCOMPARE(str, expected);
0521 }
0522 
0523 void LDifConverterTest::shouldExportFullName()
0524 {
0525     AddresseeList lst;
0526     Addressee addr;
0527     addr.setEmails(QStringList() << QStringLiteral("foo@kde.org"));
0528     addr.setUid(QStringLiteral("testuid"));
0529     addr.setName(QStringLiteral("name"));
0530     addr.setNickName(QStringLiteral("nickname"));
0531     addr.setFamilyName(QStringLiteral("familyname"));
0532     lst << addr;
0533     ContactGroup::List contactGroup;
0534 
0535     QString str;
0536     bool result = LDIFConverter::addresseeAndContactGroupToLDIF(lst, contactGroup, str);
0537     QVERIFY(result);
0538 
0539     const QString expected = QStringLiteral(
0540         "dn: cn=,mail=foo@kde.org\n"
0541         "objectclass: top\n"
0542         "objectclass: person\n"
0543         "objectclass: organizationalPerson\n"
0544         "sn: familyname\n"
0545         "uid: testuid\n"
0546         "nickname: nickname\n"
0547         "xmozillanickname: nickname\n"
0548         "mozillanickname: nickname\n"
0549         "mail: foo@kde.org\n"
0550         "\n");
0551 
0552     QCOMPARE(str, expected);
0553 }
0554 
0555 void LDifConverterTest::testGarbage()
0556 {
0557     AddresseeList lst;
0558     ContactGroup::List contactGroup;
0559     QString str;
0560     bool result;
0561 
0562     result = LDIFConverter::addresseeAndContactGroupToLDIF(lst, contactGroup, str);
0563     QVERIFY(!result);
0564     result = LDIFConverter::contactGroupToLDIF(contactGroup, str);
0565     QVERIFY(!result);
0566     result = LDIFConverter::addresseeToLDIF(lst, str);
0567     QVERIFY(!result);
0568 
0569     Addressee addr;
0570     result = LDIFConverter::addresseeToLDIF(addr, str);
0571     QVERIFY(!result);
0572 }
0573 
0574 QTEST_MAIN(LDifConverterTest)
0575 
0576 #include "moc_ldifconvertertest.cpp"