File indexing completed on 2024-04-21 15:32:09

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 Alexandre Mendes
0011  *         <a href="mailto:alex dot mendes1988 at gmail dot com">alex dot mendes1988 at gmail dot com</a>
0012  * @author Copyright (C) 2011 by Manuel Campomanes
0013  *         <a href="mailto:campomanes dot manuel at gmail dot com">campomanes dot manuel at gmail dot com</a>
0014  * @author Copyright (C) 2011 by Hormiere Guillaume
0015  *         <a href="mailto:hormiere dot guillaume at gmail dot com">hormiere dot guillaume at gmail dot com</a>
0016  *
0017  * This program is free software; you can redistribute it
0018  * and/or modify it under the terms of the GNU General
0019  * Public License as published by the Free Software Foundation;
0020  * either version 2, or (at your option)
0021  * any later version.
0022  *
0023  * This program is distributed in the hope that it will be useful,
0024  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0025  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0026  * GNU General Public License for more details.
0027  *
0028  * ============================================================ */
0029 
0030 #ifndef TEST_LOGIN_H
0031 #define TEST_LOGIN_H
0032 
0033 #include <QObject>
0034 #include <QtTest>
0035 
0036 #include <KJob>
0037 
0038 #include "mediawiki.h"
0039 #include "login.h"
0040 #include "libmediawikitest/fakeserver.h"
0041 
0042 using mediawiki::MediaWiki;
0043 using mediawiki::Login;
0044 
0045 class LoginTest : public QObject
0046 {
0047     Q_OBJECT
0048 
0049 public Q_SLOTS:
0050 
0051     void loginHandle(KJob* job) {
0052         Q_UNUSED(job)
0053         loginCount++;
0054     }
0055 
0056 private Q_SLOTS:
0057 
0058     void initTestCase()
0059     {
0060         loginCount = 0;
0061         this->m_server = new FakeServer;
0062     }
0063 
0064     // Failing due to https://bugreports.qt.io/browse/QTBUG-44860
0065     void loginTestConnectTrue()
0066     {
0067         loginCount = 0;
0068         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
0069         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
0070         m_server->setScenario(senario, cookie);
0071         senario = QStringLiteral("<api><login result=\"Success\" lguserid=\"12345\" lgusername=\"MyUsername\" lgtoken=\"b5780b6e2f27e20b450921d9461010b4\" cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>");
0072         m_server->addScenario(senario, cookie);
0073         m_server->startAndWait();
0074 
0075         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0076         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0077 
0078         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0079         login.exec();
0080         FakeServer::Request serverrequest = m_server->getRequest()[0];
0081         QCOMPARE(this->loginCount, 1);
0082         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0083         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0084         QCOMPARE(login.error(), (int)Login::NoError);
0085     }
0086 
0087     void loginTestAttribute()
0088     {
0089         loginCount = 0;
0090         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
0091         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
0092         m_server->setScenario(senario, cookie);
0093         senario = QStringLiteral("<api><login result=\"Success\" lguserid=\"12345\" lgusername=\"MyUsername\" lgtoken=\"b5780b6e2f27e20b450921d9461010b4\" cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /></api>");
0094         m_server->addScenario(senario, cookie);
0095         m_server->startAndWait();
0096 
0097         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0098         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0099 
0100         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0101         login.exec();
0102 
0103         FakeServer::Request serverrequest = m_server->getRequest()[0];
0104         QCOMPARE(this->loginCount, 1);
0105         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0106         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0107         QCOMPARE(login.error(), (int)Login::NoError);        
0108     }
0109 
0110     void loginTestConnectTrueWithoutCookie()
0111     {
0112         loginCount = 0;
0113         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
0114         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
0115         m_server->setScenario(senario);
0116         senario = QStringLiteral("<api><login result=\"Success\" lguserid=\"12345\" lgusername=\"MyUsername\" lgtoken=\"b5780b6e2f27e20b450921d9461010b4\" cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /></api>");
0117         m_server->addScenario(senario, cookie);
0118         m_server->startAndWait();
0119 
0120         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0121         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0122         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0123         login.exec();
0124         QCOMPARE(this->loginCount, 1);
0125         QCOMPARE(login.error(), (int)Login::NoError);
0126     }
0127 
0128     void loginTestFalseXMLLogin()
0129     {
0130         loginCount = 0;
0131         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" </api>") );
0132         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
0133         m_server->setScenario(senario, cookie);
0134         senario = QStringLiteral("<api><login result=\"Success\" lguserid=\"12345\" lgusername=\"MyUsername\" lgtoken=\"b5780b6e2f27e20b450921d9461010b4\" cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /></api>");
0135         m_server->addScenario(senario);
0136         m_server->startAndWait();
0137 
0138         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0139         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0140 
0141         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0142         login.exec();
0143         FakeServer::Request serverrequest = m_server->getRequest()[0];
0144         QCOMPARE(this->loginCount, 1);
0145         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0146         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0147         QCOMPARE(login.error(), (int)Login::XmlError);
0148 
0149     }
0150 
0151     void loginTestNoNameLogin()
0152     {
0153         loginCount = 0;
0154         QString senario(QStringLiteral("<api><login result=\"NoName\" info=\"\" /> </api>") );
0155         m_server->setScenario(senario);
0156         m_server->startAndWait();
0157 
0158         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0159         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0160 
0161         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0162         login.exec();
0163         FakeServer::Request serverrequest = m_server->getRequest()[0];
0164         QCOMPARE(this->loginCount, 1);
0165         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0166         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0167 
0168         QCOMPARE(login.error(), (int)Login::LoginMissing);
0169     }
0170 
0171     void loginTestIllegalLogin()
0172     {
0173         loginCount = 0;
0174         QString senario(QStringLiteral("<api><login result=\"Illegal\" info=\"\" /> </api>") );
0175         m_server->setScenario(senario);
0176         m_server->startAndWait();
0177 
0178         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0179         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0180 
0181         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0182         login.exec();
0183         FakeServer::Request serverrequest = m_server->getRequest()[0];
0184         QCOMPARE(this->loginCount, 1);
0185         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0186         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0187 
0188         QCOMPARE(login.error(), (int)Login::IllegalUsername);
0189     }
0190 
0191     void loginTestNotExistsLogin()
0192     {
0193         loginCount = 0;
0194         QString senario(QStringLiteral("<api><login result=\"NotExists\" info=\"\" /> </api>") );
0195         m_server->setScenario(senario);
0196         m_server->startAndWait();
0197 
0198         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0199         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0200 
0201         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0202         login.exec();
0203         FakeServer::Request serverrequest = m_server->getRequest()[0];
0204         QCOMPARE(this->loginCount, 1);
0205         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0206         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0207 
0208         QCOMPARE(login.error(), (int)Login::UsernameNotExists);
0209     }
0210 
0211     void loginTestEmptyPassLogin()
0212     {
0213         loginCount = 0;
0214         QString senario(QStringLiteral("<api><login result=\"EmptyPass\" info=\"\" /> </api>") );
0215         m_server->setScenario(senario);
0216         m_server->startAndWait();
0217 
0218         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0219         Login login(site, QStringLiteral("MyUsername"), QString());
0220 
0221         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0222         login.exec();
0223         FakeServer::Request serverrequest = m_server->getRequest()[0];
0224         QCOMPARE(this->loginCount, 1);
0225         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0226         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword="));
0227 
0228         QCOMPARE(login.error(), (int)Login::PasswordMissing);
0229     }
0230 
0231     void loginTestWrongPassLogin()
0232     {
0233         loginCount = 0;
0234         QString senario(QStringLiteral("<api><login result=\"WrongPass\" info=\"\" /> </api>") );
0235         m_server->setScenario(senario);
0236         m_server->startAndWait();
0237 
0238         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0239         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0240 
0241         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0242         login.exec();
0243         FakeServer::Request serverrequest = m_server->getRequest()[0];
0244         QCOMPARE(this->loginCount, 1);
0245         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0246         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0247 
0248         QCOMPARE(login.error(), (int)Login::WrongPassword);
0249     }
0250 
0251     void loginTestWrongPluginPassLogin()
0252     {
0253         loginCount = 0;
0254         QString senario(QStringLiteral("<api><login result=\"WrongPluginPass\" info=\"\" /> </api>") );
0255         m_server->setScenario(senario);
0256         m_server->startAndWait();
0257 
0258         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0259         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0260 
0261         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0262         login.exec();
0263         FakeServer::Request serverrequest = m_server->getRequest()[0];
0264         QCOMPARE(this->loginCount, 1);
0265         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0266         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0267 
0268         QCOMPARE(login.error(), (int)Login::WrongPluginPassword);
0269     }
0270 
0271     void loginTestCreateBlockedLogin()
0272     {
0273         loginCount = 0;
0274         QString senario(QStringLiteral("<api><login result=\"CreateBlocked\" info=\"\" /> </api>") );
0275         m_server->setScenario(senario);
0276         m_server->startAndWait();
0277 
0278         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0279         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0280 
0281         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0282         login.exec();
0283         FakeServer::Request serverrequest = m_server->getRequest()[0];
0284         QCOMPARE(this->loginCount, 1);
0285         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0286         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0287 
0288         QCOMPARE(login.error(), (int)Login::IPAddressBlocked);
0289     }
0290 
0291     void loginTestThrottledLogin()
0292     {
0293         loginCount = 0;
0294         QString senario(QStringLiteral("<api><login result=\"Throttled\" info=\"\" /> </api>") );
0295         m_server->setScenario(senario);
0296         m_server->startAndWait();
0297 
0298         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0299         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0300 
0301         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0302         login.exec();
0303         FakeServer::Request serverrequest = m_server->getRequest()[0];
0304         QCOMPARE(this->loginCount, 1);
0305         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0306         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0307 
0308         QCOMPARE(login.error(), (int)Login::TooManyConnections);
0309     }
0310 
0311     void loginTestBlockedLogin()
0312     {
0313         loginCount = 0;
0314         QString senario(QStringLiteral("<api><login result=\"Blocked\" info=\"\" /> </api>") );
0315         m_server->setScenario(senario);
0316         m_server->startAndWait();
0317 
0318         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0319         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0320 
0321         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0322         login.exec();
0323         FakeServer::Request serverrequest = m_server->getRequest()[0];
0324         QCOMPARE(this->loginCount, 1);
0325         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0326         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0327 
0328         QCOMPARE(login.error(), (int)Login::UserBlocked);
0329     }
0330 
0331     void loginTestFalseXMLToken()
0332     {
0333         loginCount = 0;
0334         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
0335         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
0336         m_server->setScenario(senario, cookie);
0337         senario = QStringLiteral("<api><login result=\"Success\" lguserid=\"12345\" lgusername=\"MyUsername\" lgtoken=\"b5780b6e2f27e20b450921d9461010b4\" cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\"</api>");
0338         m_server->addScenario(senario);
0339         m_server->startAndWait();
0340 
0341         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0342         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0343 
0344         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0345         login.exec();
0346         FakeServer::Request serverrequest = m_server->getRequest()[0];
0347         QCOMPARE(this->loginCount, 1);
0348         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0349         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0350         QCOMPARE(login.error(), (int)Login::XmlError);
0351 
0352     }
0353 
0354     void loginTestNoNameToken()
0355     {
0356         loginCount = 0;
0357         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
0358         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
0359         m_server->setScenario(senario, cookie);
0360         senario = QStringLiteral("<api><login result=\"NoName\" info=\"\" /> </api>") ;
0361         m_server->addScenario(senario);
0362         m_server->startAndWait();
0363 
0364         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0365         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0366 
0367         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0368         login.exec();
0369         FakeServer::Request serverrequest = m_server->getRequest()[0];
0370         QCOMPARE(this->loginCount, 1);
0371         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0372         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0373 
0374         QCOMPARE(login.error(), (int)Login::LoginMissing);
0375     }
0376 
0377     void loginTestIllegalToken()
0378     {
0379         loginCount = 0;
0380         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
0381         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
0382         m_server->setScenario(senario, cookie);
0383         senario = QStringLiteral("<api><login result=\"Illegal\" info=\"\" /> </api>") ;
0384         m_server->addScenario(senario);
0385         m_server->startAndWait();
0386 
0387         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0388         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0389 
0390         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0391         login.exec();
0392         FakeServer::Request serverrequest = m_server->getRequest()[0];
0393         QCOMPARE(this->loginCount, 1);
0394         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0395         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0396 
0397         QCOMPARE(login.error(), (int)Login::IllegalUsername);
0398     }
0399 
0400     void loginTestNotExistsToken()
0401     {
0402         loginCount = 0;
0403         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
0404         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
0405         m_server->setScenario(senario, cookie);
0406         senario = QStringLiteral("<api><login result=\"NotExists\" info=\"\" /> </api>") ;
0407         m_server->addScenario(senario);
0408         m_server->startAndWait();
0409 
0410         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0411         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0412 
0413         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0414         login.exec();
0415         FakeServer::Request serverrequest = m_server->getRequest()[0];
0416         QCOMPARE(this->loginCount, 1);
0417         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0418         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0419 
0420         QCOMPARE(login.error(), (int)Login::UsernameNotExists);
0421     }
0422 
0423     void loginTestEmptyPassToken()
0424     {
0425         loginCount = 0;
0426         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
0427         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
0428         m_server->setScenario(senario, cookie);
0429         senario = QStringLiteral("<api><login result=\"EmptyPass\" info=\"\" /> </api>") ;
0430         m_server->addScenario(senario);
0431         m_server->startAndWait();
0432 
0433         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0434         Login login(site, QStringLiteral("MyUsername"), QString());
0435 
0436         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0437         login.exec();
0438         FakeServer::Request serverrequest = m_server->getRequest()[0];
0439         QCOMPARE(this->loginCount, 1);
0440         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0441         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword="));
0442 
0443         QCOMPARE(login.error(), (int)Login::PasswordMissing);
0444     }
0445 
0446     void loginTestWrongPassToken()
0447     {
0448         loginCount = 0;
0449         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
0450         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
0451         m_server->setScenario(senario, cookie);
0452         senario = QStringLiteral("<api><login result=\"WrongPass\" info=\"\" /> </api>") ;
0453         m_server->addScenario(senario);
0454         m_server->startAndWait();
0455 
0456         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0457         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0458 
0459         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0460         login.exec();
0461         FakeServer::Request serverrequest = m_server->getRequest()[0];
0462         QCOMPARE(this->loginCount, 1);
0463         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0464         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0465 
0466         QCOMPARE(login.error(), (int)Login::WrongPassword);
0467     }
0468 
0469     void loginTestWrongPluginPassToken()
0470     {
0471         loginCount = 0;
0472         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
0473         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
0474         m_server->setScenario(senario, cookie);
0475         senario = QStringLiteral("<api><login result=\"WrongPluginPass\" info=\"\" /> </api>") ;
0476         m_server->addScenario(senario);
0477         m_server->startAndWait();
0478 
0479         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0480         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0481 
0482         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0483         login.exec();
0484         FakeServer::Request serverrequest = m_server->getRequest()[0];
0485         QCOMPARE(this->loginCount, 1);
0486         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0487         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0488 
0489         QCOMPARE(login.error(), (int)Login::WrongPluginPassword);
0490     }
0491 
0492     void loginTestCreateBlockedToken()
0493     {
0494         loginCount = 0;
0495         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
0496         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
0497         m_server->setScenario(senario, cookie);
0498         senario = QStringLiteral("<api><login result=\"CreateBlocked\" info=\"\" /> </api>") ;
0499         m_server->addScenario(senario);
0500         m_server->startAndWait();
0501 
0502         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0503         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0504 
0505         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0506         login.exec();
0507         FakeServer::Request serverrequest = m_server->getRequest()[0];
0508         QCOMPARE(this->loginCount, 1);
0509         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0510         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0511 
0512         QCOMPARE(login.error(), (int)Login::IPAddressBlocked);
0513     }
0514 
0515     void loginTestThrottledToken()
0516     {
0517         loginCount = 0;
0518         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
0519         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
0520         m_server->setScenario(senario, cookie);
0521         senario = QStringLiteral("<api><login result=\"Throttled\" info=\"\" /> </api>") ;
0522         m_server->addScenario(senario);
0523         m_server->startAndWait();
0524 
0525         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0526         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0527 
0528         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0529         login.exec();
0530         FakeServer::Request serverrequest = m_server->getRequest()[0];
0531         QCOMPARE(this->loginCount, 1);
0532         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0533         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0534 
0535         QCOMPARE(login.error(), (int)Login::TooManyConnections);
0536     }
0537 
0538     void loginTestBlockedToken()
0539     {
0540         loginCount = 0;
0541         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
0542         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
0543         m_server->setScenario(senario, cookie);
0544         senario = QStringLiteral("<api><login result=\"Blocked\" info=\"\" /> </api>") ;
0545         m_server->addScenario(senario);
0546         m_server->startAndWait();
0547 
0548         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
0549         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
0550 
0551         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
0552         login.exec();
0553         FakeServer::Request serverrequest = m_server->getRequest()[0];
0554         QCOMPARE(this->loginCount, 1);
0555         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
0556         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
0557 
0558         QCOMPARE(login.error(), (int)Login::UserBlocked);
0559     }
0560 
0561     void cleanupTestCase()
0562     {
0563         delete this->m_server;
0564     }
0565 
0566 private:
0567 
0568     int         loginCount;
0569     FakeServer* m_server;
0570 };
0571 
0572 QTEST_MAIN(LoginTest)
0573 
0574 #include "logintest.moc"
0575 
0576 #endif // TEST_LOGIN_H