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