File indexing completed on 2024-04-28 15:59:42
0001 /* 0002 SPDX-FileCopyrightText: 2023 Volker Krause <vkrause@kde.org> 0003 SPDX-License-Identifier: LGPL-2.0-or-later 0004 */ 0005 0006 #include "mocknetworkaccessmanager.h" 0007 0008 #include <KPublicTransport/JourneyReply> 0009 #include <KPublicTransport/JourneyRequest> 0010 #include <KPublicTransport/Manager> 0011 #include <KPublicTransport/Location> 0012 #include <KPublicTransport/StopoverReply> 0013 #include <KPublicTransport/StopoverRequest> 0014 0015 #include <QFile> 0016 #include <QSignalSpy> 0017 #include <QTest> 0018 #include <QUrlQuery> 0019 #include <QTimeZone> 0020 0021 #define s(x) QStringLiteral(x) 0022 0023 using namespace KPublicTransport; 0024 0025 class EfaRequestTest : public QObject 0026 { 0027 Q_OBJECT 0028 private Q_SLOTS: 0029 void initTestCase() 0030 { 0031 qputenv("TZ", "UTC"); 0032 qputenv("LANG", "en_US"); 0033 0034 m_mgr.setNetworkAccessManager(&m_nam); 0035 } 0036 0037 void testStopoverRequest_data() 0038 { 0039 QTest::addColumn<StopoverRequest>("request"); 0040 QTest::addColumn<QUrl>("requestUrl"); 0041 0042 StopoverRequest req; 0043 req.setBackendIds({s("de_bw_vvs")}); 0044 Location stop; 0045 stop.setIdentifier(QLatin1String("de_bw_vvs"), QLatin1String("12345")); 0046 req.setStop(stop); 0047 req.setDateTime(QDateTime({2023, 6, 25}, {9, 39}, QTimeZone::UTC)); 0048 QTest::newRow("id-based-default") << req << QUrl(s("https://www2.vvs.de/vvs/XML_DM_REQUEST?outputFormat=XML&coordOutputFormat=WGS84[DD.ddddd]&language=en&type_dm=stop&name_dm=12345&itdDate=20230625&itdTime=0939&useRealtime=1&limit=12&mode=direct&ptOptionsActive=1&merge_dep=1&stateless=1&sessionID=0&requestID=0")); 0049 0050 stop = {}; 0051 stop.setCoordinate(48.78, 9.18); 0052 req.setStop(stop); 0053 req.setMaximumResults(3); 0054 QTest::newRow("coordinate-based") << req << QUrl(s("https://www2.vvs.de/vvs/XML_DM_REQUEST?outputFormat=XML&coordOutputFormat=WGS84[DD.ddddd]&language=en&type_dm=coord&name_dm=9.18:48.78:WGS84[DD.ddddd]&itdDate=20230625&itdTime=0939&useRealtime=1&limit=3&mode=direct&ptOptionsActive=1&merge_dep=1&stateless=1&sessionID=0&requestID=0")); 0055 0056 // not supported, so no impact 0057 req.setLineModes({Line::LocalTrain, Line::RapidTransit, Line::Metro}); 0058 QTest::newRow("line-mode-constraints") << req << QUrl(s("https://www2.vvs.de/vvs/XML_DM_REQUEST?outputFormat=XML&coordOutputFormat=WGS84[DD.ddddd]&language=en&type_dm=coord&name_dm=9.18:48.78:WGS84[DD.ddddd]&itdDate=20230625&itdTime=0939&useRealtime=1&limit=3&mode=direct&ptOptionsActive=1&merge_dep=1&stateless=1&sessionID=0&requestID=0")); 0059 } 0060 0061 void testStopoverRequest() 0062 { 0063 QFETCH(StopoverRequest, request); 0064 QFETCH(QUrl, requestUrl); 0065 0066 m_nam.requests.clear(); 0067 QVERIFY(request.isValid()); 0068 0069 auto reply = m_mgr.queryStopover(request); 0070 QSignalSpy finishedSpy(reply, &Reply::finished); 0071 QVERIFY(finishedSpy.wait()); 0072 reply->deleteLater(); 0073 QCOMPARE(reply->error(), Reply::NetworkError); 0074 QCOMPARE(m_nam.requests.size(), 1); 0075 QCOMPARE(m_nam.requests[0].op, QNetworkAccessManager::GetOperation); 0076 0077 const auto url = m_nam.requests[0].request.url(); 0078 QCOMPARE(url, requestUrl); 0079 } 0080 0081 void testJourneyRequest_data() 0082 { 0083 QTest::addColumn<JourneyRequest>("request"); 0084 QTest::addColumn<QUrl>("requestUrl"); 0085 0086 JourneyRequest req; 0087 req.setBackendIds({s("de_bw_vvs")}); 0088 Location from; 0089 from.setIdentifier(QLatin1String("de_bw_vvs"), QLatin1String("12345")); 0090 Location to; 0091 to.setIdentifier(QLatin1String("de_bw_vvs"), QLatin1String("23456")); 0092 req.setFrom(from); 0093 req.setTo(to); 0094 req.setDateTime(QDateTime({2023, 6, 24}, {20, 58}, QTimeZone::UTC)); 0095 QTest::newRow("id-based-default") << req << QUrl(s("https://www2.vvs.de/vvs/XML_TRIP_REQUEST2?outputFormat=XML&coordOutputFormat=WGS84[DD.ddddd]&language=en&locationServerActive=1&useRealtime=1&type_origin=stop&name_origin=12345&type_destination=stop&name_destination=23456&itdDate=20230624&itdTime=2058&itdTripDateTimeDepArr=dep&itOptionsActive=1&trITDepMOT=100&trITArrMOT=100&calcNumberOfTrips=12&calcCO2=1&coordListOutputFormat=STRING&stateless=1&sessionID=0&requestID=0")); 0096 0097 from = {}; 0098 from.setCoordinate(48.78, 9.18); 0099 to = {}; 0100 to.setCoordinate(48.59, 8.86); 0101 req.setFrom(from); 0102 req.setTo(to); 0103 QTest::newRow("coordinate-based-default") << req << QUrl(s("https://www2.vvs.de/vvs/XML_TRIP_REQUEST2?outputFormat=XML&coordOutputFormat=WGS84[DD.ddddd]&language=en&locationServerActive=1&useRealtime=1&type_origin=coord&name_origin=9.18:48.78:WGS84[DD.ddddd]&type_destination=coord&name_destination=8.86:48.59:WGS84[DD.ddddd]&itdDate=20230624&itdTime=2058&itdTripDateTimeDepArr=dep&itOptionsActive=1&trITDepMOT=100&trITArrMOT=100&calcNumberOfTrips=12&calcCO2=1&coordListOutputFormat=STRING&stateless=1&sessionID=0&requestID=0")); 0104 0105 req.setMaximumResults(4); 0106 req.setIncludeIntermediateStops(false); 0107 req.setIncludePaths(true); 0108 req.setDateTimeMode(JourneyRequest::Arrival); 0109 req.setAccessModes({ IndividualTransport::Walk, IndividualTransport::Bike }); 0110 req.setEgressModes({ IndividualTransport::Walk, IndividualTransport::Bike }); 0111 QTest::newRow("arrival-with-access-mode") << req << QUrl(s("https://www2.vvs.de/vvs/XML_TRIP_REQUEST2?outputFormat=XML&coordOutputFormat=WGS84[DD.ddddd]&language=en&locationServerActive=1&useRealtime=1&type_origin=coord&name_origin=9.18:48.78:WGS84[DD.ddddd]&type_destination=coord&name_destination=8.86:48.59:WGS84[DD.ddddd]&itdDate=20230624&itdTime=2058&itdTripDateTimeDepArr=arr&itOptionsActive=1&trITDepMOT=100&trITArrMOT=100&calcNumberOfTrips=4&calcCO2=1&coordListOutputFormat=STRING&stateless=1&sessionID=0&requestID=0")); 0112 0113 req.setLineModes({Line::Bus, Line::Ferry}); 0114 QTest::newRow("line-mode-constraints") << req << QUrl(s("https://www2.vvs.de/vvs/XML_TRIP_REQUEST2?outputFormat=XML&coordOutputFormat=WGS84[DD.ddddd]&language=en&locationServerActive=1&useRealtime=1&type_origin=coord&name_origin=9.18:48.78:WGS84[DD.ddddd]&type_destination=coord&name_destination=8.86:48.59:WGS84[DD.ddddd]&itdDate=20230624&itdTime=2058&itdTripDateTimeDepArr=arr&inclMOT_5=on&inclMOT_6=on&inclMOT_17=on&inclMOT_19=on&inclMOT_9=on&itOptionsActive=1&trITDepMOT=100&trITArrMOT=100&calcNumberOfTrips=4&calcCO2=1&coordListOutputFormat=STRING&stateless=1&sessionID=0&requestID=0")); 0115 } 0116 0117 void testJourneyRequest() 0118 { 0119 QFETCH(JourneyRequest, request); 0120 QFETCH(QUrl, requestUrl); 0121 0122 m_nam.requests.clear(); 0123 QVERIFY(request.isValid()); 0124 0125 auto reply = m_mgr.queryJourney(request); 0126 QSignalSpy finishedSpy(reply, &Reply::finished); 0127 QVERIFY(finishedSpy.wait()); 0128 reply->deleteLater(); 0129 QCOMPARE(reply->error(), Reply::NetworkError); 0130 QCOMPARE(m_nam.requests.size(), 1); 0131 QCOMPARE(m_nam.requests[0].op, QNetworkAccessManager::GetOperation); 0132 0133 const auto url = m_nam.requests[0].request.url(); 0134 QCOMPARE(url, requestUrl); 0135 } 0136 0137 private: 0138 MockNetworkAccessManager m_nam; 0139 Manager m_mgr; 0140 }; 0141 0142 QTEST_GUILESS_MAIN(EfaRequestTest) 0143 0144 #include "efarequesttest.moc"