jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/357957 )
Change subject: Add on to pywikibot support for thanking normal revisions ......................................................................
Add on to pywikibot support for thanking normal revisions
This second commit: - Fixes the log entry order in thanks_tests - Adds tests for: -- Thanking an unthankable user (bot or IP) -- Thanking oneself -- Thanking an invalid revision - Adds 'thank' as a write action
Bug: T135409 Change-Id: Ib3a35fea2442099fb685ddf0097e6c4003a69fd7 --- M pywikibot/data/api.py M pywikibot/page.py M tests/thanks_tests.py 3 files changed, 71 insertions(+), 10 deletions(-)
Approvals: John Vandenberg: Looks good to me, approved Framawiki: Looks good to me, but someone else must approve jenkins-bot: Verified
diff --git a/pywikibot/data/api.py b/pywikibot/data/api.py index 9a1a585..448394c 100644 --- a/pywikibot/data/api.py +++ b/pywikibot/data/api.py @@ -1442,6 +1442,7 @@ "wbcreateclaim", "wbremoveclaims", "wbsetclaimvalue", "wbsetreference", "wbremovereferences", "wbsetclaim", 'wbcreateredirect', + 'thank', ) # Client side verification that the request is being performed # by a logged in user, and warn if it isn't a config username. diff --git a/pywikibot/page.py b/pywikibot/page.py index 0c8fb44..7966df0 100644 --- a/pywikibot/page.py +++ b/pywikibot/page.py @@ -3476,6 +3476,8 @@ """ if self.isAnonymous(): return False + if 'bot' in self.groups(): + return False
return True
diff --git a/tests/thanks_tests.py b/tests/thanks_tests.py index cab6cb3..9942f3f 100644 --- a/tests/thanks_tests.py +++ b/tests/thanks_tests.py @@ -7,9 +7,12 @@ # from __future__ import absolute_import, unicode_literals
-from pywikibot.page import Revision, User +from pywikibot.page import Page, Revision, User
from tests.aspects import TestCase + + +NO_THANKABLE_REVS = 'There is no recent change which can be test thanked.'
class TestThankRevision(TestCase): @@ -28,22 +31,77 @@ there must make edits made before reruns of this test. Please see https://phabricator.wikimedia.org/T137836. """ - found_log = can_thank = False + found_log = False site = self.get_site() - data = site.recentchanges(total=50, reverse=True) - for i in data: - revid = i['revid'] - username = i['user'] + data = site.recentchanges(total=20) + for rev in data: + revid = rev['revid'] + username = rev['user'] user = User(site, username) if user.is_thankable: - can_thank = True break - if not can_thank: - self.skipTest('There is no recent change which can be test thanked.') + else: + self.skipTest(NO_THANKABLE_REVS) before_time = site.getcurrenttimestamp() Revision._thank(revid, site, source='pywikibot test') - log_entries = site.logevents(logtype='thanks', total=5, start=before_time, page=user) + log_entries = site.logevents(logtype='thanks', total=5, page=user, + start=before_time, reverse=True) for __ in log_entries: found_log = True break self.assertTrue(found_log) + + def test_self_thank(self): + """Test that thanking oneself causes an error. + + This test is not in TestThankRevisionErrors because it may require + making a successful edit in order to test the API call thanking the user + running the test. + """ + site = self.get_site() + my_name = self.get_userpage().username + data = site.usercontribs(user=my_name, total=1) + for rev in data: + revid = rev['revid'] + break + else: + test_page = Page(site, 'Pywikibot Thanks test') + test_page.text += '* ~~~~\n' + test_page.save('Pywikibot Thanks test') + revid = test_page.latest_revision_id + self.assertAPIError('invalidrecipient', None, Revision._thank, + revid, site, source='pywikibot test') + + +class TestThankRevisionErrors(TestCase): + + """Test errors when thanking revisions.""" + + family = 'test' + code = 'test' + + write = -1 + + def test_bad_recipient(self): + """Test that thanking a bad recipient causes an error.""" + site = self.get_site() + data = site.recentchanges(total=20) + for rev in data: + revid = rev['revid'] + username = rev['user'] + user = User(site, username) + if not user.is_thankable: + break + else: + self.skipTest(NO_THANKABLE_REVS) + self.assertAPIError('invalidrecipient', None, Revision._thank, + revid, site, source='pywikibot test') + + def test_invalid_revision(self): + """Test that passing an invalid revision ID causes an error.""" + site = self.get_site() + invalid_revids = (0, -1, 0.99, 'zero, minus one, and point nine nine', + (0, -1, 0.99), [0, -1, 0.99]) + for invalid_revid in invalid_revids: + self.assertAPIError('invalidrevision', None, Revision._thank, + invalid_revid, site, source='pywikibot test')
pywikibot-commits@lists.wikimedia.org