File indexing completed on 2024-05-19 05:14:14

0001 /*
0002     SPDX-FileCopyrightText: 2022 Volker Krause <vkrause@kde.org>
0003     SPDX-License-Identifier: LGPL-2.0-or-later
0004 */
0005 
0006 #include "../src/calendarextras/androidicalconverter.cpp"
0007 #include "../src/calendarextras/android/eventdata.h"
0008 
0009 #include <QObject>
0010 #include <QTest>
0011 
0012 using namespace KAndroidExtras;
0013 
0014 class AndroidIcalConverterTest : public QObject
0015 {
0016     Q_OBJECT
0017 private Q_SLOTS:
0018     void testEvent()
0019     {
0020         JniEventData data;
0021         data.title = QStringLiteral("summary");
0022         data.allDay = true;
0023         data.dtStart = 1653055380000;
0024         data.startTimezone = QStringLiteral("Europe/Brussels");
0025 
0026         auto event = AndroidIcalConverter::readEvent(data);
0027         QCOMPARE(event->summary(), QLatin1StringView("summary"));
0028         QCOMPARE(event->allDay(), true);
0029         QCOMPARE(event->dtStart(), QDateTime({2022, 5, 20}, {16, 3}, QTimeZone("Europe/Brussels")));
0030 
0031         const auto out = AndroidIcalConverter::writeEvent(event);
0032         QCOMPARE(out.title, QLatin1StringView("summary"));
0033         QCOMPARE(out.allDay, true);
0034         QCOMPARE(out.dtStart, 1653055380000);
0035         QCOMPARE(out.startTimezone, QLatin1StringView("Europe/Brussels"));
0036     }
0037 
0038     void testAlarm()
0039     {
0040         KCalendarCore::Event ev;
0041         auto data = Jni::fromHandle<JniReminderData>(QJniObject{});
0042         data.minutes = 5;
0043         auto alarm = AndroidIcalConverter::readAlarm(data, &ev);
0044         QCOMPARE(alarm->startOffset().asSeconds(), -300);
0045 
0046         const auto out = AndroidIcalConverter::writeAlarm(alarm);
0047         QCOMPARE(out.minutes, 5);
0048     }
0049 
0050     void testAttendee()
0051     {
0052         auto data = Jni::fromHandle<JniAttendeeData>(QJniObject{});
0053         data.name = QStringLiteral("Dr Konqi");
0054         data.email = QStringLiteral("null@kde.org");
0055         auto attendee = AndroidIcalConverter::readAttendee(data);
0056         QCOMPARE(attendee.fullName(), QLatin1StringView("Dr Konqi <null@kde.org>"));
0057 
0058         const auto out = AndroidIcalConverter::writeAttendee(attendee);
0059         QCOMPARE(out.name, QLatin1StringView("Dr Konqi"));
0060         QCOMPARE(out.email, QLatin1StringView("null@kde.org"));
0061     }
0062 
0063     void testExtendedProperties()
0064     {
0065         KCalendarCore::Event ev;
0066         AndroidIcalConverter::addExtendedProperty(&ev, QStringLiteral("CREATED"), QStringLiteral("20211116T193700Z"));
0067         AndroidIcalConverter::addExtendedProperty(&ev, QStringLiteral("GEO"), QStringLiteral("52.525;13.369"));
0068         AndroidIcalConverter::addExtendedProperty(&ev, QStringLiteral("X-KDE-KITINERARY-RESERVATION"), QStringLiteral("<json>"));
0069 
0070         QCOMPARE(ev.customProperty("KITINERARY", "RESERVATION"), QLatin1StringView("<json>"));
0071         QVERIFY(ev.hasGeo());
0072         QCOMPARE(ev.geoLatitude(), 52.525f);
0073         QCOMPARE(ev.geoLongitude(), 13.369f);
0074         QCOMPARE(ev.created(), QDateTime({2021, 11, 16}, {19, 37}, Qt::UTC));
0075 
0076         const auto out = AndroidIcalConverter::writeExtendedProperties(&ev);
0077         QCOMPARE(out.size(), 3);
0078         QCOMPARE(out[0].name, QLatin1StringView("vnd.android.cursor.item/vnd.ical4android.unknown-property"));
0079         QCOMPARE(QString(out[0].value), QLatin1StringView("[\"CREATED\",\"20211116T193700Z\"]"));
0080         QCOMPARE(QString(out[1].value), QLatin1StringView("[\"GEO\",\"52.525002;13.369000\"]"));
0081         QCOMPARE(QString(out[2].value), QLatin1StringView("[\"X-KDE-KITINERARY-RESERVATION\",\"<json>\"]"));
0082     }
0083 
0084     void testReadRDate()
0085     {
0086         // date/time variants
0087         QCOMPARE(AndroidIcalConverter::readRDates<QDateTime>(QString()), QList<QDateTime>());
0088         QCOMPARE(AndroidIcalConverter::readRDates<QDateTime>(QStringLiteral("20220520T200000Z")),
0089                  QList<QDateTime>({QDateTime({2022, 5, 20}, {20, 0}, Qt::UTC)}));
0090         QCOMPARE(AndroidIcalConverter::readRDates<QDateTime>(QStringLiteral("Europe/Brussels;20211224T153000,20211231T153000,20220107T153000")),
0091                  QList<QDateTime>({QDateTime({2021, 12, 24}, {15, 30}, QTimeZone("Europe/Brussels")),
0092                                    QDateTime({2021, 12, 31}, {15, 30}, QTimeZone("Europe/Brussels")),
0093                                    QDateTime({2022, 1, 7}, {15, 30}, QTimeZone("Europe/Brussels"))}));
0094         QCOMPARE(AndroidIcalConverter::readRDates<QDateTime>(QStringLiteral("20201230T000000Z,20211229T190000Z")),
0095                  QList<QDateTime>({QDateTime({2020, 12, 30}, {0, 0}, Qt::UTC),
0096                                    QDateTime({2021, 12, 29}, {19, 0}, Qt::UTC)}));
0097         QCOMPARE(AndroidIcalConverter::readRDates<QDateTime>(QStringLiteral("Europe/Helsinki;20210513T122346")),
0098                  QList<QDateTime>({QDateTime({2021, 05, 13}, {12, 23, 46}, QTimeZone("Europe/Helsinki"))}));
0099 
0100         // TODO date-only variants
0101     }
0102 
0103     void testWriteRDate()
0104     {
0105         QCOMPARE(AndroidIcalConverter::writeRDates(QList<QDateTime>()), QString());
0106         QCOMPARE(AndroidIcalConverter::writeRDates(QList<QDateTime>({QDateTime({2022, 5, 20}, {20, 0}, Qt::UTC)})),
0107                  QLatin1StringView("20220520T200000Z"));
0108         QCOMPARE(AndroidIcalConverter::writeRDates(QList<QDateTime>({QDateTime({2021, 05, 13}, {12, 23, 46}, QTimeZone("Europe/Helsinki"))})),
0109                  QLatin1StringView("Europe/Helsinki;20210513T122346"));
0110         QCOMPARE(AndroidIcalConverter::writeRDates(QList<QDateTime>({QDateTime({2020, 12, 30}, {0, 0}, Qt::UTC),
0111                                                                      QDateTime({2021, 12, 29}, {19, 0}, Qt::UTC)})),
0112                  QLatin1StringView("20201230T000000Z,20211229T190000Z"));
0113         QCOMPARE(AndroidIcalConverter::writeRDates(QList<QDateTime>({QDateTime({2021, 12, 24}, {15, 30}, QTimeZone("Europe/Brussels")),
0114                                                                      QDateTime({2021, 12, 31}, {15, 30}, Qt::UTC),
0115                                                                      QDateTime({2022, 1, 7}, {15, 30}, QTimeZone("Europe/Brussels"))})),
0116                  QLatin1StringView("Europe/Brussels;20211224T153000,20211231T163000,20220107T153000"));
0117 
0118 
0119         QCOMPARE(AndroidIcalConverter::writeRDates(QList<QDate>()), QString());
0120         QCOMPARE(AndroidIcalConverter::writeRDates(QList<QDate>({{2022, 5, 28}})), QLatin1StringView("20220528"));
0121         QCOMPARE(AndroidIcalConverter::writeRDates(QList<QDate>({{2022, 5, 28}, {2022, 5, 29}})), QLatin1StringView("20220528,20220529"));
0122     }
0123 };
0124 
0125 QTEST_APPLESS_MAIN(AndroidIcalConverterTest)
0126 
0127 #include "androidicalconvertertest.moc"