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

0001 /*
0002     SPDX-FileCopyrightText: 2018 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "testhelpers.h"
0008 
0009 #include <KPublicTransport/Attribution>
0010 #include <KPublicTransport/Journey>
0011 #include <KPublicTransport/Line>
0012 #include <KPublicTransport/NavitiaParser>
0013 #include <KPublicTransport/RentalVehicle>
0014 #include <KPublicTransport/Stopover>
0015 
0016 #include <QFile>
0017 #include <QJsonDocument>
0018 #include <QTest>
0019 #include <QTimeZone>
0020 
0021 #define s(x) QStringLiteral(x)
0022 
0023 using namespace KPublicTransport;
0024 
0025 class NavitiaParserTest : public QObject
0026 {
0027     Q_OBJECT
0028 private Q_SLOTS:
0029     void initTestCase()
0030     {
0031         qputenv("TZ", "UTC");
0032         qRegisterMetaType<KPublicTransport::RentalVehicle>();
0033     }
0034 
0035     void testParseJourney_data()
0036     {
0037         QTest::addColumn<QString>("inFileName");
0038         QTest::addColumn<QString>("refFileName");
0039         QTest::addColumn<QString>("attrRefFileName");
0040 
0041         QTest::newRow("journey")
0042             << s(SOURCE_DIR "/data/navitia/journey-response.json")
0043             << s(SOURCE_DIR "/data/navitia/journey-response.out.json")
0044             << s(SOURCE_DIR "/data/navitia/journey-response.attr.json");
0045         QTest::newRow("journey-bss-path-no-instr-start-coord")
0046             << s(SOURCE_DIR "/data/navitia/journey-bss-path-no-instr-start-coord.json")
0047             << s(SOURCE_DIR "/data/navitia/journey-bss-path-no-instr-start-coord.out.json")
0048             << s(SOURCE_DIR "/data/navitia/journey-bss-path-no-instr-start-coord.attr.json");
0049     }
0050 
0051     void testParseJourney()
0052     {
0053         QFETCH(QString, inFileName);
0054         QFETCH(QString, refFileName);
0055         QFETCH(QString, attrRefFileName);
0056 
0057         NavitiaParser parser;
0058         const auto res = parser.parseJourneys(Test::readFile(inFileName));
0059         const auto jsonRes = Journey::toJson(res);
0060 
0061         const auto ref = QJsonDocument::fromJson(Test::readFile(refFileName)).array();
0062         QVERIFY(Test::compareJson(refFileName, jsonRes, ref));
0063 
0064         QVERIFY(parser.nextLink.isValid());
0065         QVERIFY(parser.prevLink.isValid());
0066 
0067         const auto attrRes = Attribution::toJson(parser.attributions);
0068         const auto attrRef = QJsonDocument::fromJson(Test::readFile(attrRefFileName)).array();
0069         QVERIFY(Test::compareJson(attrRefFileName, attrRes, attrRef));
0070     }
0071 
0072     void testParseDepartures()
0073     {
0074         KPublicTransport::NavitiaParser parser;
0075         const auto res = parser.parseDepartures(Test::readFile(s(SOURCE_DIR "/data/navitia/departure-response.json")));
0076         QCOMPARE(res.size(), 10);
0077 
0078         {
0079             const auto departure = res[0];
0080             QCOMPARE(departure.scheduledDepartureTime(), QDateTime({2018, 12, 10}, {17, 17}, QTimeZone("Europe/Paris")));
0081             QCOMPARE(departure.hasExpectedDepartureTime(), false);
0082             QCOMPARE(departure.scheduledArrivalTime(), QDateTime({2018, 12, 10}, {17, 17}, QTimeZone("Europe/Paris")));
0083             QCOMPARE(departure.hasExpectedArrivalTime(), false);
0084             QCOMPARE(departure.stopPoint().name(), QStringLiteral("Gare de Lyon - Diderot (Paris)"));
0085             QCOMPARE(departure.route().direction(), QStringLiteral("Porte de la Chapelle (Paris)"));
0086             QCOMPARE(departure.route().line().mode(), KPublicTransport::Line::Bus);
0087             QCOMPARE(departure.route().line().name(), QStringLiteral("65"));
0088             QCOMPARE(departure.route().line().color(), QColor(0x00, 0x8b, 0x5a));
0089             QVERIFY(!departure.route().destination().isEmpty());
0090             QVERIFY(departure.route().destination().hasCoordinate());
0091             QCOMPARE(departure.route().direction(), departure.route().destination().name());
0092         }
0093 
0094         {
0095             const auto departure = res[3];
0096             QCOMPARE(departure.scheduledDepartureTime(), QDateTime({2018, 12, 10}, {17, 19}, QTimeZone("Europe/Paris")));
0097             QCOMPARE(departure.hasExpectedDepartureTime(), true);
0098             QCOMPARE(departure.expectedDepartureTime(), QDateTime({2018, 12, 10}, {17, 21}, QTimeZone("Europe/Paris")));
0099             QCOMPARE(departure.stopPoint().name(), QStringLiteral("Gare de Lyon RER D (Paris)"));
0100             QCOMPARE(departure.route().direction(), QStringLiteral("Gare de Villiers le Bel Gonesse Arnouville (Arnouville)"));
0101             QCOMPARE(departure.route().line().mode(), KPublicTransport::Line::RapidTransit);
0102             QCOMPARE(departure.route().line().modeString(), QStringLiteral("RER"));
0103             QCOMPARE(departure.route().line().name(), QStringLiteral("D"));
0104             QCOMPARE(departure.route().line().color(), QColor(0x5E, 0x96, 0x20));
0105             QVERIFY(!departure.route().destination().isEmpty());
0106             QVERIFY(departure.route().destination().hasCoordinate());
0107             QCOMPARE(departure.route().destination().name(), QStringLiteral("Gare de Goussainville (Goussainville)"));
0108         }
0109 
0110         QCOMPARE(parser.attributions.size(), 2);
0111         const auto &attr = parser.attributions.at(0);
0112         QCOMPARE(attr.name(), QStringLiteral("openstreetmap"));
0113         QCOMPARE(attr.license(), QStringLiteral("ODbL"));
0114         QEXPECT_FAIL("", "not implemented yet", Continue);
0115         QCOMPARE(attr.licenseUrl().host(), QStringLiteral("spdx.org"));
0116         QCOMPARE(attr.url().host(), QStringLiteral("www.openstreetmap.org"));
0117     }
0118 };
0119 
0120 QTEST_GUILESS_MAIN(NavitiaParserTest)
0121 
0122 #include "navitiaparsertest.moc"