File indexing completed on 2024-04-21 15:32:10
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 Ludovic Delfau 0011 * <a href="mailto:ludovicdelfau at gmail dot com">ludovicdelfau at gmail dot com</a> 0012 * @author Copyright (C) 2011 by Manuel Campomanes 0013 * <a href="mailto:campomanes dot manuel at gmail dot com">campomanes dot manuel at gmail dot com</a> 0014 * @author Copyright (C) 2010 by Hormiere Guillaume 0015 * <a href="mailto:hormiere dot guillaume at gmail dot com">hormiere dot guillaume at gmail dot com</a> 0016 * 0017 * This program is free software; you can redistribute it 0018 * and/or modify it under the terms of the GNU General 0019 * Public License as published by the Free Software Foundation; 0020 * either version 2, or (at your option) 0021 * any later version. 0022 * 0023 * This program is distributed in the hope that it will be useful, 0024 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0025 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0026 * GNU General Public License for more details. 0027 * 0028 * ============================================================ */ 0029 0030 #include <QList> 0031 #include <QMap> 0032 #include <QObject> 0033 #include <QString> 0034 #include <QUrl> 0035 #include <QTest> 0036 #include <QFile> 0037 #include <QTextStream> 0038 0039 #include <KJob> 0040 0041 #include "libmediawikitest/fakeserver.h" 0042 0043 #include "mediawiki.h" 0044 #include "queryrevision.h" 0045 #include "revision.h" 0046 0047 using mediawiki::MediaWiki; 0048 using mediawiki::QueryRevision; 0049 using mediawiki::Revision; 0050 0051 0052 Q_DECLARE_METATYPE(QList<Revision>) 0053 Q_DECLARE_METATYPE(FakeServer::Request) 0054 Q_DECLARE_METATYPE(QueryRevision*) 0055 Q_DECLARE_METATYPE(QueryRevision::Properties) 0056 0057 Revision constructRevision(int i,int p, int s, bool m, QString u, QDateTime t, QString cm, QString ct, QString pt, QString r){ 0058 0059 Revision rev; 0060 rev.setRevisionId(i); 0061 rev.setParentId(p); 0062 rev.setSize(s); 0063 rev.setMinorRevision(m); 0064 rev.setUser(u); 0065 rev.setTimestamp(t); 0066 rev.setComment(cm); 0067 rev.setContent(ct); 0068 rev.setParseTree(pt); 0069 rev.setRollback(r); 0070 return rev; 0071 0072 } 0073 0074 QString QStringFromFile( const QString &fileName ) 0075 { 0076 QFile file( fileName ); 0077 file.open( QFile::ReadOnly ); 0078 QTextStream in(&file); 0079 QString scenario; 0080 // When loading from files we never have the authentication phase 0081 // force jumping directly to authenticated state. 0082 0083 while ( !in.atEnd() ) { 0084 scenario.append( in.readLine() ); 0085 } 0086 file.close(); 0087 return scenario; 0088 } 0089 0090 class QueryRevisionTest : public QObject 0091 { 0092 0093 Q_OBJECT 0094 0095 public Q_SLOTS: 0096 0097 void revisionHandle(const QList<Revision> & revision) { 0098 ++revisionCount; 0099 revisionResults = revision; 0100 } 0101 0102 private Q_SLOTS: 0103 0104 void init() { 0105 revisionCount = 0; 0106 revisionResults.clear(); 0107 } 0108 0109 void testrvpropall() { 0110 QFETCH(QString, scenario); 0111 QFETCH(FakeServer::Request, requestTrue); 0112 QFETCH(QString, title); 0113 QFETCH(int, error); 0114 QFETCH(QueryRevision::Properties, rvprop); 0115 QFETCH(int, size); 0116 QFETCH(QList<Revision>, results); 0117 0118 0119 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0120 FakeServer fakeserver; 0121 fakeserver.setScenario(scenario); 0122 fakeserver.startAndWait(); 0123 0124 QueryRevision * job = new QueryRevision(mediawiki); 0125 job->setProperties(rvprop); 0126 job->setPageName(title); 0127 0128 connect(job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0129 0130 job->exec(); 0131 0132 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0133 QCOMPARE(requests.size(), 1); 0134 0135 FakeServer::Request request = requests[0]; 0136 QCOMPARE( requestTrue.type, request.type); 0137 QCOMPARE(job->error(), error); 0138 QCOMPARE(revisionCount, 1); 0139 QCOMPARE(requestTrue.value, request.value); 0140 QCOMPARE(revisionResults.size(), size); 0141 0142 QCOMPARE(revisionResults, results); 0143 0144 QVERIFY(fakeserver.isAllScenarioDone()); 0145 } 0146 void testrvpropall_data() { 0147 QTest::addColumn<QString>("scenario"); 0148 QTest::addColumn<FakeServer::Request>("requestTrue"); 0149 QTest::addColumn<QString>("title"); 0150 QTest::addColumn<int>("error"); 0151 QTest::addColumn<QueryRevision::Properties>("rvprop"); 0152 QTest::addColumn<int>("size"); 0153 QTest::addColumn< QList<Revision> >("results"); 0154 0155 QTest::newRow("All rvprop enable") 0156 << QStringFromFile(QCoreApplication::applicationFilePath() + QStringLiteral(".rc")) 0157 << FakeServer::Request(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvprop=ids%7Cflags%7Ctimestamp%7Cuser%7Ccomment%7Csize%7Ccontent&titles=API%7CMain%20Page")) 0158 << QStringLiteral("API|Main%20Page") 0159 << int(KJob::NoError) 0160 << QueryRevision::Properties(QueryRevision::Ids | QueryRevision::Flags | QueryRevision::Timestamp |QueryRevision::User | QueryRevision::Comment | QueryRevision::Size | QueryRevision::Content) 0161 << 2 0162 << (QList<Revision>() 0163 << constructRevision(367741756, 367741564, 70, false, QStringLiteral("Graham87"), 0164 QDateTime::fromString(QStringLiteral("2010-06-13T08:41:17Z"),QStringLiteral("yyyy-MM-ddThh:mm:ssZ")), 0165 QStringLiteral("Protected API: restore protection ([edit=sysop] (indefinite) [move=sysop] (indefinite))"), 0166 QStringLiteral("#REDIRECT [[Application programming interface]]{{R from abbreviation}}"),QString(),QString()) 0167 << constructRevision(387545037, 387542946, 5074, false, QStringLiteral("Rich Farmbrough"), 0168 QDateTime::fromString(QStringLiteral("2010-09-28T15:21:07Z"),QStringLiteral("yyyy-MM-ddThh:mm:ssZ")), 0169 QStringLiteral("[[Help:Reverting|Reverted]] edits by [[Special:Contributions/Rich Farmbrough|Rich Farmbrough]] ([[User talk:Rich Farmbrough|talk]]) to last version by David Levy"), 0170 QStringFromFile(QCoreApplication::applicationFilePath() + QStringLiteral("_content.rc")),QString(),QString())); 0171 0172 QTest::newRow("One title") 0173 << QStringFromFile(QCoreApplication::applicationFilePath() + QStringLiteral("_onetitle.rc")) 0174 << FakeServer::Request(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvprop=ids%7Cflags%7Ctimestamp%7Cuser%7Ccomment%7Csize%7Ccontent&titles=API")) 0175 << QStringLiteral("API") 0176 << int(KJob::NoError) 0177 << QueryRevision::Properties(QueryRevision::Ids | QueryRevision::Flags | QueryRevision::Timestamp |QueryRevision::User | QueryRevision::Comment | QueryRevision::Size | QueryRevision::Content) 0178 << 1 0179 << (QList<Revision>() 0180 << constructRevision(367741756, 367741564, 70, false, QStringLiteral("Graham87"), 0181 QDateTime::fromString(QStringLiteral("2010-06-13T08:41:17Z"),QStringLiteral("yyyy-MM-ddThh:mm:ssZ")), 0182 QStringLiteral("Protected API: restore protection ([edit=sysop] (indefinite) [move=sysop] (indefinite))"), 0183 QStringLiteral("#REDIRECT [[Application programming interface]]{{R from abbreviation}}"),QString(),QString())); 0184 0185 QTest::newRow("Timestamp only") 0186 << QStringFromFile(QCoreApplication::applicationFilePath() + QStringLiteral("_timestamponly.rc")) 0187 << FakeServer::Request(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvprop=timestamp&titles=API%7CMain%20Page")) 0188 << QStringLiteral("API|Main%20Page") 0189 << int(KJob::NoError) 0190 << QueryRevision::Properties(QueryRevision::Timestamp) 0191 << 2 0192 << (QList<Revision>() 0193 << constructRevision(-1, -1, -1, false, QString(), 0194 QDateTime::fromString(QStringLiteral("2010-06-13T08:41:17Z"),QStringLiteral("yyyy-MM-ddThh:mm:ssZ")), 0195 QString(), 0196 QString(),QString(),QString()) 0197 << constructRevision(-1, -1, -1, false, QString(), 0198 QDateTime::fromString(QStringLiteral("2010-09-28T15:21:07Z"),QStringLiteral("yyyy-MM-ddThh:mm:ssZ")), 0199 QString(), 0200 QString(),QString(),QString())); 0201 QTest::newRow("User only") 0202 << QStringFromFile(QCoreApplication::applicationFilePath() + QStringLiteral("_useronly.rc")) 0203 << FakeServer::Request(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvprop=user&titles=API%7CMain%20Page")) 0204 << QStringLiteral("API|Main%20Page") 0205 << int(KJob::NoError) 0206 << QueryRevision::Properties(QueryRevision::User) 0207 << 2 0208 << (QList<Revision>() 0209 << constructRevision(-1, -1, -1, false, QStringLiteral("Graham87"), 0210 QDateTime(), 0211 QString(), 0212 QString(),QString(),QString()) 0213 << constructRevision(-1, -1, -1, false, QStringLiteral("Rich Farmbrough"), 0214 QDateTime(), 0215 QString(), 0216 QString(),QString(),QString())); 0217 0218 } 0219 0220 void testerror() 0221 { 0222 QFETCH(QString, scenario); 0223 QFETCH(int, error); 0224 0225 0226 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0227 FakeServer fakeserver; 0228 if(scenario != QStringLiteral("error serveur")) 0229 { 0230 fakeserver.setScenario(scenario); 0231 fakeserver.startAndWait(); 0232 } 0233 0234 QueryRevision * job = new QueryRevision(mediawiki); 0235 job->setProperties( QueryRevision::Size | QueryRevision::Content ); 0236 job->setPageName(QStringLiteral("title")); 0237 0238 connect(job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0239 0240 job->exec(); 0241 0242 if(scenario != QStringLiteral("error serveur")) 0243 { 0244 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0245 QCOMPARE(requests.size(), 1); 0246 } 0247 QCOMPARE(job->error(), error); 0248 QCOMPARE(revisionCount, 0); 0249 QCOMPARE(revisionResults.size(), 0); 0250 0251 if(scenario != QStringLiteral("error serveur")) 0252 { 0253 QVERIFY(fakeserver.isAllScenarioDone()); 0254 } 0255 } 0256 void testerror_data() 0257 { 0258 QTest::addColumn<QString>("scenario"); 0259 QTest::addColumn<int>("error"); 0260 0261 QTest::newRow("XML") 0262 << QStringFromFile(QCoreApplication::applicationFilePath() + QStringLiteral("_cuted.rc")) 0263 << int(QueryRevision::XmlError); 0264 0265 QTest::newRow("Network") 0266 << QStringLiteral("error serveur") 0267 << int(QueryRevision::NetworkError); 0268 0269 QTest::newRow("Revision Ids") 0270 << QStringLiteral("<api><error code=\"rvrevids\" info=\"\"/></api>") 0271 << int(QueryRevision::WrongRevisionId); 0272 0273 QTest::newRow("Multilple pages") 0274 << QStringLiteral("<api><error code=\"rvmultpages\" info=\"\"/></api>") 0275 << int(QueryRevision::MultiPagesNotAllowed); 0276 0277 QTest::newRow("Access Denied") 0278 << QStringLiteral("<api><error code=\"rvaccessdenied\" info=\"\"/></api>") 0279 << int(QueryRevision::TitleAccessDenied); 0280 0281 QTest::newRow("Add Parameters") 0282 << QStringLiteral("<api><error code=\"rvbadparams\" info=\"\"/></api>") 0283 << int(QueryRevision::TooManyParams); 0284 0285 QTest::newRow("No Such Section") 0286 << QStringLiteral("<api><error code=\"rvnosuchsection\" info=\"\"/></api>") 0287 << int(QueryRevision::SectionNotFound); 0288 0289 } 0290 void testRvLimit() 0291 { 0292 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0293 FakeServer::Request requestSend(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvlimit=2&titles=API")); 0294 QueryRevision job(mediawiki); 0295 job.setPageName(QStringLiteral("API")); 0296 job.setLimit(2); 0297 0298 FakeServer fakeserver; 0299 fakeserver.startAndWait(); 0300 0301 connect(&job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0302 0303 job.exec(); 0304 0305 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0306 QCOMPARE(requests.size(), 1); 0307 QCOMPARE(requests[0].value, requestSend.value); 0308 QCOMPARE(requests[0].type, requestSend.type); 0309 QVERIFY(fakeserver.isAllScenarioDone()); 0310 } 0311 void testRvStartId() 0312 { 0313 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0314 FakeServer::Request requestSend(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvstartid=2&titles=API")); 0315 QueryRevision job(mediawiki); 0316 job.setPageName(QStringLiteral("API")); 0317 job.setStartId(2); 0318 0319 FakeServer fakeserver; 0320 fakeserver.startAndWait(); 0321 0322 connect(&job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0323 0324 job.exec(); 0325 0326 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0327 QCOMPARE(requests.size(), 1); 0328 QCOMPARE(requests[0].value, requestSend.value); 0329 QCOMPARE(requests[0].type, requestSend.type); 0330 QVERIFY(fakeserver.isAllScenarioDone()); 0331 } 0332 void testRvEndId() 0333 { 0334 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0335 FakeServer::Request requestSend(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvendid=2&titles=API")); 0336 QueryRevision job(mediawiki); 0337 job.setPageName(QStringLiteral("API")); 0338 job.setEndId(2); 0339 0340 FakeServer fakeserver; 0341 fakeserver.startAndWait(); 0342 0343 connect(&job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0344 0345 job.exec(); 0346 0347 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0348 QCOMPARE(requests.size(), 1); 0349 QCOMPARE(requests[0].value, requestSend.value); 0350 QCOMPARE(requests[0].type, requestSend.type); 0351 QVERIFY(fakeserver.isAllScenarioDone()); 0352 } 0353 0354 void testRvStart() 0355 { 0356 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0357 FakeServer::Request requestSend(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvstart=2010-09-28T15:21:07Z&titles=API")); 0358 QueryRevision job(mediawiki); 0359 job.setPageName(QStringLiteral("API")); 0360 job.setStartTimestamp(QDateTime::fromString(QStringLiteral("2010-09-28T15:21:07Z"),QStringLiteral("yyyy-MM-ddThh:mm:ssZ"))); 0361 0362 FakeServer fakeserver; 0363 fakeserver.startAndWait(); 0364 0365 connect(&job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0366 0367 job.exec(); 0368 0369 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0370 QCOMPARE(requests.size(), 1); 0371 QCOMPARE(requests[0].value, requestSend.value); 0372 QCOMPARE(requests[0].type, requestSend.type); 0373 QVERIFY(fakeserver.isAllScenarioDone()); 0374 } 0375 0376 void testRvEnd() 0377 { 0378 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0379 FakeServer::Request requestSend(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvend=2010-09-28T15:21:07Z&titles=API")); 0380 QueryRevision job(mediawiki); 0381 job.setPageName(QStringLiteral("API")); 0382 job.setEndTimestamp(QDateTime::fromString(QStringLiteral("2010-09-28T15:21:07Z"),QStringLiteral("yyyy-MM-ddThh:mm:ssZ"))); 0383 0384 FakeServer fakeserver; 0385 fakeserver.startAndWait(); 0386 0387 connect(&job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0388 0389 job.exec(); 0390 0391 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0392 QCOMPARE(requests.size(), 1); 0393 QCOMPARE(requests[0].value, requestSend.value); 0394 QCOMPARE(requests[0].type, requestSend.type); 0395 QVERIFY(fakeserver.isAllScenarioDone()); 0396 } 0397 0398 void testRvUser() 0399 { 0400 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0401 FakeServer::Request requestSend(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvuser=martine&titles=API")); 0402 QueryRevision job(mediawiki); 0403 job.setPageName(QStringLiteral("API")); 0404 job.setUser(QStringLiteral("martine")); 0405 0406 FakeServer fakeserver; 0407 fakeserver.startAndWait(); 0408 0409 connect(&job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0410 0411 job.exec(); 0412 0413 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0414 QCOMPARE(requests.size(), 1); 0415 QCOMPARE(requests[0].value, requestSend.value); 0416 QCOMPARE(requests[0].type, requestSend.type); 0417 QVERIFY(fakeserver.isAllScenarioDone()); 0418 } 0419 0420 void testRvExcludeUser() 0421 { 0422 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0423 FakeServer::Request requestSend(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvexcludeuser=martine&titles=API")); 0424 QueryRevision job(mediawiki); 0425 job.setPageName(QStringLiteral("API")); 0426 job.setExcludeUser(QStringLiteral("martine")); 0427 0428 FakeServer fakeserver; 0429 fakeserver.startAndWait(); 0430 0431 connect(&job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0432 0433 job.exec(); 0434 0435 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0436 QCOMPARE(requests.size(), 1); 0437 QCOMPARE(requests[0].value, requestSend.value); 0438 QCOMPARE(requests[0].type, requestSend.type); 0439 QVERIFY(fakeserver.isAllScenarioDone()); 0440 } 0441 0442 void testRvDirOlder() 0443 { 0444 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0445 FakeServer::Request requestSend(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvdir=older&titles=API")); 0446 QueryRevision job(mediawiki); 0447 job.setPageName(QStringLiteral("API")); 0448 job.setDirection(QueryRevision::Older); 0449 0450 FakeServer fakeserver; 0451 fakeserver.startAndWait(); 0452 0453 connect(&job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0454 0455 job.exec(); 0456 0457 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0458 QCOMPARE(requests.size(), 1); 0459 QCOMPARE(requests[0].value, requestSend.value); 0460 QCOMPARE(requests[0].type, requestSend.type); 0461 QVERIFY(fakeserver.isAllScenarioDone()); 0462 } 0463 0464 void testRvDirNewer() 0465 { 0466 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0467 FakeServer::Request requestSend(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvdir=newer&titles=API")); 0468 QueryRevision job(mediawiki); 0469 job.setPageName(QStringLiteral("API")); 0470 job.setDirection(QueryRevision::Newer); 0471 0472 FakeServer fakeserver; 0473 fakeserver.startAndWait(); 0474 0475 connect(&job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0476 0477 job.exec(); 0478 0479 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0480 QCOMPARE(requests.size(), 1); 0481 QCOMPARE(requests[0].value, requestSend.value); 0482 QCOMPARE(requests[0].type, requestSend.type); 0483 QVERIFY(fakeserver.isAllScenarioDone()); 0484 } 0485 void testGenerateXML() 0486 { 0487 QString scenario = QStringFromFile(QCoreApplication::applicationFilePath() + QStringLiteral("_parsetree.rc")); 0488 FakeServer::Request requestTrue(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvgeneratexml=on&rvprop=timestamp%7Cuser%7Ccomment%7Ccontent&titles=API")); 0489 QString title = QStringLiteral("API"); 0490 int error = 0; 0491 QueryRevision::Properties rvprop = QueryRevision::Timestamp |QueryRevision::User | QueryRevision::Comment | QueryRevision::Content; 0492 int size = 2; 0493 QList<Revision> results; 0494 0495 Revision rev; 0496 rev.setUser(QStringLiteral("martine")); 0497 rev.setTimestamp(QDateTime::fromString(QStringLiteral("2010-06-13T08:41:17Z"),QStringLiteral("yyyy-MM-ddThh:mm:ssZ"))); 0498 rev.setComment(QStringLiteral("Protected API: restore protection ([edit=sysop] (indefinite) [move=sysop] (indefinite))")); 0499 rev.setContent(QStringLiteral("#REDIRECT [[Application programming interface]]{{R from abbreviation}}")); 0500 rev.setParseTree(QStringLiteral("<root>#REDIRECT [[Application programming interface]]<template><title>R from abbreviation</title></template></root>")); 0501 results << rev; 0502 Revision rev2; 0503 rev2.setUser(QStringLiteral("Graham87")); 0504 rev2.setTimestamp(QDateTime::fromString(QStringLiteral("2010-06-13T08:41:17Z"),QStringLiteral("yyyy-MM-ddThh:mm:ssZ"))); 0505 rev2.setComment(QStringLiteral("Protected API: restore protection ([edit=sysop] (indefinite) [move=sysop] (indefinite))")); 0506 rev2.setContent(QStringLiteral("#REDIRECT [[Application programming interface]]{{R from abbreviation}}")); 0507 rev2.setParseTree(QStringLiteral("<root>#REDIRECT [[Application programming interface]]<template><title>R from abbreviation</title></template></root>")); 0508 results << rev2; 0509 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0510 0511 FakeServer fakeserver; 0512 fakeserver.setScenario(scenario); 0513 fakeserver.startAndWait(); 0514 0515 QueryRevision * job = new QueryRevision(mediawiki); 0516 job->setProperties( rvprop ); 0517 job->setPageName(title); 0518 job->setGenerateXML(true); 0519 0520 connect(job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0521 0522 job->exec(); 0523 0524 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0525 QCOMPARE(requests.size(), 1); 0526 0527 FakeServer::Request request = requests[0]; 0528 QCOMPARE(request.type, requestTrue.type); 0529 QCOMPARE(revisionCount, 1); 0530 QCOMPARE(request.value, requestTrue.value); 0531 0532 QCOMPARE(job->error(), error); 0533 QCOMPARE(revisionResults.size(), size); 0534 QCOMPARE(revisionResults, results); 0535 0536 QVERIFY(fakeserver.isAllScenarioDone()); 0537 } 0538 void testRvSection() 0539 { 0540 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0541 FakeServer::Request requestSend(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvsection=1&titles=API")); 0542 QueryRevision job(mediawiki); 0543 job.setPageName(QStringLiteral("API")); 0544 job.setSection(1); 0545 0546 FakeServer fakeserver; 0547 fakeserver.startAndWait(); 0548 0549 connect(&job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0550 0551 job.exec(); 0552 0553 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0554 QCOMPARE(requests.size(), 1); 0555 QCOMPARE(requests[0].value, requestSend.value); 0556 QCOMPARE(requests[0].type, requestSend.type); 0557 QVERIFY(fakeserver.isAllScenarioDone()); 0558 } 0559 void testRvToken() 0560 { 0561 QString scenario = QStringFromFile(QCoreApplication::applicationFilePath() + QStringLiteral("_rollback.rc")); 0562 FakeServer::Request requestTrue(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvtoken=rollback&titles=API")); 0563 QString title = QStringLiteral("API"); 0564 int error = 0; 0565 int size = 1; 0566 QList<Revision> results; 0567 results << constructRevision(-1, -1, -1, false, QString(), 0568 QDateTime(), 0569 QString(), 0570 QString(), 0571 QString() 0572 ,QStringLiteral("094a45ddbbd5e90d55d79d2a23a8c921+\\")); 0573 0574 0575 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0576 0577 FakeServer fakeserver; 0578 fakeserver.setScenario(scenario); 0579 fakeserver.startAndWait(); 0580 0581 QueryRevision * job = new QueryRevision(mediawiki); 0582 job->setPageName(title); 0583 0584 job->setToken(QueryRevision::Rollback); 0585 0586 connect(job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0587 0588 job->exec(); 0589 0590 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0591 QCOMPARE(requests.size(), 1); 0592 0593 FakeServer::Request request = requests[0]; 0594 QCOMPARE( requestTrue.type, request.type); 0595 QCOMPARE(revisionCount, 1); 0596 QCOMPARE(requestTrue.value, request.value); 0597 0598 QCOMPARE(job->error(), error); 0599 QCOMPARE(revisionResults.size(), size); 0600 QCOMPARE(revisionResults, results); 0601 0602 QVERIFY(fakeserver.isAllScenarioDone()); 0603 } 0604 void testRvExpandTemplates() 0605 { 0606 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0607 FakeServer::Request requestSend(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&rvexpandtemplates=on&titles=API")); 0608 QueryRevision job(mediawiki); 0609 job.setPageName(QStringLiteral("API")); 0610 job.setExpandTemplates(true); 0611 0612 FakeServer fakeserver; 0613 fakeserver.startAndWait(); 0614 0615 connect(&job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0616 0617 job.exec(); 0618 0619 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0620 QCOMPARE(requests.size(), 1); 0621 QCOMPARE(requests[0].value, requestSend.value); 0622 QCOMPARE(requests[0].type, requestSend.type); 0623 QVERIFY(fakeserver.isAllScenarioDone()); 0624 } 0625 void testRvPageId(){ 0626 FakeServer::Request requestTrue(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&pageids=2993&rvprop=timestamp%7Cuser%7Ccomment%7Ccontent")); 0627 QueryRevision::Properties rvprop = QueryRevision::Timestamp |QueryRevision::User | QueryRevision::Comment | QueryRevision::Content; 0628 int id= 2993; 0629 0630 0631 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0632 0633 FakeServer fakeserver; 0634 fakeserver.startAndWait(); 0635 0636 QueryRevision * job = new QueryRevision(mediawiki); 0637 job->setProperties( rvprop ); 0638 job->setPageId(id); 0639 0640 connect(job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0641 0642 job->exec(); 0643 0644 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0645 QCOMPARE(requests.size(), 1); 0646 0647 FakeServer::Request request = requests[0]; 0648 QCOMPARE( requestTrue.type, request.type); 0649 QCOMPARE(revisionCount, 0); 0650 QCOMPARE(requestTrue.value, request.value); 0651 0652 QVERIFY(fakeserver.isAllScenarioDone()); 0653 0654 } 0655 0656 void testRvRevisionId(){ 0657 FakeServer::Request requestTrue(QStringLiteral("GET"),QString(),QStringLiteral("/?format=xml&action=query&prop=revisions&revids=2993&rvprop=timestamp%7Cuser%7Ccomment%7Ccontent")); 0658 QueryRevision::Properties rvprop = QueryRevision::Timestamp |QueryRevision::User | QueryRevision::Comment | QueryRevision::Content; 0659 int id= 2993; 0660 0661 0662 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0663 0664 FakeServer fakeserver; 0665 fakeserver.startAndWait(); 0666 0667 QueryRevision * job = new QueryRevision(mediawiki); 0668 job->setProperties( rvprop ); 0669 job->setRevisionId(id); 0670 0671 connect(job, SIGNAL(revision(QList<Revision>)), this, SLOT(revisionHandle(QList<Revision>))); 0672 0673 job->exec(); 0674 0675 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0676 QCOMPARE(requests.size(), 1); 0677 0678 FakeServer::Request request = requests[0]; 0679 QCOMPARE( requestTrue.type, request.type); 0680 QCOMPARE(revisionCount, 0); 0681 QCOMPARE(requestTrue.value, request.value); 0682 0683 QVERIFY(fakeserver.isAllScenarioDone()); 0684 } 0685 0686 private: 0687 0688 int revisionCount; 0689 QList<Revision> revisionResults; 0690 }; 0691 0692 QTEST_MAIN(QueryRevisionTest) 0693 0694 #include "queryrevisiontest.moc"