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) 2011 by Manuel Campomanes
0011  *         <a href="mailto:campomanes dot manuel at gmail dot com">campomanes dot manuel at gmail dot com</a>
0012  * @author Copyright (C) 2010 by Hormiere Guillaume
0013  *         <a href="mailto:hormiere dot guillaume at gmail dot com">hormiere dot guillaume at gmail dot com</a>
0014  *
0015  * This program is free software; you can redistribute it
0016  * and/or modify it under the terms of the GNU General
0017  * Public License as published by the Free Software Foundation;
0018  * either version 2, or (at your option)
0019  * any later version.
0020  *
0021  * This program is distributed in the hope that it will be useful,
0022  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0023  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0024  * GNU General Public License for more details.
0025  *
0026  * ============================================================ */
0027 
0028 #ifndef TEST_GENERAL_H
0029 #define TEST_GENERAL_H
0030 
0031 #include <QObject>
0032 #include <QtTest>
0033 
0034 #include <KJob>
0035 
0036 #include "libmediawikitest/fakeserver.h"
0037 
0038 #include "mediawiki.h"
0039 #include "querysiteinfogeneral.h"
0040 #include "generalinfo.h"
0041 
0042 using mediawiki::MediaWiki;
0043 using mediawiki::QuerySiteInfoGeneral;
0044 using mediawiki::Generalinfo;
0045 
0046 class QuerySiteInfoGeneralTest : public QObject
0047 {
0048     Q_OBJECT
0049 
0050 public Q_SLOTS:
0051 
0052 void resultHandle(const Generalinfo& generalinfo)
0053 {
0054     ++generalCount;
0055     generalResult = generalinfo;
0056 }
0057 
0058 private Q_SLOTS:
0059 
0060 void initTestCase()
0061 {
0062     generalCount  = 0;
0063     this->request = QStringLiteral("/?format=xml&action=query&meta=siteinfo&siprop=general");
0064 }
0065 void QuerySiteInfoGeneralTestConnectTrue()
0066 {
0067     MediaWiki mediaWiki(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0068     FakeServer server;
0069 
0070     generalCount = 0;
0071     QString senario(QStringLiteral("<api><query><general mainpage=\"Main Page\" base=\"http://en.wikipedia.org/wiki/Main_Page\" sitename=\"Wikipedia\" generator=\"MediaWiki 1.16wmf4\" phpversion=\"5.2.4-2ubuntu5.12wm1\" phpsapi=\"apache2handler\" dbtype=\"mysql\" dbversion=\"5.1.46-facebook-r3489-log\" rev=\"75268\" case=\"first-letter\" rights=\"Creative Commons Attribution-Share Alike 3.0 Unported\" lang=\"en\" fallback8bitEncoding=\"windows-1252\" writeapi=\"\" timezone=\"UTC\" timeoffset=\"0\" articlepath=\"/wiki/$1\" scriptpath=\"/w\" script=\"/w/index.php\" variantarticlepath=\"\" server=\"http://en.wikipedia.org\" wikiid=\"enwiki\" time=\"2010-10-24T19:53:13Z\"/></query></api>"));
0072     server.addScenario(senario);
0073     server.startAndWait();
0074 
0075     QuerySiteInfoGeneral* const general = new QuerySiteInfoGeneral(mediaWiki);
0076 
0077     connect(general, SIGNAL(result(Generalinfo)),
0078             this, SLOT(resultHandle(Generalinfo)));
0079 
0080     general->exec();
0081     FakeServer::Request serverrequest = server.getRequest()[0];
0082     QCOMPARE(this->generalCount, 1);
0083     QCOMPARE(serverrequest.type, QStringLiteral("GET"));
0084     QCOMPARE(serverrequest.value, this->request);
0085     QVERIFY(general->error() == QuerySiteInfoGeneral::NoError);
0086 }
0087 
0088 void QuerySiteInfoGeneralTestAttribute()
0089 {
0090     MediaWiki mediaWiki(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0091     FakeServer server;
0092 
0093     generalCount = 0;
0094     QString senario(QStringLiteral("<api><query><general mainpage=\"Main Page\" base=\"http://en.wikipedia.org/wiki/Main_Page\" sitename=\"Wikipedia\" generator=\"MediaWiki 1.16wmf4\" phpversion=\"5.2.4-2ubuntu5.12wm1\" phpsapi=\"apache2handler\" dbtype=\"mysql\" dbversion=\"5.1.46-facebook-r3489-log\" rev=\"75268\" case=\"first-letter\" rights=\"Creative Commons Attribution-Share Alike 3.0 Unported\" lang=\"en\" fallback8bitEncoding=\"windows-1252\" writeapi=\"\" timezone=\"UTC\" timeoffset=\"0\" articlepath=\"/wiki/$1\" scriptpath=\"/w\" script=\"/w/index.php\" variantarticlepath=\"\" server=\"http://en.wikipedia.org\" wikiid=\"enwiki\" time=\"2010-10-24T19:53:13Z\"/></query></api>"));
0095     server.addScenario(senario);
0096     server.startAndWait();
0097 
0098     QuerySiteInfoGeneral* const general = new QuerySiteInfoGeneral(mediaWiki);
0099 
0100     connect(general, SIGNAL(result(Generalinfo)),
0101             this, SLOT(resultHandle(Generalinfo)));
0102 
0103     general->exec();
0104     FakeServer::Request serverrequest = server.getRequest()[0];
0105     QCOMPARE(this->generalCount, 1);
0106     QCOMPARE(serverrequest.type, QStringLiteral("GET"));
0107     QCOMPARE(serverrequest.value, this->request);
0108     QVERIFY(general->error() == QuerySiteInfoGeneral::NoError);
0109     Generalinfo resultExpected;
0110     resultExpected.setMainPage(QStringLiteral("Main Page"));
0111     resultExpected.setUrl(QUrl(QStringLiteral("http://en.wikipedia.org/wiki/Main_Page")));
0112     resultExpected.setSiteName(QStringLiteral("Wikipedia"));
0113     resultExpected.setGenerator(QStringLiteral("MediaWiki 1.16wmf4"));
0114     resultExpected.setPhpVersion(QStringLiteral("5.2.4-2ubuntu5.12wm1"));
0115     resultExpected.setPhpApi(QStringLiteral("apache2handler"));
0116     resultExpected.setDataBaseType(QStringLiteral("mysql"));
0117     resultExpected.setDataBaseVersion(QStringLiteral("5.1.46-facebook-r3489-log"));
0118     resultExpected.setRev(QStringLiteral("75268"));
0119     resultExpected.setCas(QStringLiteral("first-letter"));
0120     resultExpected.setLicence(QStringLiteral("Creative Commons Attribution-Share Alike 3.0 Unported"));
0121     resultExpected.setLanguage(QStringLiteral("en"));
0122     resultExpected.setFallBack8bitEncoding(QStringLiteral("windows-1252"));
0123     resultExpected.setWriteApi(QStringLiteral(""));
0124     resultExpected.setTimeZone(QStringLiteral("UTC"));
0125     resultExpected.setTimeOffset(QStringLiteral("0"));
0126     resultExpected.setArticlePath(QStringLiteral("/wiki/$1"));
0127     resultExpected.setScriptPath(QStringLiteral("/w"));
0128     resultExpected.setScript(QStringLiteral("/w/index.php"));
0129     resultExpected.setVariantArticlePath(QString());
0130     resultExpected.setServerUrl(QUrl(QStringLiteral("http://en.wikipedia.org")));
0131     resultExpected.setWikiId(QStringLiteral("enwiki"));
0132     resultExpected.setTime(QDateTime(QDate(2010, 10, 24), QTime(19, 53, 13)));
0133     QCOMPARE(generalResult, resultExpected);
0134 }
0135 
0136 void QuerySiteInfoGeneralTestConnectFalseXML()
0137 {
0138 
0139     MediaWiki mediaWiki(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0140     FakeServer server;
0141 
0142     generalCount = 0;
0143     QString senario(QStringLiteral("<api><query<general mainpage=\"Main Page\" base=\"http://en.wikipedia.org/wiki/Main_Page\" sitename=\"Wikipedia\" generator=\"MediaWiki 1.16wmf4\" phpversion=\"5.2.4-2ubuntu5.12wm1\" phpsapi=\"apache2handler\" dbtype=\"mysql\" dbversion=\"5.1.46-facebook-r3489-log\" rev=\"75268\" case=\"first-letter\" rights=\"Creative Commons Attribution-Share Alike 3.0 Unported\" lang=\"en\" fallback8bitEncoding=\"windows-1252\" writeapi=\"\" timezone=\"UTC\" timeoffset=\"0\" articlepath=\"/wiki/$1\" scriptpath=\"/w\" script=\"/w/index.php\" variantarticlepath=\"\" server=\"http://en.wikipedia.org\" wikiid=\"enwiki\" time=\"2010-10-24T19:53:13Z\"/>"));
0144     server.addScenario(senario);
0145     server.startAndWait();
0146 
0147     QuerySiteInfoGeneral* const general = new QuerySiteInfoGeneral(mediaWiki);
0148 
0149     connect(general, SIGNAL(result(Generalinfo)),
0150             this, SLOT(resultHandle(Generalinfo)));
0151 
0152     general->exec();
0153     FakeServer::Request serverrequest = server.getRequest()[0];
0154     QCOMPARE(this->generalCount, 0);
0155     QCOMPARE(serverrequest.type, QStringLiteral("GET"));
0156     QCOMPARE(serverrequest.value, this->request);
0157     QVERIFY(general->error() == QuerySiteInfoGeneral::XmlError);
0158 }
0159 
0160 void QuerySiteInfoGeneralTestErrortIncludeAllDenied()
0161 {
0162     MediaWiki mediaWiki(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0163     FakeServer server;
0164 
0165     generalCount = 0;
0166     QString senario(QStringLiteral("<api><error code=\"includeAllDenied\" info=\"\"/></api>"));
0167     server.addScenario(senario);
0168     server.startAndWait();
0169 
0170     QuerySiteInfoGeneral* const general = new QuerySiteInfoGeneral(mediaWiki);
0171 
0172     connect(general, SIGNAL(result(Generalinfo)),
0173             this, SLOT(resultHandle(Generalinfo)));
0174 
0175     general->exec();
0176     FakeServer::Request serverrequest = server.getRequest()[0];
0177     QCOMPARE(this->generalCount, 0);
0178     QCOMPARE(serverrequest.type, QStringLiteral("GET"));
0179     QCOMPARE(serverrequest.value, this->request);
0180     QVERIFY(general->error() == QuerySiteInfoGeneral::IncludeAllDenied);
0181 }
0182 
0183 private:
0184 
0185     int         generalCount;
0186     Generalinfo generalResult;
0187     QString     request;
0188 };
0189 
0190 QTEST_MAIN(QuerySiteInfoGeneralTest)
0191 
0192 #include "querysiteinfogeneraltest.moc"
0193 
0194 #endif // TEST_GENERAL_H