Add some missing tests for QFormDataBuilder
Test the setHeaders method and the option of manually setting the mime type. Task-number: QTBUG-114647 Change-Id: I86644b243830259156e60239adf370e5894450dc Reviewed-by: Marc Mutz <marc.mutz@qt.io> Reviewed-by: Juha Vuolle <juha.vuolle@qt.io> (cherry picked from commit 132498a69a626be6feaf1855cf63dd79d1ac9445) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
65bf57ce7c
commit
885a49548d
@ -23,6 +23,12 @@ private Q_SLOTS:
|
|||||||
|
|
||||||
void picksUtf8EncodingOnlyIfL1OrAsciiDontSuffice_data();
|
void picksUtf8EncodingOnlyIfL1OrAsciiDontSuffice_data();
|
||||||
void picksUtf8EncodingOnlyIfL1OrAsciiDontSuffice();
|
void picksUtf8EncodingOnlyIfL1OrAsciiDontSuffice();
|
||||||
|
|
||||||
|
void setHeadersDoesNotAffectHeaderFieldsManagedByBuilder_data();
|
||||||
|
void setHeadersDoesNotAffectHeaderFieldsManagedByBuilder();
|
||||||
|
|
||||||
|
void specifyMimeType_data();
|
||||||
|
void specifyMimeType();
|
||||||
};
|
};
|
||||||
|
|
||||||
void tst_QFormDataBuilder::generateQHttpPartWithDevice_data()
|
void tst_QFormDataBuilder::generateQHttpPartWithDevice_data()
|
||||||
@ -198,6 +204,118 @@ void tst_QFormDataBuilder::picksUtf8EncodingOnlyIfL1OrAsciiDontSuffice()
|
|||||||
QVERIFY(msg.contains(expected_content_disposition_data));
|
QVERIFY(msg.contains(expected_content_disposition_data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QFormDataBuilder::setHeadersDoesNotAffectHeaderFieldsManagedByBuilder_data()
|
||||||
|
{
|
||||||
|
QTest::addColumn<QLatin1StringView>("name_data");
|
||||||
|
QTest::addColumn<QAnyStringView>("body_name_data");
|
||||||
|
QTest::addColumn<bool>("overwrite");
|
||||||
|
QTest::addColumn<bool>("extra_headers");
|
||||||
|
QTest::addColumn<QStringList>("expected_headers");
|
||||||
|
|
||||||
|
QTest::newRow("content-disposition-is-set-by-default")
|
||||||
|
<< "text"_L1 << QAnyStringView("rfc3252.txt"_L1)
|
||||||
|
<< false << false
|
||||||
|
<< QStringList{
|
||||||
|
uR"("content-disposition":"form-data; name=\"text\"; filename=rfc3252.txt")"_s,
|
||||||
|
uR"("content-type":"text/plain")"_s};
|
||||||
|
|
||||||
|
QTest::newRow("default-overwrites-preset-content-disposition")
|
||||||
|
<< "text"_L1 << QAnyStringView("rfc3252.txt"_L1)
|
||||||
|
<< true << false
|
||||||
|
<< QStringList{
|
||||||
|
uR"("content-disposition":"form-data; name=\"text\"; filename=rfc3252.txt")"_s,
|
||||||
|
uR"("content-type":"text/plain")"_s};
|
||||||
|
|
||||||
|
QTest::newRow("added-extra-header")
|
||||||
|
<< "text"_L1 << QAnyStringView("rfc3252.txt"_L1)
|
||||||
|
<< false << true
|
||||||
|
<< QStringList{
|
||||||
|
uR"("content-disposition":"form-data; name=\"text\"; filename=rfc3252.txt")"_s,
|
||||||
|
uR"("content-type":"text/plain")"_s,
|
||||||
|
uR"("content-length":"70")"_s};
|
||||||
|
|
||||||
|
QTest::newRow("extra-header-and-overwrite")
|
||||||
|
<< "text"_L1 << QAnyStringView("rfc3252.txt"_L1)
|
||||||
|
<< true << true
|
||||||
|
<< QStringList{
|
||||||
|
uR"("content-disposition":"form-data; name=\"text\"; filename=rfc3252.txt")"_s,
|
||||||
|
uR"("content-type":"text/plain")"_s,
|
||||||
|
uR"("content-length":"70")"_s};
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_QFormDataBuilder::setHeadersDoesNotAffectHeaderFieldsManagedByBuilder()
|
||||||
|
{
|
||||||
|
QFETCH(const QLatin1StringView, name_data);
|
||||||
|
QFETCH(const QAnyStringView, body_name_data);
|
||||||
|
QFETCH(const bool, overwrite);
|
||||||
|
QFETCH(const bool, extra_headers);
|
||||||
|
QFETCH(const QStringList, expected_headers);
|
||||||
|
|
||||||
|
QBuffer buff;
|
||||||
|
|
||||||
|
QFormDataBuilder qfdb;
|
||||||
|
QFormDataPartBuilder &qfdpb = qfdb.part(name_data).setBodyDevice(&buff, body_name_data);
|
||||||
|
|
||||||
|
if (overwrite || extra_headers) {
|
||||||
|
QHttpHeaders headers;
|
||||||
|
|
||||||
|
if (overwrite) {
|
||||||
|
headers.append(QHttpHeaders::WellKnownHeader::ContentType, "attachment");
|
||||||
|
qfdpb.setHeaders(headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (extra_headers) {
|
||||||
|
headers.append(QHttpHeaders::WellKnownHeader::ContentLength, "70");
|
||||||
|
qfdpb.setHeaders(std::move(headers));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const QHttpPart httpPart = qfdpb.build();
|
||||||
|
|
||||||
|
const auto msg = QDebug::toString(httpPart);
|
||||||
|
for (const auto &header : expected_headers)
|
||||||
|
QVERIFY2(msg.contains(header), qPrintable(header));
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_QFormDataBuilder::specifyMimeType_data()
|
||||||
|
{
|
||||||
|
QTest::addColumn<QLatin1StringView>("name_data");
|
||||||
|
QTest::addColumn<QAnyStringView>("body_name_data");
|
||||||
|
QTest::addColumn<QAnyStringView>("mime_type");
|
||||||
|
QTest::addColumn<QString>("expected_content_type_data");
|
||||||
|
|
||||||
|
QTest::newRow("not-specified") << "text"_L1 << QAnyStringView("rfc3252.txt"_L1)
|
||||||
|
<< QAnyStringView("text/plain"_L1) << uR"("content-type":"text/plain")"_s;
|
||||||
|
QTest::newRow("mime-specified") << "text"_L1 << QAnyStringView("rfc3252.txt"_L1)
|
||||||
|
<< QAnyStringView("text/plain"_L1) << uR"("content-type":"text/plain")"_s;
|
||||||
|
// wrong mime type specified but it is not overridden by the deduction
|
||||||
|
QTest::newRow("wrong-mime-specified") << "text"_L1 << QAnyStringView("rfc3252.txt"_L1)
|
||||||
|
<< QAnyStringView("image/jpeg"_L1) << uR"("content-type":"image/jpeg)"_s;
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_QFormDataBuilder::specifyMimeType()
|
||||||
|
{
|
||||||
|
QFETCH(const QLatin1StringView, name_data);
|
||||||
|
QFETCH(const QAnyStringView, body_name_data);
|
||||||
|
QFETCH(const QAnyStringView, mime_type);
|
||||||
|
QFETCH(const QString, expected_content_type_data);
|
||||||
|
|
||||||
|
QBuffer buff;
|
||||||
|
|
||||||
|
QFormDataBuilder qfdb;
|
||||||
|
QFormDataPartBuilder &qfdpb = qfdb.part(name_data).setBodyDevice(&buff, body_name_data);
|
||||||
|
|
||||||
|
if (!mime_type.empty())
|
||||||
|
qfdpb.setBodyDevice(&buff, body_name_data, mime_type);
|
||||||
|
else
|
||||||
|
qfdpb.setBodyDevice(&buff, body_name_data);
|
||||||
|
|
||||||
|
const QHttpPart httpPart = qfdpb.build();
|
||||||
|
|
||||||
|
const auto msg = QDebug::toString(httpPart);
|
||||||
|
QVERIFY(msg.contains(expected_content_type_data));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
QTEST_MAIN(tst_QFormDataBuilder)
|
QTEST_MAIN(tst_QFormDataBuilder)
|
||||||
#include "tst_qformdatabuilder.moc"
|
#include "tst_qformdatabuilder.moc"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user