File indexing completed on 2024-04-14 14:55:15
0001 /** =========================================================== 0002 * @file 0003 * 0004 * This file is a part of KDE project 0005 * <a href="https://commits.kde.org/libmediawiki">libmediawiki</a> 0006 * 0007 * @date 2011-03-22 0008 * @brief a MediaWiki C++ interface for KDE 0009 * 0010 * @author Copyright (C) 2010 by Alexandre Mendes 0011 * <a href="mailto:alex dot mendes1988 at gmail dot com">alex dot mendes1988 at gmail dot com</a> 0012 * 0013 * This program is free software; you can redistribute it 0014 * and/or modify it under the terms of the GNU General 0015 * Public License as published by the Free Software Foundation; 0016 * either version 2, or (at your option) 0017 * any later version. 0018 * 0019 * This program is distributed in the hope that it will be useful, 0020 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0021 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0022 * GNU General Public License for more details. 0023 * 0024 * ============================================================ */ 0025 0026 #ifndef TEST_UPLOAD_H 0027 #define TEST_UPLOAD_H 0028 0029 #include <QObject> 0030 #include <QtTest> 0031 0032 #include <KJob> 0033 0034 #include "mediawiki.h" 0035 #include "upload.h" 0036 #include "libmediawikitest/fakeserver.h" 0037 0038 using mediawiki::MediaWiki; 0039 using mediawiki::Upload; 0040 0041 Q_DECLARE_METATYPE(FakeServer::Request) 0042 Q_DECLARE_METATYPE(Upload*) 0043 0044 class UploadTest : public QObject 0045 { 0046 Q_OBJECT 0047 0048 public Q_SLOTS: 0049 0050 void uploadHandle(KJob* ) { 0051 uploadCount++; 0052 } 0053 0054 private Q_SLOTS: 0055 0056 void initTestCase() 0057 { 0058 uploadCount = 0; 0059 this->m_mediaWiki = new MediaWiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0060 this->m_infoScenario = QStringLiteral("<api><query><pages><page pageid=\"27697087\" ns=\"0\" title=\"API\" touched=\"2010-11-25T13:59:03Z\" lastrevid=\"367741756\" counter=\"0\" length=\"70\" redirect=\"\" starttimestamp=\"2010-11-25T16:14:51Z\" edittoken=\"cecded1f35005d22904a35cc7b736e18%2B\" talkid=\"5477418\" fullurl=\"http://en.wikipedia.org/wiki/API\" editurl=\"http://en.wikipedia.org/w/index.php?title=API&action=edit\" ><protection /></page></pages></query></api>"); 0061 this->m_file = new QFile(QCoreApplication::applicationFilePath() + QStringLiteral("_image.jpg")); 0062 this->m_file->open(QIODevice::ReadOnly); 0063 } 0064 0065 void uploadSetters() 0066 { 0067 QFETCH(QString, request); 0068 QFETCH(QString, senario); 0069 QFETCH(Upload*, job); 0070 0071 uploadCount = 0; 0072 FakeServer fakeserver; 0073 fakeserver.setScenario(m_infoScenario); 0074 fakeserver.addScenario(senario); 0075 fakeserver.startAndWait(); 0076 connect(job, SIGNAL(result(KJob*)),this, SLOT(uploadHandle(KJob*))); 0077 job->exec(); 0078 FakeServer::Request serverrequest = fakeserver.getRequest()[1]; 0079 QCOMPARE(serverrequest.type, QStringLiteral("POST")); 0080 QCOMPARE(serverrequest.value, request); 0081 QCOMPARE(job->error(), (int)Upload::NoError); 0082 QCOMPARE(this->uploadCount, 1); 0083 } 0084 void uploadSetters_data() 0085 { 0086 QTest::addColumn<QString>("request"); 0087 QTest::addColumn<QString>("senario"); 0088 QTest::addColumn<Upload*>("job"); 0089 0090 Upload * e1 = new Upload( *m_mediaWiki, nullptr); 0091 e1->setFile(this->m_file); 0092 e1->setFilename(QStringLiteral("Test.jpeg")); 0093 e1->setComment(QStringLiteral("Test")); 0094 e1->setText(QStringLiteral("{{Information|Description=Ajout du logo de l'IUP ISI, Toulouse.|Source=http://www.iupisi.ups-tlse.fr/|Date=1992-01-01|Author=iup|Permission={{PD-EEA}}|other_versions=}}")); 0095 QTest::newRow("Text") 0096 << QStringLiteral("/?action=upload&format=xml") 0097 << QStringLiteral("<api><upload result=\"Success\" pageid=\"12\" title=\"Talk:Main Page\" oldrevid=\"465\" newrevid=\"471\" /></api>") 0098 << e1; 0099 } 0100 0101 void error() 0102 { 0103 QFETCH(QString, scenario); 0104 QFETCH(int, error); 0105 0106 uploadCount = 0; 0107 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0108 FakeServer fakeserver; 0109 if(scenario != QStringLiteral("error server")) 0110 { 0111 fakeserver.setScenario(m_infoScenario); 0112 fakeserver.addScenario(scenario); 0113 fakeserver.startAndWait(); 0114 } 0115 0116 Upload * job = new Upload(mediawiki, nullptr); 0117 job->setFile(this->m_file); 0118 job->setFilename(QStringLiteral("Test.jpeg")); 0119 job->setComment(QStringLiteral("Test")); 0120 job->setText(QStringLiteral("{{Information|Description=Ajout du logo de l'IUP ISI, Toulouse.|Source=http://www.iupisi.ups-tlse.fr/|Date=1992-01-01|Author=iup|Permission={{PD-EEA}}|other_versions=}}")); 0121 connect(job, SIGNAL(result(KJob*)),this, SLOT(uploadHandle(KJob*))); 0122 0123 job->exec(); 0124 0125 if(scenario != QStringLiteral("error server")) 0126 { 0127 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0128 QCOMPARE(requests.size(), 2); 0129 } 0130 QCOMPARE(job->error(), error); 0131 QCOMPARE(uploadCount, 1); 0132 0133 if(scenario != QStringLiteral("error server")) 0134 { 0135 QVERIFY(fakeserver.isAllScenarioDone()); 0136 } 0137 } 0138 void error_data() 0139 { 0140 QTest::addColumn<QString>("scenario"); 0141 QTest::addColumn<int>("error"); 0142 0143 QTest::newRow("UploadDisabled") 0144 << QStringLiteral("<api><upload result=\"Failure\"><error code=\"upload-disabled\" info=\"\" /></upload> </api>") 0145 << int(Upload::UploadDisabled); 0146 0147 QTest::newRow("InvalidSessionKey") 0148 << QStringLiteral("<api><upload result=\"Failure\"><error code=\"invalid-session-key\" info=\"\" /></upload> </api>") 0149 << int(Upload::InvalidSessionKey); 0150 0151 QTest::newRow("BadAccess") 0152 << QStringLiteral("<api><upload result=\"Failure\"><error code=\"bad-access-groups\" info=\"\" /></upload> </api>") 0153 << int(Upload::BadAccess); 0154 0155 QTest::newRow("ParamMissing") 0156 << QStringLiteral("<api><upload result=\"Failure\"><error code=\"missing-param\" info=\"\" /></upload> </api>") 0157 << int(Upload::ParamMissing); 0158 0159 QTest::newRow("MustBeLoggedIn") 0160 << QStringLiteral("<api><upload result=\"Failure\"><error code=\"mustbeloggedin\" info=\"\" /></upload> </api>") 0161 << int(Upload::MustBeLoggedIn); 0162 0163 QTest::newRow("FetchFileError") 0164 << QStringLiteral("<api><upload result=\"Failure\"><error code=\"fetchfile-error\" info=\"\" /></upload> </api>") 0165 << int(Upload::FetchFileError); 0166 0167 QTest::newRow("NoModule") 0168 << QStringLiteral("<api><upload result=\"Failure\"><error code=\"no-module\" info=\"\" /></upload> </api>") 0169 << int(Upload::NoModule); 0170 0171 QTest::newRow("EmptyFile") 0172 << QStringLiteral("<api><upload result=\"Failure\"><error code=\"emptyfile\" info=\"\" /></upload> </api>") 0173 << int(Upload::EmptyFile); 0174 0175 QTest::newRow("ExtensionMissing") 0176 << QStringLiteral("<api><upload result=\"Failure\"><error code=\"filetype-missing\" info=\"\" /></upload> </api>") 0177 << int(Upload::ExtensionMissing); 0178 0179 QTest::newRow("TooShortFilename") 0180 << QStringLiteral("<api><upload result=\"Failure\"><error code=\"filenametooshort\" info=\"\" /></upload> </api>") 0181 << int(Upload::TooShortFilename); 0182 0183 QTest::newRow("OverWriting") 0184 << QStringLiteral("<api><upload result=\"Failure\"><error code=\"overwrite\" info=\"\" /></upload> </api>") 0185 << int(Upload::OverWriting); 0186 0187 QTest::newRow("StashFailed") 0188 << QStringLiteral("<api><upload result=\"Failure\"><error code=\"stashfailed\" info=\"\" /></upload> </api>") 0189 << int(Upload::StashFailed); 0190 0191 QTest::newRow("InternalError") 0192 << QStringLiteral("<api><upload result=\"Failure\"><error code=\"internal-error\" info=\"\" /></upload> </api>") 0193 << int(Upload::InternalError); 0194 } 0195 0196 void cleanupTestCase() 0197 { 0198 delete this->m_mediaWiki; 0199 delete this->m_file; 0200 } 0201 0202 private: 0203 0204 int uploadCount; 0205 QString request; 0206 QString m_infoScenario; 0207 QIODevice* m_file; 0208 MediaWiki* m_mediaWiki; 0209 }; 0210 0211 QTEST_MAIN(UploadTest) 0212 0213 #include "uploadtest.moc" 0214 0215 #endif // TEST_UPLOAD_H