File indexing completed on 2024-04-28 05:19:53
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 <QSignalSpy> 0009 #include <QTest> 0010 0011 #include "fakenetworkaccessmanager.h" 0012 #include "fakenetworkaccessmanagerfactory.h" 0013 #include "fakenetworkreply.h" 0014 0015 class FakeNAMTest : public QObject 0016 { 0017 Q_OBJECT 0018 0019 private: 0020 void checkReply(QNetworkReply *reply, const FakeNetworkAccessManager::Scenario &scenario) 0021 { 0022 QSignalSpy readSpy(reply, &QNetworkReply::readyRead); 0023 QSignalSpy finishedSpy(reply, &QNetworkReply::finished); 0024 0025 QVERIFY(finishedSpy.wait()); 0026 QCOMPARE(readSpy.count(), 1); 0027 QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), scenario.responseCode); 0028 QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toInt(), scenario.responseData.size()); 0029 QCOMPARE(reply->header(QNetworkRequest::ContentTypeHeader).toString(), QStringLiteral("text/plain")); 0030 QCOMPARE(reply->readAll(), scenario.responseData); 0031 delete reply; 0032 } 0033 0034 private Q_SLOTS: 0035 void initTestCase() 0036 { 0037 KGAPI2::NetworkAccessManagerFactory::setFactory(new FakeNetworkAccessManagerFactory); 0038 QVERIFY(FakeNetworkAccessManagerFactory::get()); 0039 } 0040 0041 void testGetRequest() 0042 { 0043 FakeNetworkAccessManager::Scenario scenario(QUrl(QStringLiteral("https://example.test/request")), 0044 QNetworkAccessManager::GetOperation, 0045 {}, 0046 200, 0047 "Hello World!", 0048 false); 0049 auto namf = FakeNetworkAccessManagerFactory::get(); 0050 namf->setScenarios({scenario}); 0051 QScopedPointer<QNetworkAccessManager> nam(namf->networkAccessManager()); 0052 0053 QNetworkRequest request(scenario.requestUrl); 0054 checkReply(nam->get(request), scenario); 0055 0056 QVERIFY(!namf->hasScenario()); 0057 } 0058 0059 void testPostRequest() 0060 { 0061 FakeNetworkAccessManager::Scenario scenario(QUrl(QStringLiteral("https://example.test/upload")), 0062 QNetworkAccessManager::PostOperation, 0063 "Uploading new data", 0064 200, 0065 "Data stored", 0066 false); 0067 auto namf = FakeNetworkAccessManagerFactory::get(); 0068 namf->setScenarios({scenario}); 0069 QScopedPointer<QNetworkAccessManager> nam(namf->networkAccessManager()); 0070 0071 QNetworkRequest request(scenario.requestUrl); 0072 checkReply(nam->post(request, scenario.requestData), scenario); 0073 0074 QVERIFY(!namf->hasScenario()); 0075 } 0076 0077 void testPutRequest() 0078 { 0079 FakeNetworkAccessManager::Scenario scenario(QUrl(QStringLiteral("https://example.test/create")), 0080 QNetworkAccessManager::PutOperation, 0081 "New data to store", 0082 201, 0083 "New data stored", 0084 false); 0085 auto namf = FakeNetworkAccessManagerFactory::get(); 0086 namf->setScenarios({scenario}); 0087 QScopedPointer<QNetworkAccessManager> nam(namf->networkAccessManager()); 0088 0089 QNetworkRequest request(scenario.requestUrl); 0090 checkReply(nam->put(request, scenario.requestData), scenario); 0091 0092 QVERIFY(!namf->hasScenario()); 0093 } 0094 0095 void testDeleteRequest() 0096 { 0097 FakeNetworkAccessManager::Scenario scenario(QUrl(QStringLiteral("https://example.test/delete")), 0098 QNetworkAccessManager::DeleteOperation, 0099 {}, 0100 204, 0101 {}, 0102 false); 0103 auto namf = FakeNetworkAccessManagerFactory::get(); 0104 namf->setScenarios({scenario}); 0105 QScopedPointer<QNetworkAccessManager> nam(namf->networkAccessManager()); 0106 0107 QNetworkRequest request(scenario.requestUrl); 0108 checkReply(nam->deleteResource(request), scenario); 0109 0110 QVERIFY(!namf->hasScenario()); 0111 } 0112 }; 0113 0114 QTEST_GUILESS_MAIN(FakeNAMTest) 0115 0116 #include "fakenamtest.moc"