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"