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"