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"