File indexing completed on 2024-04-28 04:42:52
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"