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

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 "ifopt/ifoptutil.cpp"
0009 #include "backends/ivvassparser.cpp"
0010 #include "backends/ivvassproductmap.cpp"
0011 
0012 #include <KPublicTransport/Journey>
0013 #include <KPublicTransport/Location>
0014 #include <KPublicTransport/Stopover>
0015 
0016 #include <QFile>
0017 #include <QJsonArray>
0018 #include <QJsonObject>
0019 #include <QJsonDocument>
0020 #include <QJsonValue>
0021 #include <QTest>
0022 
0023 #define s(x) QStringLiteral(x)
0024 
0025 using namespace KPublicTransport;
0026 
0027 class IvvAssParserTest : public QObject
0028 {
0029     Q_OBJECT
0030 private Q_SLOTS:
0031     void testParseLocations_data()
0032     {
0033         QTest::addColumn<QString>("inFileName");
0034         QTest::addColumn<QString>("outFileName");
0035 
0036         QTest::newRow("location-by-name-vrs")
0037             << s(SOURCE_DIR "/data/ivvass/location-by-name-vrs-input.json")
0038             << s(SOURCE_DIR "/data/ivvass/location-by-name-vrs-output.json");
0039         QTest::newRow("location-by-coord-vrs")
0040             << s(SOURCE_DIR "/data/ivvass/location-by-coord-vrs-input.json")
0041             << s(SOURCE_DIR "/data/ivvass/location-by-coord-vrs-output.json");
0042     }
0043 
0044     void testParseLocations()
0045     {
0046         QFETCH(QString, inFileName);
0047         QFETCH(QString, outFileName);
0048 
0049         IvvAssParser p(QTimeZone("Europe/Berlin"), s("vrs"));
0050         const auto result = p.parseLocations(Test::readFile(inFileName));
0051         QVERIFY(!result.empty());
0052         QVERIFY(p.errorMessage.isEmpty());
0053         const auto resultJson = Location::toJson(result);
0054         const auto resultRef = QJsonDocument::fromJson(Test::readFile(outFileName)).array();
0055         if (resultJson != resultRef) {
0056             qDebug().noquote() << QJsonDocument(resultJson).toJson();
0057         }
0058         QVERIFY(!resultJson.isEmpty());
0059         QCOMPARE(resultJson, resultRef);
0060     }
0061 
0062     void testParseStopovers_data()
0063     {
0064         QTest::addColumn<QString>("inFileName");
0065         QTest::addColumn<QString>("outFileName");
0066 
0067         QTest::newRow("departure-vrs")
0068             << s(SOURCE_DIR "/data/ivvass/departure-vrs-input.json")
0069             << s(SOURCE_DIR "/data/ivvass/departure-vrs-output.json");
0070     }
0071 
0072     void testParseStopovers()
0073     {
0074         QFETCH(QString, inFileName);
0075         QFETCH(QString, outFileName);
0076 
0077         IvvAssParser p(QTimeZone("Europe/Berlin"), s("vrs"));
0078         const auto result = p.parseStopovers(Test::readFile(inFileName));
0079         QVERIFY(!result.empty());
0080         QVERIFY(p.errorMessage.isEmpty());
0081         const auto resultJson = Stopover::toJson(result);
0082         const auto resultRef = QJsonDocument::fromJson(Test::readFile(outFileName)).array();
0083         if (resultJson != resultRef) {
0084             qDebug().noquote() << QJsonDocument(resultJson).toJson();
0085         }
0086         QVERIFY(!resultJson.isEmpty());
0087         QCOMPARE(resultJson, resultRef);
0088     }
0089 
0090     void testParseJourneys_data()
0091     {
0092         QTest::addColumn<QString>("inFileName");
0093         QTest::addColumn<QString>("outFileName");
0094 
0095         QTest::newRow("journey-vrs")
0096             << s(SOURCE_DIR "/data/ivvass/journey-vrs-input.json")
0097             << s(SOURCE_DIR "/data/ivvass/journey-vrs-output.json");
0098         QTest::newRow("journey-long-distance-vrs")
0099             << s(SOURCE_DIR "/data/ivvass/journey-long-distance-vrs-input.json")
0100             << s(SOURCE_DIR "/data/ivvass/journey-long-distance-vrs-output.json");
0101         QTest::newRow("journey-walking-directions-vrs")
0102             << s(SOURCE_DIR "/data/ivvass/journey-walking-directions-vrs-input.json")
0103             << s(SOURCE_DIR "/data/ivvass/journey-walking-directions-vrs-output.json");
0104     }
0105 
0106     void testParseJourneys()
0107     {
0108         QFETCH(QString, inFileName);
0109         QFETCH(QString, outFileName);
0110 
0111         IvvAssParser p(QTimeZone("Europe/Berlin"), s("vrs"));
0112         const auto result = p.parseJourneys(Test::readFile(inFileName));
0113         QVERIFY(!result.empty());
0114         QVERIFY(p.errorMessage.isEmpty());
0115         const auto resultJson = Journey::toJson(result);
0116         const auto resultRef = QJsonDocument::fromJson(Test::readFile(outFileName)).array();
0117         QVERIFY(!resultJson.isEmpty());
0118         QVERIFY(Test::compareJson(outFileName, resultJson, resultRef));
0119     }
0120 
0121     void testParseError()
0122     {
0123         {
0124             IvvAssParser p(QTimeZone("Europe/Berlin"), s("vrs"));
0125             const auto res = p.parseLocations(R"({"error":"Ung\u00fcltige Zeit"})");
0126             QVERIFY(!p.errorMessage.isEmpty());
0127         }
0128         {
0129             IvvAssParser p(QTimeZone("Europe/Berlin"), s("vrs"));
0130             const auto res = p.parseStopovers(R"({"error":"Fehlerhaftes Ziel"})");
0131             QVERIFY(!p.errorMessage.isEmpty());
0132         }
0133         {
0134             IvvAssParser p(QTimeZone("Europe/Berlin"), s("vrs"));
0135             const auto res = p.parseJourneys(R"({"error":"Fehlerhafter Start"})");
0136             QVERIFY(!p.errorMessage.isEmpty());
0137         }
0138     }
0139 };
0140 
0141 QTEST_GUILESS_MAIN(IvvAssParserTest)
0142 
0143 #include "ivvassparsertest.moc"