File indexing completed on 2024-05-12 05:13:46

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 #include "mocknetworkaccessmanager.h"
0008 
0009 #include "onlineticketretrievaljob.h"
0010 
0011 #include <QUrl>
0012 #include <QtTest/qtest.h>
0013 #include <QSignalSpy>
0014 #include <QStandardPaths>
0015 
0016 class OnlineTicketRetrievalTest : public QObject
0017 {
0018     Q_OBJECT
0019 private Q_SLOTS:
0020     void initTestCase()
0021     {
0022         QStandardPaths::setTestModeEnabled(true);
0023     }
0024 
0025     void testTicketRetrieval_data()
0026     {
0027         QTest::addColumn<QString>("sourceId");
0028         QTest::addColumn<QVariantMap>("arguments");
0029         QTest::addColumn<QByteArray>("postData");
0030 
0031         QTest::newRow("db") << QStringLiteral("db") << QVariantMap({ {QStringLiteral("name"), QStringLiteral("KONQUI")}, {QStringLiteral("reference"), QStringLiteral("XYZ007")}})
0032             << QByteArray(R"(<rqorderdetails version="1.0"><rqheader v="23040000" os="KCI" app="KCI-Webservice"/><rqorder on="XYZ007"/><authname tln="KONQUI"/></rqorderdetails>)");
0033         QTest::newRow("sncf") << QStringLiteral("sncf") << QVariantMap({ {QStringLiteral("name"), QStringLiteral("KONQUI")}, {QStringLiteral("reference"), QStringLiteral("XYZ007")}})
0034             << QByteArray(R"({"reference":"XYZ007","name":"KONQUI"})");
0035     }
0036 
0037     void testTicketRetrieval()
0038     {
0039         QFETCH(QString, sourceId);
0040         QFETCH(QVariantMap, arguments);
0041         QFETCH(QByteArray, postData);
0042 
0043         m_nam.requests.clear();
0044         OnlineTicketRetrievalJob job(sourceId, arguments, &m_nam);
0045         QSignalSpy finishedSpy(&job, &OnlineTicketRetrievalJob::finished);
0046         QVERIFY(finishedSpy.wait());
0047 
0048         QCOMPARE(m_nam.requests.size(), 1);
0049         QCOMPARE(m_nam.requests[0].op, QNetworkAccessManager::PostOperation);
0050         QCOMPARE(m_nam.requests[0].data, postData);
0051     }
0052 
0053     void testDbNext()
0054     {
0055         m_nam.requests.clear();
0056         // moc chokes on using a raw string literal here...
0057         m_nam.replies.push({ QNetworkReply::NoError, 200, "<?xml version=\"1.0\" encoding=\"UTF-8\"?><rporderheadlist version=\"1.0\"><rpheader tnr=\"\" ts=\"2023-10-29T11:36:32\"/><orderheadlist><orderhead kwid=\"12345678-90ab-cdef-1234-567890abcdef\" ldt=\"2023-10-27T11:04:18\" on=\"123456789123\"/></orderheadlist></rporderheadlist>" });
0058         QVariantMap args({ {QStringLiteral("name"), QStringLiteral("Konqui")}, {QStringLiteral("reference"), QStringLiteral("123456789123")}});
0059 
0060         OnlineTicketRetrievalJob job(QStringLiteral("db"), args, &m_nam);
0061         QSignalSpy finishedSpy(&job, &OnlineTicketRetrievalJob::finished);
0062         QVERIFY(finishedSpy.wait());
0063 
0064         QCOMPARE(m_nam.requests.size(), 2);
0065         QCOMPARE(m_nam.requests[0].op, QNetworkAccessManager::PostOperation);
0066         QCOMPARE(m_nam.requests[0].data, R"(<rqfindorder version="1.0"><rqheader v="23080000" os="KCI" app="NAVIGATOR"/><rqorder on="123456789123"/><authname tln="Konqui"/></rqfindorder>)");
0067         QCOMPARE(m_nam.requests[1].op, QNetworkAccessManager::PostOperation);
0068         QCOMPARE(m_nam.requests[1].data, R"(<rqorderdetails version="1.0"><rqheader v="23040000" os="KCI" app="KCI-Webservice"/><rqorder on="123456789123" kwid="12345678-90ab-cdef-1234-567890abcdef"/><authname tln="Konqui"/></rqorderdetails>)");
0069     }
0070 
0071 private:
0072     MockNetworkAccessManager m_nam;
0073 };
0074 
0075 QTEST_GUILESS_MAIN(OnlineTicketRetrievalTest)
0076 
0077 #include "onlineticketretrievaltest.moc"