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"