File indexing completed on 2024-05-12 05:22:06

0001 /*
0002  * SPDX-FileCopyrightText: 2018 Daniel Vrátil <dvratil@kde.org>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005  */
0006 
0007 #include <QObject>
0008 #include <QTest>
0009 
0010 #include "fakenetworkaccessmanagerfactory.h"
0011 #include "testutils.h"
0012 
0013 #include "account.h"
0014 #include "createjob.h"
0015 
0016 Q_DECLARE_METATYPE(QList<FakeNetworkAccessManager::Scenario>)
0017 
0018 using Scenarios = QList<FakeNetworkAccessManager::Scenario>;
0019 
0020 using namespace KGAPI2;
0021 
0022 class TestCreateJob : public CreateJob
0023 {
0024     Q_OBJECT
0025 
0026 public:
0027     TestCreateJob(const QUrl &url, const QByteArray &data, QObject *parent = nullptr)
0028         : CreateJob(AccountPtr::create(QStringLiteral("MockAccount"), QStringLiteral("MockToken")), parent)
0029         , mUrl(url)
0030         , mData(data)
0031     {
0032     }
0033 
0034     void start() override
0035     {
0036         QNetworkRequest request(mUrl);
0037         enqueueRequest(request, mData);
0038     }
0039 
0040     QByteArray response()
0041     {
0042         return mResponse;
0043     }
0044 
0045     void handleReply(const QNetworkReply *, const QByteArray &rawData) override
0046     {
0047         mResponse = rawData;
0048         emitFinished();
0049     }
0050 
0051 private:
0052     QUrl mUrl;
0053     QByteArray mData;
0054     QByteArray mResponse;
0055 };
0056 
0057 class CreateJobTest : public QObject
0058 {
0059     Q_OBJECT
0060 private Q_SLOTS:
0061     void initTestCase()
0062     {
0063         NetworkAccessManagerFactory::setFactory(new FakeNetworkAccessManagerFactory);
0064     }
0065 
0066     void testCreate_data()
0067     {
0068         QTest::addColumn<QList<FakeNetworkAccessManager::Scenario>>("scenarios");
0069 
0070         QTest::newRow("success") << Scenarios{{QUrl(QStringLiteral("https://example.test/request/data?prettyPrint=false")),
0071                                                QNetworkAccessManager::PostOperation,
0072                                                "New data",
0073                                                200,
0074                                                "Data created"}};
0075 
0076         QTest::newRow("creation failed") << Scenarios{{QUrl(QStringLiteral("https://example.test/request/data?prettyPrint=false")),
0077                                                        QNetworkAccessManager::PostOperation,
0078                                                        "New data",
0079                                                        KGAPI2::Forbidden,
0080                                                        {}}};
0081 
0082         QTest::newRow("redirect") << Scenarios{{QUrl(QStringLiteral("https://example.test/request/data?prettyPrint=false")),
0083                                                 QNetworkAccessManager::PostOperation,
0084                                                 "New data",
0085                                                 KGAPI2::TemporarilyMoved,
0086                                                 "https://example.test/moved/data"},
0087                                                {QUrl(QStringLiteral("https://example.test/moved/data?prettyPrint=false")),
0088                                                 QNetworkAccessManager::PostOperation,
0089                                                 "New data",
0090                                                 KGAPI2::OK,
0091                                                 "Data created"}};
0092     }
0093 
0094     void testCreate()
0095     {
0096         QFETCH(QList<FakeNetworkAccessManager::Scenario>, scenarios);
0097 
0098         FakeNetworkAccessManagerFactory::get()->setScenarios(scenarios);
0099 
0100         auto job = new TestCreateJob(scenarios.first().requestUrl, scenarios.first().requestData);
0101         QVERIFY(execJob(job));
0102         QCOMPARE(static_cast<int>(job->error()), scenarios.last().responseCode == 200 ? KGAPI2::NoError : scenarios.last().responseCode);
0103         QCOMPARE(job->response(), scenarios.last().responseData);
0104 
0105         QVERIFY(!FakeNetworkAccessManagerFactory::get()->hasScenario());
0106     }
0107 };
0108 
0109 QTEST_GUILESS_MAIN(CreateJobTest)
0110 
0111 #include "createjobtest.moc"