jenkins-bot has submitted this change and it was merged.
Change subject: Split TestUserContribs between user and non-user ......................................................................
Split TestUserContribs between user and non-user
TestUserContribs method had high chance of causing a database error, which now only occurs in new methods with specific invocations.
Bug: T78668 Change-Id: I7acdab9cab50e2edce1865b7aca6bba4470db639 (manually cherry-pick of ee054a56) --- M tests/site_tests.py 1 file changed, 95 insertions(+), 41 deletions(-)
Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
diff --git a/tests/site_tests.py b/tests/site_tests.py index 20be28b..0909100 100644 --- a/tests/site_tests.py +++ b/tests/site_tests.py @@ -1031,7 +1031,14 @@ raise unittest.SkipTest("gsrsearch returned timeout on site: %r" % e) raise
- def testUsercontribs(self): + +class TestUserContribsAsUser(DefaultSiteTestCase): + + """Test site method site.usercontribs() with bot user.""" + + user = True + + def test_basic(self): """Test the site.usercontribs() method.""" mysite = self.get_site() uc = list(mysite.usercontribs(user=mysite.user(), total=10)) @@ -1040,39 +1047,98 @@ for contrib in uc)) self.assertTrue(all('user' in contrib and contrib['user'] == mysite.user() for contrib in uc)) + + def test_namespaces(self): + """Test the site.usercontribs() method using namespaces.""" + mysite = self.get_site() + for contrib in mysite.usercontribs(user=mysite.user(), + namespaces=14, total=5): + self.assertIsInstance(contrib, dict) + self.assertIn("title", contrib) + self.assertTrue(contrib["title"].startswith(mysite.namespace(14))) + + for contrib in mysite.usercontribs(user=mysite.user(), + namespaces=[10, 11], total=5): + self.assertIsInstance(contrib, dict) + self.assertIn("title", contrib) + self.assertIn(contrib["ns"], (10, 11)) + + def test_show_minor(self): + """Test the site.usercontribs() method using showMinor.""" + mysite = self.get_site() + for contrib in mysite.usercontribs(user=mysite.user(), + showMinor=True, total=5): + self.assertIsInstance(contrib, dict) + self.assertIn("minor", contrib) + + for contrib in mysite.usercontribs(user=mysite.user(), + showMinor=False, total=5): + self.assertIsInstance(contrib, dict) + self.assertNotIn("minor", contrib) + + +class TestUserContribsWithoutUser(DefaultSiteTestCase): + + """Test site method site.usercontribs() without bot user.""" + + def test_user_prefix(self): + """Test the site.usercontribs() method with userprefix.""" + mysite = self.get_site() for contrib in mysite.usercontribs(userprefix="John", total=5): self.assertIsInstance(contrib, dict) for key in ("user", "title", "ns", "pageid", "revid"): self.assertIn(key, contrib) self.assertTrue(contrib["user"].startswith("John")) - for contrib in mysite.usercontribs(userprefix="Jane", - start=pywikibot.Timestamp.fromISOformat("2008-10-06T01:02:03Z"), - total=5): + + def test_user_prefix_range(self): + """Test the site.usercontribs() method.""" + mysite = self.get_site() + for contrib in mysite.usercontribs( + userprefix='Jane', + 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=pywikibot.Timestamp.fromISOformat("2008-10-07T02:03:04Z"), - total=5): + + for contrib in mysite.usercontribs( + userprefix='Jane', + 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=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=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=pywikibot.Timestamp.fromISOformat("2008-10-10T11:59:59Z"), - end=pywikibot.Timestamp.fromISOformat("2008-10-10T00:00:01Z"), - total=5): + + for contrib in mysite.usercontribs( + userprefix='Tim', + 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=pywikibot.Timestamp.fromISOformat("2008-10-11T06:00:01Z"), - end=pywikibot.Timestamp.fromISOformat("2008-10-11T23:59:59Z"), - reverse=True, total=5): + + def test_user_prefix_reverse(self): + """Test the site.usercontribs() method with range reversed.""" + mysite = self.get_site() + for contrib in mysite.usercontribs( + userprefix='Brion', + 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=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=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") + + def test_invalid_range(self): + """Test the site.usercontribs() method with invalid parameters.""" + mysite = self.get_site() # start earlier than end self.assertRaises(pywikibot.Error, mysite.usercontribs, userprefix="Jim", @@ -1084,24 +1150,12 @@ start="2008-10-03T23:59:59Z", end="2008-10-03T00:00:01Z", reverse=True, total=5)
- for contrib in mysite.usercontribs(user=mysite.user(), - namespaces=14, total=5): - self.assertIsInstance(contrib, dict) - self.assertIn("title", contrib) - self.assertTrue(contrib["title"].startswith(mysite.namespace(14))) - for contrib in mysite.usercontribs(user=mysite.user(), - namespaces=[10, 11], total=5): - self.assertIsInstance(contrib, dict) - self.assertIn("title", contrib) - self.assertIn(contrib["ns"], (10, 11)) - for contrib in mysite.usercontribs(user=mysite.user(), - showMinor=True, total=5): - self.assertIsInstance(contrib, dict) - self.assertIn("minor", contrib) - for contrib in mysite.usercontribs(user=mysite.user(), - showMinor=False, total=5): - self.assertIsInstance(contrib, dict) - self.assertNotIn("minor", contrib) + +class SiteWatchlistRevsTestCase(DefaultSiteTestCase): + + """Test site method watchlist_revs().""" + + user = True
def testWatchlistrevs(self): """Test the site.watchlist_revs() method."""