John Vandenberg has uploaded a new change for review.
https://gerrit.wikimedia.org/r/231218
Change subject: login() counter, debug logging and tests
......................................................................
login() counter, debug logging and tests
Change-Id: I9a6f84079ce8279ffb5a0b8c907c9afffd11f119
---
M pywikibot/site.py
A tests/login_tests.py
2 files changed, 86 insertions(+), 0 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core
refs/changes/18/231218/1
diff --git a/pywikibot/site.py b/pywikibot/site.py
index ccc11c6..c46a600 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -1637,6 +1637,7 @@
BaseSite.__init__(self, code, fam, user, sysop)
self._msgcache = {}
self._loginstatus = LoginStatus.NOT_ATTEMPTED
+ self._login_count = 0
self._siteinfo = Siteinfo(self)
self._paraminfo = api.ParamInfo(self)
self.tokens = TokenWallet(self)
@@ -1791,6 +1792,11 @@
def login(self, sysop=False):
"""Log the user in if not already logged in."""
+ self._login_count += 1
+ pywikibot.debug('%s: login(%r): count %d; status %d'
+ % (self, sysop, self._login_count, self._loginstatus),
+ _logger)
+
# TODO: this should include an assert that loginstatus
# is not already IN_PROGRESS, however the
# login status may be left 'IN_PROGRESS' because
diff --git a/tests/login_tests.py b/tests/login_tests.py
new file mode 100644
index 0000000..3db0aac
--- /dev/null
+++ b/tests/login_tests.py
@@ -0,0 +1,80 @@
+# -*- coding: utf-8 -*-
+"""Tests for the login sequence."""
+#
+# (C) Pywikibot team, 2015
+#
+# Distributed under the terms of the MIT license.
+#
+from __future__ import unicode_literals
+
+__version__ = '$Id$'
+
+
+from pywikibot.exceptions import NoUsername
+from pywikibot.site import LoginStatus
+
+from tests.aspects import DefaultSiteTestCase, unittest
+
+
+class TestSiteLogin(DefaultSiteTestCase):
+
+ """Test cases for Site login methods."""
+
+ cached = False
+ user = True
+
+ def test_user(self):
+ """Test site.login(sysop=False) method."""
+ self.site.login(sysop=False)
+ self.assertEquals(self.site._loginstatus, LoginStatus.AS_USER)
+ self.assertTrue(self.site.logged_in(sysop=False))
+ self.assertFalse(self.site.logged_in(sysop=True))
+
+ def test_user_logout(self):
+ """Test site.logout method."""
+ self.site.login(sysop=False)
+ self.site.logout()
+ self.assertEquals(self.site._loginstatus, LoginStatus.NOT_LOGGED_IN)
+
+ def test_sysop(self):
+ """Test site.login(sysop=True) method."""
+ if not self.site._username[True]:
+ raise self.skipTest('no sysopname for %s' % self.site)
+
+ self.site.login(sysop=True)
+ self.assertTrue(self.site.logged_in(sysop=True))
+ self.assertFalse(self.site.logged_in(sysop=False))
+ self.assertEquals(self.site._loginstatus, LoginStatus.AS_SYSOP)
+
+ @unittest.expectedFailure
+ def test_user_no_sysop(self):
+ """Test site.login(sysop=True) method when no sysopname is present."""
+ if self.site._username[True]:
+ raise self.skipTest(
+ 'Cant test for fallback on %s as a sysopname is present'
+ % self.site)
+
+ self.site.login(sysop=False)
+ self.assertTrue(self.site.logged_in(sysop=False))
+ self.assertEqual(self.site._loginstatus, LoginStatus.AS_USER)
+
+ self.assertRaises(NoUsername, self.site.login, sysop=True)
+ # T100965: after exception; login fails to restore previous state
+ self.assertEqual(self.site._loginstatus, LoginStatus.AS_USER)
+ self.assertTrue(self.site.logged_in(sysop=False))
+ self.assertFalse(self.site.logged_in(sysop=True))
+
+
+class TestCachedSiteLogin(TestSiteLogin, DefaultSiteTestCase):
+
+ """Test cached Site login methods."""
+
+ cached = True
+ user = True
+
+
+if __name__ == '__main__':
+ try:
+ unittest.main()
+ except SystemExit:
+ pass
--
To view, visit https://gerrit.wikimedia.org/r/231218
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9a6f84079ce8279ffb5a0b8c907c9afffd11f119
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: John Vandenberg <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits