File indexing completed on 2024-04-28 03:54:48

0001 /*
0002 
0003     SPDX-FileCopyrightText: 2023 Nicolas Fella <nicolas.fella@gmx.de>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include <KIO/TransferJob>
0009 
0010 #include <QSignalSpy>
0011 #include <QTest>
0012 
0013 class PostTest : public QObject
0014 {
0015     Q_OBJECT
0016 private Q_SLOTS:
0017     void testPost();
0018     void testPost_data();
0019     void testPostMoreData();
0020     void testPostMoreData_data();
0021     void testExtraContentType();
0022     void testExtraContentType_data();
0023 };
0024 
0025 void PostTest::testPost_data()
0026 {
0027     QTest::addColumn<QString>("url");
0028     QTest::addColumn<QByteArray>("inputData");
0029 
0030     QTest::addRow("put") << "http://localhost:5000/post/bla" << QByteArray("<p>Hello, World!</p>");
0031 }
0032 
0033 void PostTest::testPost()
0034 {
0035     QFETCH(QString, url);
0036     QFETCH(QByteArray, inputData);
0037 
0038     auto *job = KIO::http_post(QUrl(url), inputData);
0039     job->addMetaData("content-type", "text/html");
0040 
0041     connect(job, &KIO::TransferJob::mimeTypeFound, this, [] {
0042         qWarning() << "mime found";
0043     });
0044 
0045     QSignalSpy dataSpy(job, &KIO::TransferJob::data);
0046     QSignalSpy spy(job, &KJob::finished);
0047     spy.wait();
0048     QVERIFY(spy.size());
0049     // QCOMPARE(dataReqCounter, 4);
0050 
0051     QVERIFY(dataSpy.count());
0052     const QByteArray actualData = dataSpy.first().at(1).toByteArray();
0053     QCOMPARE(actualData, "Got data of type text/html: <p>Hello, World!</p>");
0054 
0055     QCOMPARE(job->error(), KJob::NoError);
0056 }
0057 
0058 // TODO should this pass?
0059 void PostTest::testPostMoreData_data()
0060 {
0061     QTest::addColumn<QString>("url");
0062     QTest::addColumn<QByteArray>("inputData");
0063 
0064     QTest::addRow("put") << "http://localhost:5000/post/bla" << QByteArray("<p>Hello, World!</p>");
0065 }
0066 
0067 void PostTest::testPostMoreData()
0068 {
0069     QFETCH(QString, url);
0070     QFETCH(QByteArray, inputData);
0071 
0072     auto *job = KIO::http_post(QUrl(url), inputData);
0073     job->addMetaData("content-type", "text/plain");
0074 
0075     int dataReqCounter = 0;
0076     connect(job, &KIO::TransferJob::dataReq, this, [inputData, &dataReqCounter](KJob * /*job*/, QByteArray &data) {
0077         qWarning() << "dataReq";
0078         if (dataReqCounter < 3) {
0079             data = inputData;
0080         }
0081         dataReqCounter++;
0082     });
0083 
0084     QSignalSpy dataSpy(job, &KIO::TransferJob::data);
0085 
0086     connect(job, &KIO::TransferJob::data, this, [] {
0087         qWarning() << "data";
0088     });
0089 
0090     QSignalSpy spy(job, &KJob::finished);
0091     spy.wait();
0092     QVERIFY(spy.size());
0093     QCOMPARE(dataReqCounter, 4);
0094 
0095     QVERIFY(dataSpy.count());
0096     const QByteArray actualData = dataSpy.first().at(1).toByteArray();
0097     QCOMPARE(actualData, "Got data of type text/plain: <p>Hello, World!</p><p>Hello, World!</p><p>Hello, World!</p><p>Hello, World!</p>");
0098 
0099     QCOMPARE(job->error(), KJob::NoError);
0100 }
0101 
0102 void PostTest::testExtraContentType_data()
0103 {
0104     QTest::addColumn<QString>("url");
0105     QTest::addColumn<QByteArray>("inputData");
0106 
0107     QTest::addRow("put") << "http://localhost:5000/post/bla" << QByteArray("<p>Hello, World!</p>");
0108 }
0109 
0110 void PostTest::testExtraContentType()
0111 {
0112     QFETCH(QString, url);
0113     QFETCH(QByteArray, inputData);
0114 
0115     auto *job = KIO::http_post(QUrl(url), inputData);
0116     job->addMetaData("content-type", "Content-Type: text/html");
0117 
0118     QSignalSpy dataSpy(job, &KIO::TransferJob::data);
0119     QSignalSpy spy(job, &KJob::finished);
0120     spy.wait();
0121     QVERIFY(spy.size());
0122 
0123     QVERIFY(dataSpy.count());
0124     const QByteArray actualData = dataSpy.first().at(1).toByteArray();
0125     QCOMPARE(actualData, "Got data of type text/html: <p>Hello, World!</p>");
0126 
0127     QCOMPARE(job->error(), KJob::NoError);
0128 }
0129 
0130 QTEST_GUILESS_MAIN(PostTest)
0131 
0132 #include "posttest.moc"