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"