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

Reply via email to