Maverick has uploaded a new change for review.
https://gerrit.wikimedia.org/r/181883
Change subject: Skip Token tests if user doesn't have rights
......................................................................
Skip Token tests if user doesn't have rights
Following tests will be skipped if user doesn't have rights:
site_tests.TestSiteTokens.*
site_tests.TestSiteObjectDeprecatedFunctions.test_token
site_tests.SiteUserTestCase2.testPatrol
Bug: T85353
Change-Id: I2bb23452880ce624c382bf7b5b8929a64f7e5fb7
---
M tests/site_tests.py
1 file changed, 177 insertions(+), 46 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core
refs/changes/83/181883/1
diff --git a/tests/site_tests.py b/tests/site_tests.py
index 60bb7bb..52789d1 100644
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -16,7 +16,7 @@
import pywikibot
from pywikibot import config
-from pywikibot.tools import MediaWikiVersion as LV
+from pywikibot.tools import MediaWikiVersion
from pywikibot.data import api
from tests.aspects import (
@@ -53,6 +53,10 @@
mysite = self.get_site()
mainpage = self.get_mainpage()
ttype = "edit"
+ if ttype not in mysite.tokens:
+ raise unittest.SkipTest(
+ "Action '%s' not allowed for user %s on wiki %s"
+ % (ttype, mysite.user(), mysite))
try:
token = mysite.tokens[ttype]
except KeyError:
@@ -152,7 +156,7 @@
# first-letter (== only first non-namespace letter is case insensitive)
# See also: https://www.mediawiki.org/wiki/Manual:$wgCapitalLinks
self.assertTrue(mysite.sametitle("Special:Always", "Special:always"))
- if LV(mysite.version()) >= LV('1.16'):
+ if MediaWikiVersion(mysite.version()) >= MediaWikiVersion('1.16'):
self.assertTrue(mysite.sametitle('User:Always', 'User:always'))
self.assertTrue(mysite.sametitle('MediaWiki:Always',
'MediaWiki:always'))
@@ -607,34 +611,34 @@
for t in range(1, len(timestamps)):
self.assertGreaterEqual(timestamps[t], timestamps[t - 1])
- for block in mysite.blocks(starttime="2008-07-01T00:00:01Z", total=5):
+ for block in
mysite.blocks(starttime=pywikibot.Timestamp.fromISOformat("2008-07-01T00:00:01Z"),
total=5):
self.assertIsInstance(block, dict)
for prop in props:
self.assertIn(prop, block)
- for block in mysite.blocks(endtime="2008-07-31T23:59:59Z", total=5):
+ for block in
mysite.blocks(endtime=pywikibot.Timestamp.fromISOformat("2008-07-31T23:59:59Z"),
total=5):
self.assertIsInstance(block, dict)
for prop in props:
self.assertIn(prop, block)
- for block in mysite.blocks(starttime="2008-08-02T00:00:01Z",
- endtime="2008-08-02T23:59:59Z",
+ for block in
mysite.blocks(starttime=pywikibot.Timestamp.fromISOformat("2008-08-02T00:00:01Z"),
+
endtime=pywikibot.Timestamp.fromISOformat("2008-08-02T23:59:59Z"),
reverse=True, total=5):
self.assertIsInstance(block, dict)
for prop in props:
self.assertIn(prop, block)
- for block in mysite.blocks(starttime="2008-08-03T23:59:59Z",
- endtime="2008-08-03T00:00:01Z",
+ for block in
mysite.blocks(starttime=pywikibot.Timestamp.fromISOformat("2008-08-03T23:59:59Z"),
+
endtime=pywikibot.Timestamp.fromISOformat("2008-08-03T00:00:01Z"),
total=5):
self.assertIsInstance(block, dict)
for prop in props:
self.assertIn(prop, block)
# starttime earlier than endtime
self.assertRaises(pywikibot.Error, mysite.blocks,
- starttime="2008-08-03T00:00:01Z",
- endtime="2008-08-03T23:59:59Z", total=5)
+
starttime=pywikibot.Timestamp.fromISOformat("2008-08-03T00:00:01Z"),
+
endtime=pywikibot.Timestamp.fromISOformat("2008-08-03T23:59:59Z"), total=5)
# reverse: endtime earlier than starttime
self.assertRaises(pywikibot.Error, mysite.blocks,
- starttime="2008-08-03T23:59:59Z",
- endtime="2008-08-03T00:00:01Z", reverse=True,
total=5)
+
starttime=pywikibot.Timestamp.fromISOformat("2008-08-03T23:59:59Z"),
+
endtime=pywikibot.Timestamp.fromISOformat("2008-08-03T00:00:01Z"),
reverse=True, total=5)
for block in mysite.blocks(users='80.100.22.71', total=5):
self.assertIsInstance(block, dict)
self.assertEqual(block['user'], '80.100.22.71')
@@ -650,6 +654,18 @@
for link in mysite.exturlusage(url, namespaces=[2, 3], total=5):
self.assertIsInstance(link, pywikibot.Page)
self.assertIn(link.namespace(), (2, 3))
+
+ def test_lock_page(self):
+ """Test the site.lock_page() and site.unlock_page() method."""
+ site = self.get_site()
+ p1 = pywikibot.Page(site, u'Foo')
+
+ site.lock_page(page=p1, block=True)
+ self.assertRaises(pywikibot.site.PageInUse, site.lock_page, page=p1,
block=False)
+ site.unlock_page(page=p1)
+ # verify it's unlocked
+ site.lock_page(page=p1, block=False)
+ site.unlock_page(page=p1)
class TestImageUsage(DefaultSiteTestCase):
@@ -762,32 +778,32 @@
self.assertEqual(entry.title().title(), mainpage.title())
for entry in mysite.logevents(user=mysite.user(), total=3):
self.assertEqual(entry.user(), mysite.user())
- for entry in mysite.logevents(start="2008-09-01T00:00:01Z", total=5):
+ for entry in
mysite.logevents(start=pywikibot.Timestamp.fromISOformat("2008-09-01T00:00:01Z"),
total=5):
self.assertIsInstance(entry, pywikibot.logentries.LogEntry)
self.assertLessEqual(str(entry.timestamp()),
"2008-09-01T00:00:01Z")
- for entry in mysite.logevents(end="2008-09-02T23:59:59Z", total=5):
+ for entry in
mysite.logevents(end=pywikibot.Timestamp.fromISOformat("2008-09-02T23:59:59Z"),
total=5):
self.assertIsInstance(entry, pywikibot.logentries.LogEntry)
self.assertGreaterEqual(str(entry.timestamp()),
"2008-09-02T23:59:59Z")
- for entry in mysite.logevents(start="2008-02-02T00:00:01Z",
- end="2008-02-02T23:59:59Z",
+ for entry in
mysite.logevents(start=pywikibot.Timestamp.fromISOformat("2008-02-02T00:00:01Z"),
+
end=pywikibot.Timestamp.fromISOformat("2008-02-02T23:59:59Z"),
reverse=True, total=5):
self.assertIsInstance(entry, pywikibot.logentries.LogEntry)
self.assertTrue(
"2008-02-02T00:00:01Z" <= str(entry.timestamp()) <=
"2008-02-02T23:59:59Z")
- for entry in mysite.logevents(start="2008-02-03T23:59:59Z",
- end="2008-02-03T00:00:01Z",
+ for entry in
mysite.logevents(start=pywikibot.Timestamp.fromISOformat("2008-02-03T23:59:59Z"),
+
end=pywikibot.Timestamp.fromISOformat("2008-02-03T00:00:01Z"),
total=5):
self.assertIsInstance(entry, pywikibot.logentries.LogEntry)
self.assertTrue(
"2008-02-03T00:00:01Z" <= str(entry.timestamp()) <=
"2008-02-03T23:59:59Z")
# starttime earlier than endtime
self.assertRaises(pywikibot.Error, mysite.logevents,
- start="2008-02-03T00:00:01Z",
- end="2008-02-03T23:59:59Z", total=5)
+
start=pywikibot.Timestamp.fromISOformat("2008-02-03T00:00:01Z"),
+
end=pywikibot.Timestamp.fromISOformat("2008-02-03T23:59:59Z"), total=5)
# reverse: endtime earlier than starttime
self.assertRaises(pywikibot.Error, mysite.logevents,
- start="2008-02-03T23:59:59Z",
- end="2008-02-03T00:00:01Z", reverse=True, total=5)
+
start=pywikibot.Timestamp.fromISOformat("2008-02-03T23:59:59Z"),
+
end=pywikibot.Timestamp.fromISOformat("2008-02-03T00:00:01Z"), reverse=True,
total=5)
def testRecentchanges(self):
"""Test the site.recentchanges() method."""
@@ -803,30 +819,30 @@
self.assertLessEqual(len(rc), 10)
self.assertTrue(all(isinstance(change, dict)
for change in rc))
- for change in mysite.recentchanges(start="2008-10-01T01:02:03Z",
+ for change in
mysite.recentchanges(start=pywikibot.Timestamp.fromISOformat("2008-10-01T01:02:03Z"),
total=5):
self.assertIsInstance(change, dict)
self.assertLessEqual(change['timestamp'], "2008-10-01T01:02:03Z")
- for change in mysite.recentchanges(end="2008-04-01T02:03:04Z",
+ for change in
mysite.recentchanges(end=pywikibot.Timestamp.fromISOformat("2008-04-01T02:03:04Z"),
total=5):
self.assertIsInstance(change, dict)
self.assertGreaterEqual(change['timestamp'],
"2008-10-01T02:03:04Z")
- for change in mysite.recentchanges(start="2008-10-01T03:05:07Z",
+ for change in
mysite.recentchanges(start=pywikibot.Timestamp.fromISOformat("2008-10-01T03:05:07Z"),
total=5, reverse=True):
self.assertIsInstance(change, dict)
self.assertGreaterEqual(change['timestamp'],
"2008-10-01T03:05:07Z")
- for change in mysite.recentchanges(end="2008-10-01T04:06:08Z",
+ for change in
mysite.recentchanges(end=pywikibot.Timestamp.fromISOformat("2008-10-01T04:06:08Z"),
total=5, reverse=True):
self.assertIsInstance(change, dict)
self.assertLessEqual(change['timestamp'], "2008-10-01T04:06:08Z")
- for change in mysite.recentchanges(start="2008-10-03T11:59:59Z",
- end="2008-10-03T00:00:01Z",
+ for change in
mysite.recentchanges(start=pywikibot.Timestamp.fromISOformat("2008-10-03T11:59:59Z"),
+
end=pywikibot.Timestamp.fromISOformat("2008-10-03T00:00:01Z"),
total=5):
self.assertIsInstance(change, dict)
self.assertTrue(
"2008-10-03T00:00:01Z" <= change['timestamp'] <=
"2008-10-03T11:59:59Z")
- for change in mysite.recentchanges(start="2008-10-05T06:00:01Z",
- end="2008-10-05T23:59:59Z",
+ for change in
mysite.recentchanges(start=pywikibot.Timestamp.fromISOformat("2008-10-05T06:00:01Z"),
+
end=pywikibot.Timestamp.fromISOformat("2008-10-05T23:59:59Z"),
reverse=True, total=5):
self.assertIsInstance(change, dict)
self.assertTrue(
@@ -837,8 +853,8 @@
end="2008-02-03T23:59:59Z", total=5)
# reverse: end earlier than start
self.assertRaises(pywikibot.Error, mysite.recentchanges,
- start="2008-02-03T23:59:59Z",
- end="2008-02-03T00:00:01Z", reverse=True, total=5)
+
start=pywikibot.Timestamp.fromISOformat("2008-02-03T23:59:59Z"),
+
end=pywikibot.Timestamp.fromISOformat("2008-02-03T00:00:01Z"), reverse=True,
total=5)
for change in mysite.recentchanges(namespaces=[6, 7], total=5):
self.assertIsInstance(change, dict)
self.assertTrue("title" in change and "ns" in change)
@@ -847,7 +863,7 @@
prefix = title[:title.index(":")]
self.assertIn(mysite.ns_index(prefix), [6, 7])
self.assertIn(change["ns"], [6, 7])
- if LV(mysite.version()) <= LV("1.14"):
+ if MediaWikiVersion(mysite.version()) <= MediaWikiVersion("1.14"):
pagelist = [mainpage]
if imagepage:
pagelist += [imagepage]
@@ -936,30 +952,30 @@
self.assertIn(key, contrib)
self.assertTrue(contrib["user"].startswith("John"))
for contrib in mysite.usercontribs(userprefix="Jane",
- start="2008-10-06T01:02:03Z",
+
start=pywikibot.Timestamp.fromISOformat("2008-10-06T01:02:03Z"),
total=5):
self.assertLessEqual(contrib['timestamp'], "2008-10-06T01:02:03Z")
for contrib in mysite.usercontribs(userprefix="Jane",
- end="2008-10-07T02:03:04Z",
+
end=pywikibot.Timestamp.fromISOformat("2008-10-07T02:03:04Z"),
total=5):
self.assertGreaterEqual(contrib['timestamp'],
"2008-10-07T02:03:04Z")
for contrib in mysite.usercontribs(userprefix="Brion",
- start="2008-10-08T03:05:07Z",
+
start=pywikibot.Timestamp.fromISOformat("2008-10-08T03:05:07Z"),
total=5, reverse=True):
self.assertGreaterEqual(contrib['timestamp'],
"2008-10-08T03:05:07Z")
for contrib in mysite.usercontribs(userprefix="Brion",
- end="2008-10-09T04:06:08Z",
+
end=pywikibot.Timestamp.fromISOformat("2008-10-09T04:06:08Z"),
total=5, reverse=True):
self.assertLessEqual(contrib['timestamp'], "2008-10-09T04:06:08Z")
for contrib in mysite.usercontribs(userprefix="Tim",
- start="2008-10-10T11:59:59Z",
- end="2008-10-10T00:00:01Z",
+
start=pywikibot.Timestamp.fromISOformat("2008-10-10T11:59:59Z"),
+
end=pywikibot.Timestamp.fromISOformat("2008-10-10T00:00:01Z"),
total=5):
self.assertTrue(
"2008-10-10T00:00:01Z" <= contrib['timestamp'] <=
"2008-10-10T11:59:59Z")
for contrib in mysite.usercontribs(userprefix="Tim",
- start="2008-10-11T06:00:01Z",
- end="2008-10-11T23:59:59Z",
+
start=pywikibot.Timestamp.fromISOformat("2008-10-11T06:00:01Z"),
+
end=pywikibot.Timestamp.fromISOformat("2008-10-11T23:59:59Z"),
reverse=True, total=5):
self.assertTrue(
"2008-10-11T06:00:01Z" <= contrib['timestamp'] <=
"2008-10-11T23:59:59Z")
@@ -1138,6 +1154,112 @@
total=5)
+class TestSiteSysopWrite(TestCase):
+
+ """Test site sysop methods that require writing."""
+
+ family = 'test'
+ code = 'test'
+
+ write = True
+ sysop = True
+
+ @unittest.expectedFailure
+ def test_protect(self):
+ """Test the site.protect() method."""
+ site = self.get_site()
+ p1 = pywikibot.Page(site, u'User:Unicodesnowman/ProtectTest')
+
+ r = site.protect(protections={'edit': 'sysop', 'move':
'autoconfirmed'},
+ page=p1,
+ reason='Pywikibot unit test')
+ self.assertEqual(r, None)
+ self.assertEqual(site.page_restrictions(page=p1),
+ {u'edit': (u'sysop', u'infinity'),
+ u'move': (u'autoconfirmed', u'infinity')})
+
+ expiry = pywikibot.Timestamp.fromISOformat('2050-01-01T00:00:00Z')
+ site.protect(protections={'edit': 'sysop', 'move': 'autoconfirmed'},
+ page=p1,
+ expiry=expiry,
+ reason='Pywikibot unit test')
+
+ self.assertEqual(site.page_restrictions(page=p1),
+ {u'edit': (u'sysop', u'2050-01-01T00:00:00Z'),
+ u'move': (u'autoconfirmed',
u'2050-01-01T00:00:00Z')})
+
+ site.protect(protections={'edit': '', 'move': ''},
+ page=p1,
+ reason='Pywikibot unit test')
+ self.assertEqual(site.page_restrictions(page=p1), {})
+
+ def test_protect_alt(self):
+ """Test the site.protect() method, works around T78522."""
+ site = self.get_site()
+ p1 = pywikibot.Page(site, u'User:Unicodesnowman/ProtectTest')
+
+ r = site.protect(protections={'edit': 'sysop', 'move':
'autoconfirmed'},
+ page=p1,
+ reason='Pywikibot unit test')
+ self.assertEqual(r, None)
+ self.assertEqual(site.page_restrictions(page=p1),
+ {u'edit': (u'sysop', u'infinity'),
+ u'move': (u'autoconfirmed', u'infinity')})
+
+ p1 = pywikibot.Page(site, u'User:Unicodesnowman/ProtectTest')
+ expiry = pywikibot.Timestamp.fromISOformat('2050-01-01T00:00:00Z')
+ site.protect(protections={'edit': 'sysop', 'move': 'autoconfirmed'},
+ page=p1,
+ expiry=expiry,
+ reason='Pywikibot unit test')
+
+ self.assertEqual(site.page_restrictions(page=p1),
+ {u'edit': (u'sysop', u'2050-01-01T00:00:00Z'),
+ u'move': (u'autoconfirmed',
u'2050-01-01T00:00:00Z')})
+
+ p1 = pywikibot.Page(site, u'User:Unicodesnowman/ProtectTest')
+ site.protect(protections={'edit': '', 'move': ''},
+ page=p1,
+ reason='Pywikibot unit test')
+ self.assertEqual(site.page_restrictions(page=p1), {})
+
+ def test_protect_exception(self):
+ """Test that site.protect() throws an exception when passed invalid
args."""
+ site = self.get_site()
+ p1 = pywikibot.Page(site, u'User:Unicodesnowman/ProtectTest')
+ self.assertRaises(pywikibot.Error, site.protect,
+ protections={'anInvalidValue': 'sysop'},
+ page=p1, reason='Pywikibot unit test')
+ self.assertRaises(pywikibot.Error, site.protect,
+ protections={'edit': 'anInvalidValue'},
+ page=p1, reason='Pywikibot unit test')
+
+ def test_delete(self):
+ """Test the site.deletepage() and site.undelete_page() methods."""
+ site = self.get_site()
+ p = pywikibot.Page(site, u'User:Unicodesnowman/DeleteTestSite')
+ # Verify state
+ if not p.exists():
+ site.undelete_page(p, 'pywikibot unit tests')
+
+ site.deletepage(p, reason='pywikibot unit tests')
+ self.assertRaises(pywikibot.NoPage, p.get, force=True)
+
+ site.undelete_page(p, 'pywikibot unit tests',
+ revisions=[u'2014-12-21T06:07:47Z',
+ u'2014-12-21T06:07:31Z'])
+
+ revs = list(p.getVersionHistory())
+ self.assertEqual(len(revs), 2)
+ self.assertEqual(revs[0].revid, 219995)
+ self.assertEqual(revs[1].revid, 219994)
+
+ site.deletepage(p, reason='pywikibot unit tests')
+ site.undelete_page(p, 'pywikibot unit tests')
+ revs = list(p.getVersionHistory())
+ self.assertTrue(len(revs) > 2)
+
+
class SiteUserTestCase2(DefaultSiteTestCase):
"""More tests that rely on a user account."""
@@ -1159,6 +1281,11 @@
def testPatrol(self):
"""Test the site.patrol() method."""
mysite = self.get_site()
+
+ if 'patrol' not in mysite.tokens:
+ raise unittest.SkipTest(
+ "Action patrol is not allowed for user {0} on wiki {1}"
+ .format(mysite.user(), mysite))
rc = list(mysite.recentchanges(total=1))[0]
@@ -1228,9 +1355,6 @@
self.assertIsInstance(rndpage, pywikibot.Page)
self.assertIn(rndpage.namespace(), [6, 7])
- # TODO: test newimages, longpages, shortpages, ancientpages, unwatchedpages
- # and the other following methods in site.py
-
class TestSiteTokens(DefaultSiteTestCase):
@@ -1241,7 +1365,7 @@
def setUp(self):
"""Store version."""
self.mysite = self.get_site()
- self._version = LV(self.mysite.version())
+ self._version = MediaWikiVersion(self.mysite.version())
self.orig_version = self.mysite.version
def tearDown(self):
@@ -1249,11 +1373,18 @@
self.mysite.version = self.orig_version
def _test_tokens(self, version, test_version, in_tested, additional_token):
- if version and self._version < LV(version):
+ if version and self._version < MediaWikiVersion(version):
raise unittest.SkipTest(
u'Site %s version %s is too low for this tests.'
% (self.mysite, self._version))
+
+ if in_tested not in self.mysite.tokens:
+ raise unittest.SkipTest(
+ 'Action %s is not allowed for user %s on wiki %s.'
+ % (in_tested, self.mysite.user(), self.mysite))
+
self.mysite.version = lambda: test_version
+
for ttype in ("edit", "move", additional_token):
try:
token = self.mysite.tokens[ttype]
--
To view, visit https://gerrit.wikimedia.org/r/181883
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I2bb23452880ce624c382bf7b5b8929a64f7e5fb7
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Maverick <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits