jenkins-bot has submitted this change and it was merged.

Change subject: Perform site tests against the config site
......................................................................


Perform site tests against the config site

Add WikimediaDefaultSiteTestCase to specify the test class site
should be a WMF site, using the default site if it is a WMF site.

Run the site tests against the config defined site, or
a WMF site as required.

The travis build matrix will catch differences on each
defined site, for each platform.

Change-Id: I466f87f3d7db30ccfa75f6425c2383822a1ae307
---
M tests/aspects.py
M tests/site_tests.py
2 files changed, 157 insertions(+), 42 deletions(-)

Approvals:
  XZise: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/tests/aspects.py b/tests/aspects.py
index 21a76d6..4e120ea 100644
--- a/tests/aspects.py
+++ b/tests/aspects.py
@@ -19,7 +19,6 @@
         skip if the user is blocked.
         sysop flag, implement in site & page, and
             possibly some of the script tests.
-        wikimedia flag
         labs flag, for wikidataquery
         slow flag
             wikiquerydata - quite slow
@@ -38,6 +37,7 @@
 
 from pywikibot import config, Site
 from pywikibot.site import BaseSite
+from pywikibot.family import WikimediaFamily
 
 import tests
 from tests import unittest, patch_request, unpatch_request
@@ -469,6 +469,48 @@
     code = config.mylang
 
 
+class WikimediaSiteTestCase(TestCase):
+
+    """Test class uses only WMF sites."""
+
+    wmf = True
+
+
+class WikimediaDefaultSiteTestCase(DefaultSiteTestCase, WikimediaSiteTestCase):
+
+    """Test class to run against a WMF site, preferring the default site."""
+
+    @classmethod
+    def setUpClass(cls):
+        """
+        Set up the test class.
+
+        Check that the default site is a Wikimedia site.
+        Use en.wikipedia.org as a fallback.
+        """
+        super(WikimediaDefaultSiteTestCase, cls).setUpClass()
+
+        assert(hasattr(cls, 'site') and hasattr(cls, 'sites'))
+
+        assert(len(cls.sites) == 1)
+
+        site = cls.get_site()
+
+        if not isinstance(site.family, WikimediaFamily):
+            print('%s using English Wikipedia instead of non-WMF config.family 
%s.'
+                  % (cls.__name__, cls.family))
+            cls.family = 'wikipedia'
+            cls.code = 'en'
+            cls.site = pywikibot.Site('en', 'wikipedia')
+            cls.sites = {
+                cls.site: {
+                    'family': 'wikipedia',
+                    'code': 'en',
+                    'site': cls.site
+                }
+            }
+
+
 class WikibaseTestCase(TestCase):
 
     """Run tests against a wikibase site."""
diff --git a/tests/site_tests.py b/tests/site_tests.py
index 5bbdc0e..26f514e 100644
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -15,21 +15,27 @@
 import re
 
 import pywikibot
-from tests.aspects import unittest, TestCase
+from tests.aspects import (
+    unittest, TestCase,
+    DefaultSiteTestCase,
+    WikimediaDefaultSiteTestCase,
+)
 
 if sys.version_info[0] > 2:
     basestring = (str, )
     unicode = str
 
 
-class TestSiteObject(TestCase):
+class TestSiteObject(DefaultSiteTestCase):
 
     """Test cases for Site methods."""
 
-    family = "wikipedia"
-    code = "en"
-
     cached = True
+
+    def testPickleAbility(self):
+        import pickle
+        mysite = self.get_site()
+        pickle.dumps(mysite)
 
     def testBaseMethods(self):
         """Test cases for BaseSite methods."""
@@ -37,7 +43,7 @@
         self.assertEqual(mysite.family.name, self.family)
         self.assertEqual(mysite.code, self.code)
         self.assertIsInstance(mysite.lang, basestring)
-        self.assertEqual(mysite, pywikibot.Site("en", "wikipedia"))
+        self.assertEqual(mysite, pywikibot.Site(self.code, self.family))
         self.assertIsInstance(mysite.user(), (basestring, type(None)))
         self.assertEqual(mysite.sitename(),
                          "%s:%s" % (self.family,
@@ -47,8 +53,16 @@
                          % (self.code, self.family))
         self.assertIsInstance(mysite.linktrail(), basestring)
         self.assertIsInstance(mysite.redirect(default=True), basestring)
-        self.assertIsInstance(mysite.disambcategory(), pywikibot.Category)
-        self.assertEqual(unicode(pywikibot.Link("foo", source=mysite)), 
u"[[Foo]]")
+        try:
+            dabcat = mysite.disambcategory()
+        except pywikibot.Error as e:
+            self.assertIn('No disambiguation category name found', str(e))
+        else:
+            self.assertIsInstance(dabcat, pywikibot.Category)
+
+        foo = unicode(pywikibot.Link("foo", source=mysite))
+        self.assertEqual(foo, u"[[foo]]" if mysite.nocapitalize else 
u"[[Foo]]")
+
         self.assertFalse(mysite.isInterwikiLink("foo"))
         self.assertIsInstance(mysite.redirectRegex().pattern, basestring)
         self.assertIsInstance(mysite.category_on_one_line(), bool)
@@ -125,30 +139,6 @@
                             for key in ns
                             for item in mysite.namespace(key, True)))
 
-    def testNamespaceCase(self):
-        site = pywikibot.Site('en', 'wiktionary')
-        main_namespace = site.namespaces()[0]
-        self.assertEqual(main_namespace.case, 'case-sensitive')
-        user_namespace = site.namespaces()[2]
-        self.assertEqual(user_namespace.case, 'first-letter')
-
-    def testNamespaceAliases(self):
-        site = pywikibot.Site('nn', 'wikipedia')
-
-        namespaces = site.namespaces()
-        image_namespace = namespaces[6]
-        self.assertEqual(image_namespace.custom_name, 'Fil')
-        self.assertEqual(image_namespace.canonical_name, 'File')
-        self.assertEqual(str(image_namespace), ':File:')
-        self.assertEqual(unicode(image_namespace), ':Fil:')
-        self.assertEqual(image_namespace.aliases, ['Image'])
-        self.assertEqual(len(image_namespace), 3)
-
-        self.assertEqual(len(namespaces[1].aliases), 0)
-        self.assertEqual(len(namespaces[4].aliases), 1)
-        self.assertEqual(namespaces[4].aliases[0], 'WP')
-        self.assertIn('WP', namespaces[4])
-
     def testApiMethods(self):
         """Test generic ApiSite methods."""
         mysite = self.get_site()
@@ -198,8 +188,16 @@
 
         self.assertIsInstance(mysite.siteinfo, pywikibot.site.Siteinfo)
         self.assertIsInstance(mysite.months_names, list)
-        self.assertEqual(mysite.months_names[4], (u'May', u'May'))
         self.assertEqual(mysite.list_to_text(('pywikibot',)), 'pywikibot')
+
+    def testEnglishSpecificMethods(self):
+        """Test Site methods using English specific inputs and outputs."""
+        mysite = self.get_site()
+        if mysite.lang != 'en':
+            raise unittest.SkipTest(
+                'English-specific tests not valid on %s' % mysite)
+
+        self.assertEqual(mysite.months_names[4], (u'May', u'May'))
         self.assertEqual(mysite.list_to_text(('Pride', 'Prejudice')), 'Pride 
and Prejudice')
         self.assertEqual(mysite.list_to_text(('This', 'that', 'the other')), 
'This, that and the other')
 
@@ -225,7 +223,12 @@
         """Test ability to get page tokens."""
         mysite = self.get_site()
         for ttype in ("edit", "move"):  # token types for non-sysops
-            token = mysite.tokens[ttype]
+            try:
+                token = self.site.tokens[ttype]
+            except KeyError:
+                raise unittest.SkipTest(
+                    "Testing '%s' token not possible with user on %s"
+                    % (ttype, self.site))
             self.assertIsInstance(token, basestring)
             self.assertEqual(token, mysite.tokens[ttype])
 
@@ -251,6 +254,10 @@
     def testItemPreload(self):
         """Test that ItemPage preloading works."""
         mysite = self.get_site()
+        if not mysite.has_data_repository:
+            raise unittest.SkipTest('%s does not have a data repository'
+                                    % mysite)
+
         datasite = mysite.data_repository()
 
         items = [pywikibot.ItemPage(datasite, 'q' + str(num)) for num in 
range(1, 6)]
@@ -388,6 +395,10 @@
         for page in mysite.allpages(maxsize=200, total=5):
             self.assertIsInstance(page, pywikibot.Page)
             self.assertTrue(mysite.page_exists(page))
+            if len(page.text) > 200 and mysite.data_repository() == mysite:
+                print('%s.text is > 200 bytes while raw JSON is <= 200'
+                      % page)
+                continue
             self.assertLessEqual(len(page.text), 200)
         for page in mysite.allpages(protect_type="edit", total=5):
             self.assertIsInstance(page, pywikibot.Page)
@@ -737,11 +748,12 @@
         """Test the site.search() method"""
         mysite = self.get_site()
         try:
-            se = list(mysite.search("wiki", total=10))
-            self.assertLessEqual(len(se), 10)
+            se = list(mysite.search("wiki", total=100))
+            self.assertLessEqual(len(se), 100)
             self.assertTrue(all(isinstance(hit, pywikibot.Page)
                                 for hit in se))
-            self.assertTrue(all(hit.namespace() == 0 for hit in se))
+            search_ns = [ns.id for ns in 
mysite.get_searched_namespaces(force=True)]
+            self.assertTrue(all(hit.namespace() in search_ns for hit in se))
             for hit in mysite.search("common", namespaces=4, total=5):
                 self.assertIsInstance(hit, pywikibot.Page)
                 self.assertEqual(hit.namespace(), 4)
@@ -991,6 +1003,13 @@
     # TODO: test newimages, longpages, shortpages, ancientpages, unwatchedpages
     #       and the other following methods in site.py
 
+
+class TestSiteExtensions(WikimediaDefaultSiteTestCase):
+
+    """Test cases for Site extensions."""
+
+    cached = True
+
     def testExtensions(self):
         mysite = self.get_site()
         # test automatically getting extensions cache
@@ -1002,6 +1021,16 @@
         self.assertTrue(mysite.has_extension('disambiguator'))
 
         self.assertFalse(mysite.has_extension('ThisExtensionDoesNotExist'))
+
+
+class TestSiteAPILimits(TestCase):
+
+    """Test cases for Site method that use API limits."""
+
+    family = 'wikipedia'
+    code = 'en'
+
+    cached = True
 
     def test_API_limits_with_site_methods(self):
         # test step/total parameters for different sitemethods
@@ -1024,13 +1053,16 @@
         mysite.loadrevisions(mypage, step=5, total=12)
         self.assertEqual(len(mypage._revisions), 12)
 
-    def testPickleAbility(self):
-        site = self.get_site()
-        import pickle
-        pickle.dumps(site)
+
+class TestSiteInfo(WikimediaDefaultSiteTestCase):
+
+    """Test cases for Site metadata and capabilities."""
+
+    cached = True
 
     def testSiteinfo(self):
         """Test the siteinfo property."""
+        mysite = self.get_site()
         # general enteries
         mysite = self.get_site()
         self.assertIsInstance(mysite.siteinfo['timeoffset'], (int, float))
@@ -1210,6 +1242,47 @@
         self.assertEqual(ll.site.family.name, 'wikipedia')
 
 
+class TestWiktionarySite(TestCase):
+
+    family = 'wiktionary'
+    code = 'en'
+
+    cached = True
+
+    def testNamespaceCase(self):
+        site = self.get_site()
+
+        main_namespace = site.namespaces()[0]
+        self.assertEqual(main_namespace.case, 'case-sensitive')
+        user_namespace = site.namespaces()[2]
+        self.assertEqual(user_namespace.case, 'first-letter')
+
+
+class TestNonEnglishWikipediaSite(TestCase):
+
+    family = 'wikipedia'
+    code = 'nn'
+
+    cached = True
+
+    def testNamespaceAliases(self):
+        site = self.get_site()
+
+        namespaces = site.namespaces()
+        image_namespace = namespaces[6]
+        self.assertEqual(image_namespace.custom_name, 'Fil')
+        self.assertEqual(image_namespace.canonical_name, 'File')
+        self.assertEqual(str(image_namespace), ':File:')
+        self.assertEqual(unicode(image_namespace), ':Fil:')
+        self.assertEqual(image_namespace.aliases, ['Image'])
+        self.assertEqual(len(image_namespace), 3)
+
+        self.assertEqual(len(namespaces[1].aliases), 0)
+        self.assertEqual(len(namespaces[4].aliases), 1)
+        self.assertEqual(namespaces[4].aliases[0], 'WP')
+        self.assertIn('WP', namespaces[4])
+
+
 class TestUploadEnabledSite(TestCase):
 
     sites = {

-- 
To view, visit https://gerrit.wikimedia.org/r/151408
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I466f87f3d7db30ccfa75f6425c2383822a1ae307
Gerrit-PatchSet: 6
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: John Vandenberg <[email protected]>
Gerrit-Reviewer: John Vandenberg <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Merlijn van Deen <[email protected]>
Gerrit-Reviewer: XZise <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to