File indexing completed on 2024-06-02 04:17:19
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2011-03-22 0007 * Description : a MediaWiki C++ interface 0008 * 0009 * SPDX-FileCopyrightText: 2011-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0010 * SPDX-FileCopyrightText: 2011 by Alexandre Mendes <alex dot mendes1988 at gmail dot com> 0011 * SPDX-FileCopyrightText: 2011 by Hormiere Guillaume <hormiere dot guillaume at gmail dot com> 0012 * SPDX-FileCopyrightText: 2011 by Manuel Campomanes <campomanes dot manuel at gmail dot com> 0013 * 0014 * SPDX-License-Identifier: GPL-2.0-or-later 0015 * 0016 * ============================================================ */ 0017 0018 // Qt includes 0019 0020 #include <QList> 0021 #include <QObject> 0022 #include <QString> 0023 #include <QUrl> 0024 #include <QTest> 0025 0026 // KDE includes 0027 0028 #include <kjob.h> 0029 0030 // Local includes 0031 0032 #include "fakeserver/fakeserver.h" 0033 #include "mediawiki_iface.h" 0034 #include "mediawiki_querysiteinfousergroups.h" 0035 #include "mediawiki_usergroup.h" 0036 0037 using MediaWiki::Iface; 0038 using MediaWiki::QuerySiteinfoUsergroups; 0039 using MediaWiki::UserGroup; 0040 0041 Q_DECLARE_METATYPE(QList<UserGroup>) 0042 0043 class Q_DECL_HIDDEN QuerySiteinfoUsergroupsTest : public QObject 0044 { 0045 Q_OBJECT 0046 0047 public: 0048 0049 explicit QuerySiteinfoUsergroupsTest(QObject* const parent = nullptr) 0050 { 0051 Q_UNUSED(parent); 0052 usergroupsCount = 0; 0053 } 0054 0055 public Q_SLOTS: 0056 0057 void usergroupsHandle(const QList<UserGroup> & usergroups) 0058 { 0059 ++usergroupsCount; 0060 usergroupsResults = usergroups; 0061 } 0062 0063 private Q_SLOTS: 0064 0065 void init() 0066 { 0067 usergroupsCount = 0; 0068 } 0069 0070 void testResult() 0071 { 0072 QFETCH(QString, scenario); 0073 QFETCH(bool, includeNumber); 0074 QFETCH(int, error); 0075 QFETCH(QList<UserGroup>, results); 0076 0077 FakeServer fakeserver; 0078 fakeserver.setScenario(scenario); 0079 fakeserver.startAndWait(); 0080 0081 Iface MediaWiki(QUrl(QStringLiteral("http://127.0.0.1:12566"))); // krazy:exclude=insecurenet 0082 QuerySiteinfoUsergroups* const job = new QuerySiteinfoUsergroups(MediaWiki); 0083 0084 job->setIncludeNumber(includeNumber); 0085 0086 connect(job, SIGNAL(usergroups(QList<UserGroup>)), 0087 this, SLOT(usergroupsHandle(QList<UserGroup>))); 0088 0089 job->exec(); 0090 0091 QList<FakeServer::Request> requests = fakeserver.getRequest(); 0092 QCOMPARE(requests.size(), 1); 0093 0094 FakeServer::Request request = requests[0]; 0095 QCOMPARE(request.agent, MediaWiki.userAgent()); 0096 QCOMPARE(request.type, QStringLiteral("GET")); 0097 0098 if (includeNumber) 0099 { 0100 QCOMPARE(request.value, QStringLiteral("/?format=xml&action=query&meta=siteinfo&siprop=usergroups&sinumberingroup")); 0101 } 0102 else 0103 { 0104 QCOMPARE(request.value, QStringLiteral("/?format=xml&action=query&meta=siteinfo&siprop=usergroups")); 0105 } 0106 0107 QCOMPARE(job->error(), error); 0108 0109 QCOMPARE(usergroupsCount, 1); 0110 0111 QCOMPARE(usergroupsResults, results); 0112 0113 QVERIFY(fakeserver.isAllScenarioDone()); 0114 } 0115 0116 void testResult_data() 0117 { 0118 QTest::addColumn<QString>("scenario"); 0119 QTest::addColumn<bool>("includeNumber"); 0120 QTest::addColumn<int>("error"); 0121 QTest::addColumn< QList<UserGroup> >("results"); 0122 0123 UserGroup ug1,ug2,ug3; 0124 ug1.setName(QStringLiteral("name_1")); 0125 ug1.setRights(QList<QString>()); 0126 ug2.setName(QStringLiteral("name_2")); 0127 ug2.setRights(QList<QString>()); 0128 ug3.setName(QStringLiteral("name_3")); 0129 0130 QTest::newRow("No group") 0131 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups></usergroups></query></api>") 0132 << false 0133 << int(KJob::NoError) 0134 << QList<UserGroup>(); 0135 0136 QTest::newRow("One group with no right") 0137 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\"/></usergroups></query></api>") 0138 << false 0139 << int(KJob::NoError) 0140 << (QList<UserGroup>() << ug1); 0141 0142 ug1.setRights(ug1.rights() << QStringLiteral("permission_1_1")); 0143 QTest::newRow("One group with one right") 0144 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\"><rights><permission>permission_1_1</permission></rights></group></usergroups></query></api>") 0145 << false 0146 << int(KJob::NoError) 0147 << (QList<UserGroup>() << ug1); 0148 0149 ug1.setRights(ug1.rights() << QStringLiteral("permission_1_2")); 0150 QTest::newRow("One group with two rights") 0151 << 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>") 0152 << false 0153 << int(KJob::NoError) 0154 << (QList<UserGroup>() << ug1); 0155 0156 ug1.setRights(QList<QString>()); 0157 QTest::newRow("Two groups with group one no right and group two no right") 0158 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\"></group><group name=\"name_2\" /></usergroups></query></api>") 0159 << false 0160 << int(KJob::NoError) 0161 << (QList<UserGroup>() << ug1 << ug2); 0162 0163 ug2.setRights(ug2.rights() << QStringLiteral("permission_2_1")); 0164 QTest::newRow("Two groups with group one no right and group two one right") 0165 << 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>") 0166 << false 0167 << int(KJob::NoError) 0168 << (QList<UserGroup>() << ug1 << ug2); 0169 0170 ug2.setRights(ug2.rights() << QStringLiteral("permission_2_2")); 0171 QTest::newRow("Two groups with group one no right and group two two rights") // krazy:exclude=spelling 0172 << 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>") 0173 << false 0174 << int(KJob::NoError) 0175 << (QList<UserGroup>() << ug1 << ug2); 0176 0177 ug1.setRights(ug1.rights() << QStringLiteral("permission_1_1")); 0178 ug2.setRights(QList<QString>()); 0179 QTest::newRow("Two groups with group one one right and group two no right") // krazy:exclude=spelling 0180 << 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>") 0181 << false 0182 << int(KJob::NoError) 0183 << (QList<UserGroup>() << ug1 << ug2); 0184 0185 ug2.setRights(ug2.rights() << QStringLiteral("permission_2_1")); 0186 QTest::newRow("Two groups with group one one right and group two one right") // krazy:exclude=spelling 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></rights></group></usergroups></query></api>") 0188 << false 0189 << int(KJob::NoError) 0190 << (QList<UserGroup>() << ug1 << ug2); 0191 0192 ug2.setRights(ug2.rights() << QStringLiteral("permission_2_2")); 0193 QTest::newRow("Two groups with group one one right and group two two rights") // krazy:exclude=spelling 0194 << 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>") 0195 << false 0196 << int(KJob::NoError) 0197 << (QList<UserGroup>() << ug1 << ug2); 0198 0199 ug1.setRights(ug1.rights() << QStringLiteral("permission_1_2")); 0200 ug2.setRights(QList<QString>()); 0201 QTest::newRow("Two groups with group one two rights and group two no right") 0202 << 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>") 0203 << false 0204 << int(KJob::NoError) 0205 << (QList<UserGroup>() << ug1 << ug2); 0206 0207 ug2.setRights(ug2.rights() << QStringLiteral("permission_2_1")); 0208 QTest::newRow("Two groups with group one two rights and group two one right") 0209 << 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>") 0210 << false 0211 << int(KJob::NoError) 0212 << (QList<UserGroup>() << ug1 << ug2); 0213 0214 ug2.setRights(ug2.rights() << QStringLiteral("permission_2_2")); 0215 QTest::newRow("Two groups with group one two rights and group two two rights") // krazy:exclude=spelling 0216 << 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>") 0217 << false 0218 << int(KJob::NoError) 0219 << (QList<UserGroup>() << ug1 << ug2); 0220 0221 QTest::newRow("No group with include number") 0222 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups></usergroups></query></api>") 0223 << true 0224 << int(KJob::NoError) 0225 << QList<UserGroup>(); 0226 0227 ug1.setRights(QList<QString>()); 0228 ug1.setNumber(0); 0229 QTest::newRow("One group with include number") 0230 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\" number=\"0\"/></usergroups></query></api>") 0231 << true 0232 << int(KJob::NoError) 0233 << (QList<UserGroup>() << ug1); 0234 0235 ug1.setNumber(41); 0236 ug2.setRights(QList<QString>()); 0237 ug2.setNumber(12543); 0238 QTest::newRow("Two groups with include number") 0239 << QStringLiteral("<?xml version=\"1.0\"?><api><query><usergroups><group name=\"name_1\" number=\"41\"></group><group name=\"name_2\" number=\"12543\" /></usergroups></query></api>") 0240 << true 0241 << int(KJob::NoError) 0242 << (QList<UserGroup>() << ug1 << ug2); 0243 0244 ug1.setRights(QList<QString>()<< QStringLiteral("permission_1_1")); 0245 ug1.setNumber(1781); 0246 ug2.setRights(QList<QString>() << QStringLiteral("permission_2_1") << QStringLiteral("permission_2_2") << QStringLiteral("permission_2_3")); 0247 ug2.setNumber(10989982); 0248 ug3.setRights(QList<QString>() << QStringLiteral("permission_3_1") << QStringLiteral("permission_3_2")); 0249 ug3.setNumber(6); 0250 QTest::newRow("Three groups with rights and include number") 0251 << 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>") 0252 << true 0253 << int(KJob::NoError) 0254 << (QList<UserGroup>() << ug1 << ug2 << ug3); 0255 } 0256 0257 private: 0258 0259 int usergroupsCount; 0260 QList<UserGroup> usergroupsResults; 0261 }; 0262 0263 QTEST_MAIN(QuerySiteinfoUsergroupsTest) 0264 0265 #include "querysiteinfousergroups_utest.moc"