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

0001 /*
0002     SPDX-FileCopyrightText: 2023 Volker Krause <vkrause@kde.org>
0003     SPDX-License-Identifier: LGPL-2.0-or-later
0004 */
0005 
0006 #include "testhelper.h"
0007 
0008 #include "publictransportmatcher.h"
0009 
0010 #include <KItinerary/Reservation>
0011 #include <KItinerary/TrainTrip>
0012 
0013 #include <KPublicTransport/Line>
0014 #include <KPublicTransport/Journey>
0015 #include <KPublicTransport/Stopover>
0016 
0017 #include <QtTest/qtest.h>
0018 #include <QDateTime>
0019 #include <QJsonDocument>
0020 #include <QJsonObject>
0021 #include <QStandardPaths>
0022 #include <QTimeZone>
0023 
0024 #define s(x) QStringLiteral(x)
0025 
0026 class PublicTransportMatcherTest : public QObject
0027 {
0028     Q_OBJECT
0029 private Q_SLOTS:
0030     void testMatchRoute()
0031     {
0032         KPublicTransport::Route route;
0033         KPublicTransport::Line line;
0034         line.setName(s("RE 13"));
0035         route.setLine(line);
0036         QVERIFY(PublicTransportMatcher::isSameRoute(route, s("RE"), s("13")));
0037         QVERIFY(PublicTransportMatcher::isSameRoute(route, QString(), s("RE13")));
0038         QVERIFY(!PublicTransportMatcher::isSameRoute(route, s("RE"), s("20072")));
0039 
0040         route.setName(s("RE 20072"));
0041         QVERIFY(PublicTransportMatcher::isSameRoute(route, s("RE"), s("13")));
0042         QVERIFY(PublicTransportMatcher::isSameRoute(route, s("RE"), s("20072")));
0043         QVERIFY(PublicTransportMatcher::isSameRoute(route, QString(), s("RE20072")));
0044     }
0045 
0046     void testMatchSubJourney()
0047     {
0048         const auto journey = KPublicTransport::Journey::fromJson(QJsonDocument::fromJson(Test::readFile(QLatin1StringView(SOURCE_DIR "/data/publictransport/db-wifi-journey.json"))).object());
0049         QCOMPARE(journey.sections().size(), 1);
0050 
0051         KItinerary::TrainStation departure, arrival;
0052         departure.setName(QStringLiteral("Berlin Hbf (tief)"));
0053         departure.setGeo(KItinerary::GeoCoordinates(52.5225, 13.3695));
0054         arrival.setName(QStringLiteral("Hamm (Westf) Hbf"));
0055         KItinerary::TrainTrip trip;
0056         trip.setDepartureStation(departure);
0057         trip.setDepartureTime(QDateTime({2021, 12, 21}, {7, 46}));
0058         trip.setArrivalStation(arrival);
0059         trip.setArrivalTime(QDateTime({2021, 12, 21}, {10, 48}));
0060         trip.setTrainName(QStringLiteral("ICE 944"));
0061         KItinerary::TrainReservation res;
0062         res.setReservationFor(trip);
0063 
0064         auto subJny = PublicTransportMatcher::subJourneyForReservation(res, journey.sections()[0]);
0065         QCOMPARE(subJny.mode(), KPublicTransport::JourneySection::PublicTransport);
0066         QCOMPARE(subJny.departure().stopPoint().name(), QLatin1StringView("Berlin Hbf"));
0067         QCOMPARE(subJny.arrival().stopPoint().name(), QLatin1StringView("Hamm (Westf) Hbf"));
0068 
0069         trip.setDepartureTime(QDateTime({2021, 12, 21}, {7, 46}, QTimeZone("Europe/Berlin")));
0070         res.setReservationFor(trip);
0071         subJny = PublicTransportMatcher::subJourneyForReservation(res, journey.sections()[0]);
0072         QCOMPARE(subJny.mode(), KPublicTransport::JourneySection::PublicTransport);
0073 
0074         trip.setTrainName(QStringLiteral("ICE 954"));
0075         res.setReservationFor(trip);
0076         subJny = PublicTransportMatcher::subJourneyForReservation(res, journey.sections()[0]);
0077         QCOMPARE(subJny.mode(), KPublicTransport::JourneySection::Invalid);
0078 
0079         trip.setTrainName(QStringLiteral("ICE 944"));
0080         trip.setDepartureTime(QDateTime({2021, 12, 21}, {8, 2}));
0081         res.setReservationFor(trip);
0082         subJny = PublicTransportMatcher::subJourneyForReservation(res, journey.sections()[0]);
0083         QCOMPARE(subJny.mode(), KPublicTransport::JourneySection::Invalid);
0084 
0085         arrival.setName(QStringLiteral("Dortmund Hbf"));
0086         trip.setDepartureTime(QDateTime({2021, 12, 21}, {7, 46}));
0087         trip.setArrivalStation(arrival);
0088         res.setReservationFor(trip);
0089         subJny = PublicTransportMatcher::subJourneyForReservation(res, journey.sections()[0]);
0090         QCOMPARE(subJny.mode(), KPublicTransport::JourneySection::Invalid);
0091     }
0092 };
0093 
0094 QTEST_GUILESS_MAIN(PublicTransportMatcherTest)
0095 
0096 #include "publictransportmatchertest.moc"