File indexing completed on 2024-05-12 05:13:44

0001 /*
0002     SPDX-FileCopyrightText: 2018 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "testhelper.h"
0008 
0009 #include "calendarimportmodel.h"
0010 
0011 #include <KItinerary/Event>
0012 #include <KItinerary/Reservation>
0013 
0014 #include <KCalendarCore/ICalFormat>
0015 #include <KCalendarCore/MemoryCalendar>
0016 
0017 #include <QAbstractItemModelTester>
0018 #include <QtTest/qtest.h>
0019 #include <QSignalSpy>
0020 #include <QStandardPaths>
0021 
0022 using namespace KItinerary;
0023 
0024 class CalendarImportModelTest : public QObject
0025 {
0026     Q_OBJECT
0027 private Q_SLOTS:
0028     void initTestCase()
0029     {
0030         qputenv("TZ", "UTC");
0031         QStandardPaths::setTestModeEnabled(true);
0032     }
0033 
0034     void testImport()
0035     {
0036         CalendarImportModel model;
0037         QAbstractItemModelTester modelTest(&model);
0038 
0039         KCalendarCore::MemoryCalendar::Ptr calendar(new KCalendarCore::MemoryCalendar(QTimeZone::utc()));
0040         KCalendarCore::ICalFormat format;
0041         QVERIFY(format.load(calendar, QLatin1StringView(SOURCE_DIR "/data/randa2017.ics")));
0042 
0043         QCOMPARE(model.hasSelection(), false);
0044         model.m_todayOverride = { 2017, 6, 27 };
0045         model.setCalendar(calendar.data());
0046 
0047         QCOMPARE(model.rowCount(), 5);
0048         QCOMPARE(model.hasSelection(), true);
0049         QCOMPARE(model.selectedReservations().size(), 3);
0050 
0051         auto idx = model.index(0, 0);
0052         QCOMPARE(idx.data(CalendarImportModel::TitleRole).toString(), QLatin1StringView("Hotel reservation: Haus Randa"));
0053         QCOMPARE(idx.data(CalendarImportModel::IconNameRole).toString(), QLatin1StringView("meeting-attending"));
0054         QCOMPARE(idx.data(CalendarImportModel::SelectedRole).toBool(), false);
0055         QVERIFY(model.setData(idx, true, CalendarImportModel::SelectedRole));
0056 
0057         idx = model.index(1, 0);
0058         QCOMPARE(idx.data(CalendarImportModel::TitleRole).toString(), QLatin1StringView("Train 241 from Visp to Randa"));
0059         QCOMPARE(idx.data(CalendarImportModel::IconNameRole).toString(), QLatin1StringView("qrc:///images/train.svg"));
0060         QCOMPARE(idx.data(CalendarImportModel::SelectedRole).toBool(), true);
0061         auto res = idx.data(CalendarImportModel::ReservationsRole).value<QVector<QVariant>>();
0062         QCOMPARE(res.size(), 1);
0063         QVERIFY(JsonLd::isA<TrainReservation>(res.at(0)));
0064         QVERIFY(model.setData(idx, false, CalendarImportModel::SelectedRole));
0065 
0066         idx = model.index(2, 0);
0067         QCOMPARE(idx.data(CalendarImportModel::TitleRole).toString(), QLatin1StringView("KDE Randa Meeting 2017"));
0068         QCOMPARE(idx.data(CalendarImportModel::IconNameRole).toString(), QLatin1StringView("meeting-attending"));
0069         QCOMPARE(idx.data(CalendarImportModel::SelectedRole).toBool(), false);
0070         QVERIFY(model.setData(idx, true, CalendarImportModel::SelectedRole));
0071 
0072         idx = model.index(3, 0);
0073         QCOMPARE(idx.data(CalendarImportModel::TitleRole).toString(), QLatin1StringView("Restaurant reservation: Raclette"));
0074         QCOMPARE(idx.data(CalendarImportModel::IconNameRole).toString(), QLatin1StringView("qrc:///images/foodestablishment.svg"));
0075         QCOMPARE(idx.data(CalendarImportModel::SelectedRole).toBool(), true);
0076         res = idx.data(CalendarImportModel::ReservationsRole).value<QVector<QVariant>>();
0077         QCOMPARE(res.size(), 1);
0078         QVERIFY(JsonLd::isA<FoodEstablishmentReservation>(res.at(0)));
0079         QVERIFY(model.setData(idx, false, CalendarImportModel::SelectedRole));
0080 
0081         idx = model.index(4, 0);
0082         QCOMPARE(idx.data(CalendarImportModel::TitleRole).toString(), QLatin1StringView("Randa -> Visp"));
0083         QCOMPARE(idx.data(CalendarImportModel::IconNameRole).toString(), QLatin1StringView("qrc:///images/train.svg"));
0084         QCOMPARE(idx.data(CalendarImportModel::SelectedRole).toBool(), true);
0085         res = idx.data(CalendarImportModel::ReservationsRole).value<QVector<QVariant>>();
0086         QCOMPARE(res.size(), 1);
0087         QVERIFY(JsonLd::isA<TrainReservation>(res.at(0)));
0088         QVERIFY(model.setData(idx, false, CalendarImportModel::SelectedRole));
0089 
0090         QCOMPARE(model.hasSelection(), true);
0091         QCOMPARE(model.selectedReservations().size(), 2);
0092 
0093         auto ev = model.selectedReservations().at(0).value<KItinerary::Event>();
0094         QCOMPARE(ev.name(), QLatin1StringView("Hotel reservation: Haus Randa"));
0095         QVERIFY(ev.startDate().isValid());
0096         QVERIFY(ev.endDate().isValid());
0097 
0098         ev = model.selectedReservations().at(1).value<KItinerary::Event>();
0099         QCOMPARE(ev.name(), QLatin1StringView("KDE Randa Meeting 2017"));
0100         QVERIFY(ev.startDate().isValid());
0101         QVERIFY(ev.endDate().isValid());
0102     }
0103 };
0104 
0105 QTEST_GUILESS_MAIN(CalendarImportModelTest)
0106 
0107 #include "calendarimportmodeltest.moc"