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"