File indexing completed on 2024-04-14 14:55:14

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  *
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 #include <QObject>
0027 #include <QTest>
0028 
0029 #include "libmediawikitest/fakeserver.h"
0030 
0031 #include "mediawiki.h"
0032 #include "queryimages.h"
0033 #include "image.h"
0034 
0035 using mediawiki::MediaWiki;
0036 using mediawiki::QueryImages;
0037 using mediawiki::Image;
0038 
0039 Q_DECLARE_METATYPE(QList<QString>)
0040 Q_DECLARE_METATYPE(QList<Image>)
0041 Q_DECLARE_METATYPE(QList<QList<Image> >)
0042 
0043 
0044 class QueryImagesTest : public QObject {
0045 
0046     Q_OBJECT
0047 
0048 public Q_SLOTS:
0049 
0050     void imagesHandle(const QList<Image> & images) {
0051         imagesReceivedList.push_back(images);
0052     }
0053 
0054 private Q_SLOTS:
0055 
0056     void init() {
0057         imagesReceivedList.clear();
0058     }
0059 
0060     void testConstructor() {
0061         QFETCH(QList<QString>, scenarios);
0062         QFETCH(QString, title);
0063         QFETCH(unsigned int, limit);
0064         QFETCH(QList<QList<Image> >, imagesExpectedList);
0065 
0066         // Constructs the fakeserver
0067         FakeServer fakeserver;
0068         for (int i = 0; i < scenarios.size(); ++i) {
0069             if (i == 0) {
0070                 fakeserver.setScenario(scenarios[i]);
0071             } else {
0072                 fakeserver.addScenario(scenarios[i]);
0073             }
0074         }
0075         fakeserver.startAndWait();
0076 
0077         // Prepare the job
0078         MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0079         QueryImages * job = new QueryImages(mediawiki);
0080         job->setTitle(title);
0081         job->setLimit(limit);
0082         connect(job, SIGNAL(images(QList<Image>)), this, SLOT(imagesHandle(QList<Image>)));
0083         job->exec();
0084 
0085         // Test job
0086         QCOMPARE(job->error(), int(KJob::NoError));
0087 
0088         // Test requests sent
0089         const QList<FakeServer::Request> requests = fakeserver.getRequest();
0090         QCOMPARE(requests.size(), imagesExpectedList.size());
0091         for (int i = 0; i < requests.size(); ++i) {
0092             QCOMPARE(requests[i].agent, mediawiki.userAgent());
0093             QCOMPARE(requests[i].type, QStringLiteral("GET"));
0094             if (i == 0) {
0095                 QCOMPARE(requests[i].value, QString(QStringLiteral("/?format=xml&action=query&titles=") + title + QStringLiteral("&prop=images&imlimit=") + QString::number(limit)));
0096             } else {
0097                 QCOMPARE(requests[i].value, QString(QStringLiteral("/?format=xml&action=query&titles=") + title + QStringLiteral("&prop=images&imlimit=") + QString::number(limit) + QStringLiteral("&imcontinue=1234%7C") + imagesExpectedList[i][0].title().remove(0, 5)));
0098             }
0099         }
0100 
0101         // Test pages received
0102         QCOMPARE(imagesReceivedList, imagesExpectedList);
0103 
0104         // Test fakeserver
0105         QVERIFY(fakeserver.isAllScenarioDone());
0106     }
0107 
0108     void testConstructor_data() {
0109         QTest::addColumn<QList<QString> >("scenarios");
0110         QTest::addColumn<QString>("title");
0111         QTest::addColumn<unsigned int>("limit");
0112         QTest::addColumn<QList<QList<Image> > >("imagesExpectedList");
0113         Image image, image2, image3;
0114 
0115         QTest::newRow("Page with no image")
0116                 << (QList<QString>()
0117                         << QStringLiteral("<?xml version=\"1.0\"?><api><query><pages><page pageid=\"736\" ns=\"1\" title=\"Title-1\"></page></pages></query></api>"))
0118                 << QStringLiteral("Title-1")
0119                 << 10u
0120                 << (QList<QList<Image> >() << QList<Image>());
0121 
0122         image.setNamespaceId(46u);
0123         image.setTitle(QStringLiteral("File:Image-1-1"));
0124         QTest::newRow("Page with one image")
0125                 << (QList<QString>()
0126                         << QStringLiteral("<?xml version=\"1.0\"?><api><query><pages><page pageid=\"736\" ns=\"1\" title=\"Title-1\"><images><im ns=\"46\" title=\"File:Image-1-1\" /></images></page></pages></query></api>"))
0127                 << QStringLiteral("Title-1")
0128                 << 10u
0129                 << (QList<QList<Image> >() << (QList<Image>() << image));
0130 
0131         image2.setNamespaceId(9997u);
0132         image2.setTitle(QStringLiteral("File:Image-1-2"));
0133         QTest::newRow("Page with two images")
0134                 << (QList<QString>()
0135                         << QStringLiteral("<?xml version=\"1.0\"?><api><query><pages><page pageid=\"736\" ns=\"1\" title=\"Title-1\"><images><im ns=\"46\" title=\"File:Image-1-1\" /><im ns=\"9997\" title=\"File:Image-1-2\" /></images></page></pages></query></api>"))
0136                 << QStringLiteral("Title-1")
0137                 << 10u
0138                 << (QList<QList<Image> >() << (QList<Image>() << image << image2));
0139 
0140         image.setNamespaceId(8u);
0141         image.setTitle(QStringLiteral("File:Image-2-1"));
0142 
0143         image2.setNamespaceId(8998u);
0144         image2.setTitle(QStringLiteral("File:Image-2-2"));
0145 
0146         image3.setNamespaceId(38423283u);
0147         image3.setTitle(QStringLiteral("File:Image-2-3"));
0148 
0149         QTest::newRow("Page with three images by two signals")
0150                 << (QList<QString>()
0151                         << QStringLiteral("<?xml version=\"1.0\"?><api><query><pages><page pageid=\"1234\" ns=\"5757\" title=\"Title-2\"><images><im ns=\"8\" title=\"File:Image-2-1\" /><im ns=\"8998\" title=\"File:Image-2-2\" /></images></page></pages></query><query-continue><images imcontinue=\"1234|Image-2-3\" /></query-continue></api>")
0152                         << QStringLiteral("<?xml version=\"1.0\"?><api><query><pages><page pageid=\"1234\" ns=\"5757\" title=\"Title-2\"><images><im ns=\"38423283\" title=\"File:Image-2-3\" /></images></page></pages></query></api>"))
0153                 << QStringLiteral("Title-2")
0154                 << 2u
0155                 << (QList<QList<Image> >()
0156                         << (QList<Image>() << image << image2)
0157                         << (QList<Image>() << image3));
0158 
0159 
0160     }
0161 
0162 private:
0163 
0164     QList<QList<Image> >imagesReceivedList;
0165 };
0166 
0167 QTEST_MAIN(QueryImagesTest)
0168 
0169 #include "queryimagestest.moc"