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"