File indexing completed on 2024-03-24 16:13:28
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) 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 #include <QList> 0029 #include <QObject> 0030 #include <QString> 0031 #include <QUrl> 0032 #include <QTest> 0033 0034 #include <KJob> 0035 0036 #include "libmediawikitest/fakeserver.h" 0037 0038 #include "mediawiki.h" 0039 #include "querysiteinfousergroups.h" 0040 #include "usergroup.h" 0041 0042 using mediawiki::MediaWiki; 0043 using mediawiki::QuerySiteinfoUsergroups; 0044 using mediawiki::UserGroup; 0045 0046 Q_DECLARE_METATYPE(QList<UserGroup>) 0047 0048 class QuerySiteinfoUsergroupsTest : public QObject 0049 { 0050 Q_OBJECT 0051 0052 public Q_SLOTS: 0053 0054 void usergroupsHandle(const QList<UserGroup> & usergroups) { 0055 ++usergroupsCount; 0056 usergroupsResults = usergroups; 0057 } 0058 0059 private Q_SLOTS: 0060 0061 void init() { 0062 usergroupsCount = 0; 0063 } 0064 0065 void testResult() { 0066 QFETCH(QString, scenario); 0067 QFETCH(bool, includeNumber); 0068 QFETCH(int, error); 0069 QFETCH(QList<UserGroup>, results); 0070 0071 FakeServer fakeserver; 0072 fakeserver.setScenario(scenario); 0073 fakeserver.startAndWait(); 0074 0075 MediaWiki mediawiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); 0076 QuerySiteinfoUsergroups * job = new QuerySiteinfoUsergroups(mediawiki); 0077 0078 job->setIncludeNumber(includeNumber); 0079 0080 connect(job, SIGNAL(usergroups(QList<UserGroup>)), this, SLOT(usergroupsHandle(QList<UserGroup>))); 0081 0082 job->exec(); 0083 0084 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0085 QCOMPARE(requests.size(), 1); 0086 0087 FakeServer::Request request = requests[0]; 0088 QCOMPARE(request.agent, mediawiki.userAgent()); 0089 QCOMPARE(request.type, QStringLiteral("GET")); 0090 if (includeNumber) { 0091 QCOMPARE(request.value, QStringLiteral("/?format=xml&action=query&meta=siteinfo&siprop=usergroups&sinumberingroup")); 0092 } else { 0093 QCOMPARE(request.value, QStringLiteral("/?format=xml&action=query&meta=siteinfo&siprop=usergroups")); 0094 } 0095 0096 QCOMPARE(job->error(), error); 0097 0098 QCOMPARE(usergroupsCount, 1); 0099 0100 QCOMPARE(usergroupsResults, results); 0101 0102 QVERIFY(fakeserver.isAllScenarioDone()); 0103 } 0104 0105 void testResult_data() { 0106 QTest::addColumn<QString>("scenario"); 0107 QTest::addColumn<bool>("includeNumber"); 0108 QTest::addColumn<int>("error"); 0109 QTest::addColumn< QList<UserGroup> >("results"); 0110 0111 UserGroup ug1,ug2,ug3; 0112 ug1.setName(QStringLiteral("name_1")); 0113 ug1.setRights(QList<QString>()); 0114 ug2.setName(QStringLiteral("name_2")); 0115 ug2.setRights(QList<QString>()); 0116 ug3.setName(QStringLiteral("name_3")); 0117 0118 QTest::newRow("No group") 0119 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups></usergroups></query></api>") 0120 << false 0121 << int(KJob::NoError) 0122 << QList<UserGroup>(); 0123 0124 QTest::newRow("One group with no right") 0125 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\"/></usergroups></query></api>") 0126 << false 0127 << int(KJob::NoError) 0128 << (QList<UserGroup>() << ug1); 0129 0130 ug1.setRights(ug1.rights() << QStringLiteral("permission_1_1")); 0131 QTest::newRow("One group with one right") 0132 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\"><rights><permission>permission_1_1</permission></rights></group></usergroups></query></api>") 0133 << false 0134 << int(KJob::NoError) 0135 << (QList<UserGroup>() << ug1); 0136 0137 ug1.setRights(ug1.rights() << QStringLiteral("permission_1_2")); 0138 QTest::newRow("One group with two rights") 0139 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\"><rights><permission>permission_1_1</permission><permission>permission_1_2</permission></rights></group></usergroups></query></api>") 0140 << false 0141 << int(KJob::NoError) 0142 << (QList<UserGroup>() << ug1); 0143 0144 ug1.setRights(QList<QString>()); 0145 QTest::newRow("Two groups with group one no right and group two no right") 0146 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\"></group><group name=\"name_2\" /></usergroups></query></api>") 0147 << false 0148 << int(KJob::NoError) 0149 << (QList<UserGroup>() << ug1 << ug2); 0150 0151 0152 ug2.setRights(ug2.rights() << QStringLiteral("permission_2_1")); 0153 QTest::newRow("Two groups with group one no right and group two one right") 0154 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\"></group><group name=\"name_2\"><rights><permission>permission_2_1</permission></rights></group></usergroups></query></api>") 0155 << false 0156 << int(KJob::NoError) 0157 << (QList<UserGroup>() << ug1 << ug2); 0158 0159 0160 ug2.setRights(ug2.rights() << QStringLiteral("permission_2_2")); 0161 QTest::newRow("Two groups with group one no right and group two two rights") 0162 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\"></group><group name=\"name_2\"><rights><permission>permission_2_1</permission><permission>permission_2_2</permission></rights></group></usergroups></query></api>") 0163 << false 0164 << int(KJob::NoError) 0165 << (QList<UserGroup>() << ug1 << ug2); 0166 0167 0168 ug1.setRights(ug1.rights() << QStringLiteral("permission_1_1")); 0169 ug2.setRights(QList<QString>()); 0170 QTest::newRow("Two groups with group one one right and group two no right") 0171 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\"><rights><permission>permission_1_1</permission></rights></group><group name=\"name_2\"><rights></rights></group></usergroups></query></api>") 0172 << false 0173 << int(KJob::NoError) 0174 << (QList<UserGroup>() << ug1 << ug2); 0175 0176 0177 ug2.setRights(ug2.rights() << QStringLiteral("permission_2_1")); 0178 QTest::newRow("Two groups with group one one right and group two one right") 0179 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\"><rights><permission>permission_1_1</permission></rights></group><group name=\"name_2\"><rights><permission>permission_2_1</permission></rights></group></usergroups></query></api>") 0180 << false 0181 << int(KJob::NoError) 0182 << (QList<UserGroup>() << ug1 << ug2); 0183 0184 0185 ug2.setRights(ug2.rights() << QStringLiteral("permission_2_2")); 0186 QTest::newRow("Two groups with group one one right and group two two rights") 0187 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\"><rights><permission>permission_1_1</permission></rights></group><group name=\"name_2\"><rights><permission>permission_2_1</permission><permission>permission_2_2</permission></rights></group></usergroups></query></api>") 0188 << false 0189 << int(KJob::NoError) 0190 << (QList<UserGroup>() << ug1 << ug2); 0191 0192 0193 ug1.setRights(ug1.rights() << QStringLiteral("permission_1_2")); 0194 ug2.setRights(QList<QString>()); 0195 QTest::newRow("Two groups with group one two rights and group two no right") 0196 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\"><rights><permission>permission_1_1</permission><permission>permission_1_2</permission></rights></group><group name=\"name_2\"><rights /></group></usergroups></query></api>") 0197 << false 0198 << int(KJob::NoError) 0199 << (QList<UserGroup>() << ug1 << ug2); 0200 0201 0202 ug2.setRights(ug2.rights() << QStringLiteral("permission_2_1")); 0203 QTest::newRow("Two groups with group one two rights and group two one right") 0204 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\"><rights><permission>permission_1_1</permission><permission>permission_1_2</permission></rights></group><group name=\"name_2\"><rights><permission>permission_2_1</permission></rights></group></usergroups></query></api>") 0205 << false 0206 << int(KJob::NoError) 0207 << (QList<UserGroup>() << ug1 << ug2); 0208 0209 0210 ug2.setRights(ug2.rights() << QStringLiteral("permission_2_2")); 0211 QTest::newRow("Two groups with group one two rights and group two two rights") 0212 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\"><rights><permission>permission_1_1</permission><permission>permission_1_2</permission></rights></group><group name=\"name_2\"><rights><permission>permission_2_1</permission><permission>permission_2_2</permission></rights></group></usergroups></query></api>") 0213 << false 0214 << int(KJob::NoError) 0215 << (QList<UserGroup>() << ug1 << ug2); 0216 0217 0218 QTest::newRow("No group with include number") 0219 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups></usergroups></query></api>") 0220 << true 0221 << int(KJob::NoError) 0222 << QList<UserGroup>(); 0223 0224 ug1.setRights(QList<QString>()); 0225 ug1.setNumber(0); 0226 QTest::newRow("One group with include number") 0227 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\" number=\"0\"/></usergroups></query></api>") 0228 << true 0229 << int(KJob::NoError) 0230 << (QList<UserGroup>() << ug1); 0231 0232 ug1.setNumber(41); 0233 ug2.setRights(QList<QString>()); 0234 ug2.setNumber(12543); 0235 QTest::newRow("Two groups with include number") 0236 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\" number=\"41\"></group><group name=\"name_2\" number=\"12543\" /></usergroups></query></api>") 0237 << true 0238 << int(KJob::NoError) 0239 << (QList<UserGroup>() << ug1 << ug2); 0240 0241 ug1.setRights(QList<QString>()<< QStringLiteral("permission_1_1")); 0242 ug1.setNumber(1781); 0243 ug2.setRights(QList<QString>() << QStringLiteral("permission_2_1") << QStringLiteral("permission_2_2") << QStringLiteral("permission_2_3")); 0244 ug2.setNumber(10989982); 0245 ug3.setRights(QList<QString>() << QStringLiteral("permission_3_1") << QStringLiteral("permission_3_2")); 0246 ug3.setNumber(6); 0247 QTest::newRow("Three groups with rights and include number") 0248 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\" number=\"1781\"><rights><permission>permission_1_1</permission></rights></group><group name=\"name_2\" number=\"10989982\"><rights><permission>permission_2_1</permission><permission>permission_2_2</permission><permission>permission_2_3</permission></rights></group><group name=\"name_3\" number=\"6\"><rights><permission>permission_3_1</permission><permission>permission_3_2</permission></rights></group></usergroups></query></api>") 0249 << true 0250 << int(KJob::NoError) 0251 << (QList<UserGroup>() << ug1 << ug2 << ug3); 0252 } 0253 0254 private: 0255 0256 int usergroupsCount; 0257 QList<UserGroup> usergroupsResults; 0258 }; 0259 0260 QTEST_MAIN(QuerySiteinfoUsergroupsTest) 0261 0262 #include "querysiteinfousergroupstest.moc"