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')
--
To view, visit
https://gerrit.wikimedia.org/r/357957
To unsubscribe, visit
https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ib3a35fea2442099fb685ddf0097e6c4003a69fd7
Gerrit-PatchSet: 15
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Happy5214 <happy5214(a)gmail.com>
Gerrit-Reviewer: Framawiki <framawiki(a)tools.wmflabs.org>
Gerrit-Reviewer: Happy5214 <happy5214(a)gmail.com>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Magul <tomasz.magulski(a)gmail.com>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: Zhuyifei1999 <zhuyifei1999(a)gmail.com>
Gerrit-Reviewer: jenkins-bot <>