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"