File indexing completed on 2024-05-12 05:13:47
0001 /* 0002 SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "testhelper.h" 0008 0009 #include "locationhelper.h" 0010 #include "timelinemodel.h" 0011 #include "timelinesectiondelegatecontroller.h" 0012 #include "applicationcontroller.h" 0013 #include "reservationmanager.h" 0014 0015 #include <QUrl> 0016 #include <QtTest/qtest.h> 0017 #include <QSignalSpy> 0018 #include <QStandardPaths> 0019 #include <QTimeZone> 0020 0021 using namespace KItinerary; 0022 0023 void initLocale() 0024 { 0025 qputenv("LC_ALL", "en_US.utf-8"); 0026 qputenv("TZ", "UTC"); 0027 qputenv("LANG", "en_US"); 0028 } 0029 0030 Q_CONSTRUCTOR_FUNCTION(initLocale) 0031 0032 class TimelineSectionDelegateControllerTest : public QObject 0033 { 0034 Q_OBJECT 0035 private Q_SLOTS: 0036 void initTestCase() 0037 { 0038 QStandardPaths::setTestModeEnabled(true); 0039 } 0040 0041 void testController() 0042 { 0043 ReservationManager mgr; 0044 Test::clearAll(&mgr); 0045 auto ctrl = Test::makeAppController(); 0046 ctrl->setReservationManager(&mgr); 0047 ctrl->importFromUrl(QUrl::fromLocalFile(QLatin1StringView(SOURCE_DIR "/../tests/randa2017.json"))); 0048 0049 TimelineModel model; 0050 model.setCurrentDateTime(QDateTime({2021, 3, 7}, {8, 0})); 0051 model.setReservationManager(&mgr); 0052 0053 QCOMPARE(model.locationAtTime(QDateTime({2017, 9, 10}, {0, 0})), QVariant()); 0054 QCOMPARE(LocationHelper::regionCode(model.locationAtTime(QDateTime({2017, 9, 11}, {0, 0}))), QLatin1StringView("CH-VS")); 0055 QCOMPARE(LocationHelper::regionCode(model.locationAtTime(QDateTime({2017, 9, 16}, {0, 0}))), QLatin1StringView("DE-BE")); 0056 0057 TimelineSectionDelegateController controller; 0058 controller.setTimelineModel(&model); 0059 0060 controller.setDateString(QStringLiteral("2021-03-07")); 0061 QCOMPARE(controller.isToday(), true); 0062 QCOMPARE(controller.title(), QLatin1StringView("Today")); 0063 QCOMPARE(controller.subTitle(), QString()); 0064 QCOMPARE(controller.isHoliday(), false); 0065 0066 controller.setDateString(QStringLiteral("2021-03-08")); 0067 QCOMPARE(controller.isToday(), false); 0068 QCOMPARE(controller.title(), QLatin1StringView("Monday, 3/8/21")); 0069 QCOMPARE(controller.subTitle(), QLatin1StringView("Internationaler Frauentag")); // DE-BE only, so proves the right region was selected 0070 QCOMPARE(controller.isHoliday(), true); 0071 0072 model.setCurrentDateTime(QDateTime({2021, 12, 27}, {8, 0})); 0073 controller.setDateString(QStringLiteral("2021-12-31")); // named date, but not a bank holiday 0074 QCOMPARE(controller.isToday(), false); 0075 QCOMPARE(controller.subTitle(), QLatin1StringView("Silvester")); 0076 QCOMPARE(controller.isHoliday(), false); 0077 controller.setDateString(QStringLiteral("2022-01-01")); 0078 QCOMPARE(controller.isToday(), false); 0079 QCOMPARE(controller.subTitle(), QLatin1StringView("Neujahr")); 0080 QCOMPARE(controller.isHoliday(), true); 0081 } 0082 0083 void testBug455083() 0084 { 0085 ReservationManager mgr; 0086 Test::clearAll(&mgr); 0087 auto ctrl = Test::makeAppController(); 0088 ctrl->setReservationManager(&mgr); 0089 // test data puts our known location to DE-BY and then adds a hotel in DE-BE for the BY-only public holiday on 2022-06-16 0090 ctrl->importFromUrl(QUrl::fromLocalFile(QLatin1StringView(SOURCE_DIR "/data/bug455083.json"))); 0091 0092 TimelineModel model; 0093 model.setCurrentDateTime(QDateTime({2022, 6, 14}, {8, 0})); 0094 model.setReservationManager(&mgr); 0095 0096 QCOMPARE(LocationHelper::regionCode(model.locationAtTime(QDateTime({2022, 6, 12}, {0, 0}, QTimeZone("Europe/Berlin")))), QLatin1StringView("DE-BY")); 0097 QCOMPARE(LocationHelper::regionCode(model.locationAtTime(QDateTime({2022, 6, 13}, {0, 0}, QTimeZone("Europe/Berlin")))), QLatin1StringView("DE-BY")); 0098 QCOMPARE(LocationHelper::regionCode(model.locationAtTime(QDateTime({2022, 6, 14}, {0, 0}, QTimeZone("Europe/Berlin")))), QLatin1StringView("DE-BE")); 0099 QCOMPARE(LocationHelper::regionCode(model.locationAtTime(QDateTime({2022, 6, 16}, {0, 0}, QTimeZone("Europe/Berlin")))), QLatin1StringView("DE-BE")); 0100 QCOMPARE(LocationHelper::regionCode(model.locationAtTime(QDateTime({2022, 6, 17}, {0, 0}, QTimeZone("Europe/Berlin")))), QLatin1StringView("DE-BY")); 0101 QCOMPARE(LocationHelper::regionCode(model.locationAtTime(QDateTime({2022, 6, 18}, {0, 0}, QTimeZone("Europe/Berlin")))), QLatin1StringView("DE-BY")); 0102 } 0103 }; 0104 0105 QTEST_GUILESS_MAIN(TimelineSectionDelegateControllerTest) 0106 0107 #include "timelinesectiondelegatecontrollertest.moc"