File indexing completed on 2024-05-12 07:49:46
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"