1 /** ===========================================================
2  * @file
3  *
4  * This file is a part of KDE project
5  * <a href="https://projects.kde.org/projects/extragear/libs/libmediawiki">libmediawiki</a>
6  *
7  * @date   2011-03-22
8  * @brief  a MediaWiki C++ interface for KDE
9  *
10  * @author Copyright (C) 2010 by Alexandre Mendes
11  *         <a href="mailto:alex dot mendes1988 at gmail dot com">alex dot mendes1988 at gmail dot com</a>
12  * @author Copyright (C) 2011 by Manuel Campomanes
13  *         <a href="mailto:campomanes dot manuel at gmail dot com">campomanes dot manuel at gmail dot com</a>
14  * @author Copyright (C) 2011 by Hormiere Guillaume
15  *         <a href="mailto:hormiere dot guillaume at gmail dot com">hormiere dot guillaume at gmail dot com</a>
16  *
17  * This program is free software; you can redistribute it
18  * and/or modify it under the terms of the GNU General
19  * Public License as published by the Free Software Foundation;
20  * either version 2, or (at your option)
21  * any later version.
22  *
23  * This program is distributed in the hope that it will be useful,
24  * but WITHOUT ANY WARRANTY; without even the implied warranty of
25  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26  * GNU General Public License for more details.
27  *
28  * ============================================================ */
29 
30 #ifndef TEST_LOGIN_H
31 #define TEST_LOGIN_H
32 
33 #include <QtCore/QObject>
34 #include <QtTest/QtTest>
35 
36 #include <KCoreAddons/KJob>
37 
38 #include "mediawiki.h"
39 #include "login.h"
40 #include "libmediawikitest/fakeserver.h"
41 
42 using mediawiki::MediaWiki;
43 using mediawiki::Login;
44 
45 class LoginTest : public QObject
46 {
47     Q_OBJECT
48 
49 public Q_SLOTS:
50 
loginHandle(KJob * job)51     void loginHandle(KJob* job) {
52         Q_UNUSED(job)
53         loginCount++;
54     }
55 
56 private Q_SLOTS:
57 
initTestCase()58     void initTestCase()
59     {
60         loginCount = 0;
61         this->m_server = new FakeServer;
62     }
63 
64     // Failing due to https://bugreports.qt.io/browse/QTBUG-44860
loginTestConnectTrue()65     void loginTestConnectTrue()
66     {
67         loginCount = 0;
68         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
69         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
70         m_server->setScenario(senario, cookie);
71         senario = QStringLiteral("<api><login result=\"Success\" lguserid=\"12345\" lgusername=\"MyUsername\" lgtoken=\"b5780b6e2f27e20b450921d9461010b4\" cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>");
72         m_server->addScenario(senario, cookie);
73         m_server->startAndWait();
74 
75         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
76         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
77 
78         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
79         login.exec();
80         FakeServer::Request serverrequest = m_server->getRequest()[0];
81         QCOMPARE(this->loginCount, 1);
82         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
83         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
84         QCOMPARE(login.error(), (int)Login::NoError);
85     }
86 
loginTestAttribute()87     void loginTestAttribute()
88     {
89         loginCount = 0;
90         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
91         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
92         m_server->setScenario(senario, cookie);
93         senario = QStringLiteral("<api><login result=\"Success\" lguserid=\"12345\" lgusername=\"MyUsername\" lgtoken=\"b5780b6e2f27e20b450921d9461010b4\" cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /></api>");
94         m_server->addScenario(senario, cookie);
95         m_server->startAndWait();
96 
97         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
98         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
99 
100         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
101         login.exec();
102 
103         FakeServer::Request serverrequest = m_server->getRequest()[0];
104         QCOMPARE(this->loginCount, 1);
105         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
106         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
107         QCOMPARE(login.error(), (int)Login::NoError);
108     }
109 
loginTestConnectTrueWithoutCookie()110     void loginTestConnectTrueWithoutCookie()
111     {
112         loginCount = 0;
113         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
114         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
115         m_server->setScenario(senario);
116         senario = QStringLiteral("<api><login result=\"Success\" lguserid=\"12345\" lgusername=\"MyUsername\" lgtoken=\"b5780b6e2f27e20b450921d9461010b4\" cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /></api>");
117         m_server->addScenario(senario, cookie);
118         m_server->startAndWait();
119 
120         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
121         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
122         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
123         login.exec();
124         QCOMPARE(this->loginCount, 1);
125         QCOMPARE(login.error(), (int)Login::NoError);
126     }
127 
loginTestFalseXMLLogin()128     void loginTestFalseXMLLogin()
129     {
130         loginCount = 0;
131         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" </api>") );
132         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
133         m_server->setScenario(senario, cookie);
134         senario = QStringLiteral("<api><login result=\"Success\" lguserid=\"12345\" lgusername=\"MyUsername\" lgtoken=\"b5780b6e2f27e20b450921d9461010b4\" cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /></api>");
135         m_server->addScenario(senario);
136         m_server->startAndWait();
137 
138         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
139         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
140 
141         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
142         login.exec();
143         FakeServer::Request serverrequest = m_server->getRequest()[0];
144         QCOMPARE(this->loginCount, 1);
145         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
146         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
147         QCOMPARE(login.error(), (int)Login::XmlError);
148 
149     }
150 
loginTestNoNameLogin()151     void loginTestNoNameLogin()
152     {
153         loginCount = 0;
154         QString senario(QStringLiteral("<api><login result=\"NoName\" info=\"\" /> </api>") );
155         m_server->setScenario(senario);
156         m_server->startAndWait();
157 
158         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
159         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
160 
161         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
162         login.exec();
163         FakeServer::Request serverrequest = m_server->getRequest()[0];
164         QCOMPARE(this->loginCount, 1);
165         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
166         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
167 
168         QCOMPARE(login.error(), (int)Login::LoginMissing);
169     }
170 
loginTestIllegalLogin()171     void loginTestIllegalLogin()
172     {
173         loginCount = 0;
174         QString senario(QStringLiteral("<api><login result=\"Illegal\" info=\"\" /> </api>") );
175         m_server->setScenario(senario);
176         m_server->startAndWait();
177 
178         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
179         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
180 
181         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
182         login.exec();
183         FakeServer::Request serverrequest = m_server->getRequest()[0];
184         QCOMPARE(this->loginCount, 1);
185         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
186         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
187 
188         QCOMPARE(login.error(), (int)Login::IllegalUsername);
189     }
190 
loginTestNotExistsLogin()191     void loginTestNotExistsLogin()
192     {
193         loginCount = 0;
194         QString senario(QStringLiteral("<api><login result=\"NotExists\" info=\"\" /> </api>") );
195         m_server->setScenario(senario);
196         m_server->startAndWait();
197 
198         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
199         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
200 
201         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
202         login.exec();
203         FakeServer::Request serverrequest = m_server->getRequest()[0];
204         QCOMPARE(this->loginCount, 1);
205         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
206         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
207 
208         QCOMPARE(login.error(), (int)Login::UsernameNotExists);
209     }
210 
loginTestEmptyPassLogin()211     void loginTestEmptyPassLogin()
212     {
213         loginCount = 0;
214         QString senario(QStringLiteral("<api><login result=\"EmptyPass\" info=\"\" /> </api>") );
215         m_server->setScenario(senario);
216         m_server->startAndWait();
217 
218         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
219         Login login(site, QStringLiteral("MyUsername"), QString());
220 
221         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
222         login.exec();
223         FakeServer::Request serverrequest = m_server->getRequest()[0];
224         QCOMPARE(this->loginCount, 1);
225         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
226         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword="));
227 
228         QCOMPARE(login.error(), (int)Login::PasswordMissing);
229     }
230 
loginTestWrongPassLogin()231     void loginTestWrongPassLogin()
232     {
233         loginCount = 0;
234         QString senario(QStringLiteral("<api><login result=\"WrongPass\" info=\"\" /> </api>") );
235         m_server->setScenario(senario);
236         m_server->startAndWait();
237 
238         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
239         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
240 
241         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
242         login.exec();
243         FakeServer::Request serverrequest = m_server->getRequest()[0];
244         QCOMPARE(this->loginCount, 1);
245         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
246         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
247 
248         QCOMPARE(login.error(), (int)Login::WrongPassword);
249     }
250 
loginTestWrongPluginPassLogin()251     void loginTestWrongPluginPassLogin()
252     {
253         loginCount = 0;
254         QString senario(QStringLiteral("<api><login result=\"WrongPluginPass\" info=\"\" /> </api>") );
255         m_server->setScenario(senario);
256         m_server->startAndWait();
257 
258         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
259         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
260 
261         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
262         login.exec();
263         FakeServer::Request serverrequest = m_server->getRequest()[0];
264         QCOMPARE(this->loginCount, 1);
265         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
266         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
267 
268         QCOMPARE(login.error(), (int)Login::WrongPluginPassword);
269     }
270 
loginTestCreateBlockedLogin()271     void loginTestCreateBlockedLogin()
272     {
273         loginCount = 0;
274         QString senario(QStringLiteral("<api><login result=\"CreateBlocked\" info=\"\" /> </api>") );
275         m_server->setScenario(senario);
276         m_server->startAndWait();
277 
278         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
279         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
280 
281         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
282         login.exec();
283         FakeServer::Request serverrequest = m_server->getRequest()[0];
284         QCOMPARE(this->loginCount, 1);
285         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
286         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
287 
288         QCOMPARE(login.error(), (int)Login::IPAddressBlocked);
289     }
290 
loginTestThrottledLogin()291     void loginTestThrottledLogin()
292     {
293         loginCount = 0;
294         QString senario(QStringLiteral("<api><login result=\"Throttled\" info=\"\" /> </api>") );
295         m_server->setScenario(senario);
296         m_server->startAndWait();
297 
298         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
299         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
300 
301         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
302         login.exec();
303         FakeServer::Request serverrequest = m_server->getRequest()[0];
304         QCOMPARE(this->loginCount, 1);
305         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
306         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
307 
308         QCOMPARE(login.error(), (int)Login::TooManyConnections);
309     }
310 
loginTestBlockedLogin()311     void loginTestBlockedLogin()
312     {
313         loginCount = 0;
314         QString senario(QStringLiteral("<api><login result=\"Blocked\" info=\"\" /> </api>") );
315         m_server->setScenario(senario);
316         m_server->startAndWait();
317 
318         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
319         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
320 
321         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
322         login.exec();
323         FakeServer::Request serverrequest = m_server->getRequest()[0];
324         QCOMPARE(this->loginCount, 1);
325         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
326         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
327 
328         QCOMPARE(login.error(), (int)Login::UserBlocked);
329     }
330 
loginTestFalseXMLToken()331     void loginTestFalseXMLToken()
332     {
333         loginCount = 0;
334         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
335         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
336         m_server->setScenario(senario, cookie);
337         senario = QStringLiteral("<api><login result=\"Success\" lguserid=\"12345\" lgusername=\"MyUsername\" lgtoken=\"b5780b6e2f27e20b450921d9461010b4\" cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\"</api>");
338         m_server->addScenario(senario);
339         m_server->startAndWait();
340 
341         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
342         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
343 
344         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
345         login.exec();
346         FakeServer::Request serverrequest = m_server->getRequest()[0];
347         QCOMPARE(this->loginCount, 1);
348         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
349         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
350         QCOMPARE(login.error(), (int)Login::XmlError);
351 
352     }
353 
loginTestNoNameToken()354     void loginTestNoNameToken()
355     {
356         loginCount = 0;
357         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
358         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
359         m_server->setScenario(senario, cookie);
360         senario = QStringLiteral("<api><login result=\"NoName\" info=\"\" /> </api>") ;
361         m_server->addScenario(senario);
362         m_server->startAndWait();
363 
364         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
365         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
366 
367         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
368         login.exec();
369         FakeServer::Request serverrequest = m_server->getRequest()[0];
370         QCOMPARE(this->loginCount, 1);
371         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
372         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
373 
374         QCOMPARE(login.error(), (int)Login::LoginMissing);
375     }
376 
loginTestIllegalToken()377     void loginTestIllegalToken()
378     {
379         loginCount = 0;
380         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
381         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
382         m_server->setScenario(senario, cookie);
383         senario = QStringLiteral("<api><login result=\"Illegal\" info=\"\" /> </api>") ;
384         m_server->addScenario(senario);
385         m_server->startAndWait();
386 
387         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
388         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
389 
390         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
391         login.exec();
392         FakeServer::Request serverrequest = m_server->getRequest()[0];
393         QCOMPARE(this->loginCount, 1);
394         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
395         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
396 
397         QCOMPARE(login.error(), (int)Login::IllegalUsername);
398     }
399 
loginTestNotExistsToken()400     void loginTestNotExistsToken()
401     {
402         loginCount = 0;
403         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
404         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
405         m_server->setScenario(senario, cookie);
406         senario = QStringLiteral("<api><login result=\"NotExists\" info=\"\" /> </api>") ;
407         m_server->addScenario(senario);
408         m_server->startAndWait();
409 
410         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
411         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
412 
413         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
414         login.exec();
415         FakeServer::Request serverrequest = m_server->getRequest()[0];
416         QCOMPARE(this->loginCount, 1);
417         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
418         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
419 
420         QCOMPARE(login.error(), (int)Login::UsernameNotExists);
421     }
422 
loginTestEmptyPassToken()423     void loginTestEmptyPassToken()
424     {
425         loginCount = 0;
426         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
427         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
428         m_server->setScenario(senario, cookie);
429         senario = QStringLiteral("<api><login result=\"EmptyPass\" info=\"\" /> </api>") ;
430         m_server->addScenario(senario);
431         m_server->startAndWait();
432 
433         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
434         Login login(site, QStringLiteral("MyUsername"), QString());
435 
436         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
437         login.exec();
438         FakeServer::Request serverrequest = m_server->getRequest()[0];
439         QCOMPARE(this->loginCount, 1);
440         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
441         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword="));
442 
443         QCOMPARE(login.error(), (int)Login::PasswordMissing);
444     }
445 
loginTestWrongPassToken()446     void loginTestWrongPassToken()
447     {
448         loginCount = 0;
449         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
450         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
451         m_server->setScenario(senario, cookie);
452         senario = QStringLiteral("<api><login result=\"WrongPass\" info=\"\" /> </api>") ;
453         m_server->addScenario(senario);
454         m_server->startAndWait();
455 
456         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
457         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
458 
459         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
460         login.exec();
461         FakeServer::Request serverrequest = m_server->getRequest()[0];
462         QCOMPARE(this->loginCount, 1);
463         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
464         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
465 
466         QCOMPARE(login.error(), (int)Login::WrongPassword);
467     }
468 
loginTestWrongPluginPassToken()469     void loginTestWrongPluginPassToken()
470     {
471         loginCount = 0;
472         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
473         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
474         m_server->setScenario(senario, cookie);
475         senario = QStringLiteral("<api><login result=\"WrongPluginPass\" info=\"\" /> </api>") ;
476         m_server->addScenario(senario);
477         m_server->startAndWait();
478 
479         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
480         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
481 
482         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
483         login.exec();
484         FakeServer::Request serverrequest = m_server->getRequest()[0];
485         QCOMPARE(this->loginCount, 1);
486         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
487         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
488 
489         QCOMPARE(login.error(), (int)Login::WrongPluginPassword);
490     }
491 
loginTestCreateBlockedToken()492     void loginTestCreateBlockedToken()
493     {
494         loginCount = 0;
495         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
496         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
497         m_server->setScenario(senario, cookie);
498         senario = QStringLiteral("<api><login result=\"CreateBlocked\" info=\"\" /> </api>") ;
499         m_server->addScenario(senario);
500         m_server->startAndWait();
501 
502         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
503         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
504 
505         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
506         login.exec();
507         FakeServer::Request serverrequest = m_server->getRequest()[0];
508         QCOMPARE(this->loginCount, 1);
509         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
510         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
511 
512         QCOMPARE(login.error(), (int)Login::IPAddressBlocked);
513     }
514 
loginTestThrottledToken()515     void loginTestThrottledToken()
516     {
517         loginCount = 0;
518         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
519         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
520         m_server->setScenario(senario, cookie);
521         senario = QStringLiteral("<api><login result=\"Throttled\" info=\"\" /> </api>") ;
522         m_server->addScenario(senario);
523         m_server->startAndWait();
524 
525         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
526         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
527 
528         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
529         login.exec();
530         FakeServer::Request serverrequest = m_server->getRequest()[0];
531         QCOMPARE(this->loginCount, 1);
532         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
533         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
534 
535         QCOMPARE(login.error(), (int)Login::TooManyConnections);
536     }
537 
loginTestBlockedToken()538     void loginTestBlockedToken()
539     {
540         loginCount = 0;
541         QString senario(QStringLiteral("<api><login result=\"NeedToken\" token=\"b5780b6e2f27e20b450921d9461010b4\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\" /> </api>") );
542         QString cookie( QStringLiteral("cookieprefix=\"enwiki\" sessionid=\"17ab96bd8ffbe8ca58a78657a918558e\""));
543         m_server->setScenario(senario, cookie);
544         senario = QStringLiteral("<api><login result=\"Blocked\" info=\"\" /> </api>") ;
545         m_server->addScenario(senario);
546         m_server->startAndWait();
547 
548         MediaWiki site(QUrl(QStringLiteral("http://127.0.0.1:12566")));
549         Login login(site, QStringLiteral("MyUsername"), QStringLiteral("test"));
550 
551         connect(&login, SIGNAL(result(KJob*)),this, SLOT(loginHandle(KJob*)));
552         login.exec();
553         FakeServer::Request serverrequest = m_server->getRequest()[0];
554         QCOMPARE(this->loginCount, 1);
555         QCOMPARE(serverrequest.type, QStringLiteral("POST"));
556         QCOMPARE(serverrequest.value, QStringLiteral("/?format=xml&action=login&lgname=MyUsername&lgpassword=test"));
557 
558         QCOMPARE(login.error(), (int)Login::UserBlocked);
559     }
560 
cleanupTestCase()561     void cleanupTestCase()
562     {
563         delete this->m_server;
564     }
565 
566 private:
567 
568     int         loginCount;
569     FakeServer* m_server;
570 };
571 
572 QTEST_MAIN(LoginTest)
573 
574 #include "logintest.moc"
575 
576 #endif // TEST_LOGIN_H
577