File indexing completed on 2024-04-21 04:41:08

0001 /*
0002     SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "testhelpers.h"
0008 #include "backends/openjourneyplannerrequestbuilder.cpp"
0009 
0010 #include <KPublicTransport/JourneyRequest>
0011 #include <KPublicTransport/LocationRequest>
0012 #include <KPublicTransport/StopoverRequest>
0013 
0014 #include <QFile>
0015 #include <QJsonArray>
0016 #include <QJsonDocument>
0017 #include <QTest>
0018 #include <QTimeZone>
0019 
0020 #define s(x) QStringLiteral(x)
0021 
0022 using namespace KPublicTransport;
0023 
0024 class OjpRequestTest : public QObject
0025 {
0026     Q_OBJECT
0027 private Q_SLOTS:
0028     void initTestCase()
0029     {
0030         qputenv("TZ", "UTC");
0031     }
0032 
0033     void testLocationRequest_data()
0034     {
0035         QTest::addColumn<LocationRequest>("request");
0036         QTest::addColumn<QString>("refFileName");
0037 
0038         Location loc;
0039         loc.setCoordinate(46.1, 7.78);
0040         LocationRequest req;
0041         req.setLocation(loc);
0042         req.setMaximumDistance(500);
0043         req.setMaximumResults(23);
0044         QTest::newRow("location-by-coord") << req << s(SOURCE_DIR "/data/ojp-request/location-by-coord.xml");
0045 
0046         loc = {};
0047         loc.setName(s("Randa"));
0048         req.setLocation(loc);
0049         QTest::newRow("location-by-name") << req << s(SOURCE_DIR "/data/ojp-request/location-by-name.xml");
0050     }
0051 
0052     void testLocationRequest()
0053     {
0054         QFETCH(LocationRequest, request);
0055         QFETCH(QString, refFileName);
0056 
0057         OpenJourneyPlannerRequestBuilder builder;
0058         builder.setRequestorRef(QStringLiteral("KPublicTransport"));
0059         builder.setTestMode(true);
0060         auto res = builder.buildLocationInformationRequest(request);
0061         auto ref = Test::readFile(refFileName);
0062         if (res != ref) {
0063             qDebug().noquote() << res;
0064         }
0065         QVERIFY(!res.isEmpty());
0066         QCOMPARE(res, ref);
0067 
0068         builder.setUseTrias(true);
0069         res = builder.buildLocationInformationRequest(request);
0070         ref = Test::readFile(refFileName.insert(refFileName.size() -4, u"-trias"));
0071         if (res != ref) {
0072             qDebug().noquote() << res;
0073         }
0074         QVERIFY(!res.isEmpty());
0075         QCOMPARE(res, ref);
0076     }
0077 
0078     void testStopoverRequest_data()
0079     {
0080         QTest::addColumn<StopoverRequest>("request");
0081         QTest::addColumn<QString>("refFileName");
0082 
0083         Location loc;
0084         loc.setIdentifier(QStringLiteral("uic"), QStringLiteral("8501687"));
0085         StopoverRequest req;
0086         req.setStop(loc);
0087         req.setMode(StopoverRequest::QueryDeparture);
0088         req.setDateTime(QDateTime({2020, 9, 6}, {20, 54}, QTimeZone::UTC));
0089         req.setMaximumResults(4);
0090         QTest::newRow("stopover-departure") << req << s(SOURCE_DIR "/data/ojp-request/stopover-departure.xml");
0091         req.setMode(StopoverRequest::QueryArrival);
0092         QTest::newRow("stopover-arrival") << req << s(SOURCE_DIR "/data/ojp-request/stopover-arrival.xml");
0093     }
0094 
0095     void testStopoverRequest()
0096     {
0097         QFETCH(StopoverRequest, request);
0098         QFETCH(QString, refFileName);
0099 
0100         OpenJourneyPlannerRequestBuilder builder;
0101         builder.setRequestorRef(QStringLiteral("KPublicTransport"));
0102         builder.setTestMode(true);
0103         auto res = builder.buildStopEventRequest(request);
0104         auto ref = Test::readFile(refFileName);
0105         if (res != ref) {
0106             qDebug().noquote() << res;
0107         }
0108         QVERIFY(!res.isEmpty());
0109         QCOMPARE(res, ref);
0110 
0111         builder.setUseTrias(true);
0112         res = builder.buildStopEventRequest(request);
0113         ref = Test::readFile(refFileName.insert(refFileName.size() -4, u"-trias"));
0114         if (res != ref) {
0115             qDebug().noquote() << res;
0116         }
0117         QVERIFY(!res.isEmpty());
0118         QCOMPARE(res, ref);
0119     }
0120 
0121     void testJourneyRequest_data()
0122     {
0123         QTest::addColumn<JourneyRequest>("request");
0124         QTest::addColumn<QString>("refFileName");
0125 
0126         Location from;
0127         from.setCoordinate(46.1, 7.78);
0128         Location to;
0129         to.setIdentifier(QStringLiteral("uic"), QStringLiteral("8500010"));
0130         JourneyRequest req;
0131         req.setFrom(from);
0132         req.setTo(to);
0133         req.setDateTime(QDateTime({2020, 9, 6}, {20, 54}, QTimeZone::UTC));
0134         req.setDateTimeMode(JourneyRequest::Departure);
0135         req.setMaximumResults(3);
0136         req.setIncludeIntermediateStops(true);
0137         req.setIncludePaths(false);
0138         QTest::newRow("journey-departure") << req << s(SOURCE_DIR "/data/ojp-request/journey-departure.xml");
0139         from.setName(QStringLiteral("Randa"));
0140         req.setFrom(from);
0141         req.setIncludeIntermediateStops(false);
0142         req.setIncludePaths(true);
0143         req.setDateTimeMode(JourneyRequest::Arrival);
0144         QTest::newRow("stopover-arrival") << req << s(SOURCE_DIR "/data/ojp-request/journey-arrival.xml");
0145     }
0146 
0147     void testJourneyRequest()
0148     {
0149         QFETCH(JourneyRequest, request);
0150         QFETCH(QString, refFileName);
0151 
0152         OpenJourneyPlannerRequestBuilder builder;
0153         builder.setRequestorRef(QStringLiteral("KPublicTransport"));
0154         builder.setTestMode(true);
0155         auto res = builder.buildTripRequest(request);
0156         auto ref = Test::readFile(refFileName);
0157         if (res != ref) {
0158             qDebug().noquote() << res;
0159         }
0160         QVERIFY(!res.isEmpty());
0161         QCOMPARE(res, ref);
0162 
0163         builder.setUseTrias(true);
0164         res = builder.buildTripRequest(request);
0165         ref = Test::readFile(refFileName.insert(refFileName.size() -4, u"-trias"));
0166 
0167         if (res != ref) {
0168             qDebug().noquote() << res;
0169         }
0170         QVERIFY(!res.isEmpty());
0171         QCOMPARE(res, ref);
0172     }
0173 };
0174 
0175 QTEST_GUILESS_MAIN(OjpRequestTest)
0176 
0177 #include "ojprequesttest.moc"