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

Change subject: Add tests for the Category class
......................................................................


Add tests for the Category class

Move category-related tests from page_tests to the new
category_tests.py, implement tests for sortKey, categoryinfo,
members, subcategories and articles.

A very odd issue was found with subcategories() not returning
certain subcategories: T84860

Many of the tests introduced reference specific en.wikipedia
categories. They have been chosen for being the most likely
to remain stable - many of them date from 2004-2005 so the risk
should be low.

Bug: T78231
Change-Id: I6e42a3a0ccb9efc85abdd411ee8c35a44603dba0
---
M tests/__init__.py
A tests/category_tests.py
M tests/page_tests.py
3 files changed, 204 insertions(+), 25 deletions(-)

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



diff --git a/tests/__init__.py b/tests/__init__.py
index cd5ef45..bd6e9c5 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -73,6 +73,7 @@
     'link',
     'interwiki_link',
     'page',
+    'category',
     'file',
     'edit_failure',
     'timestripper',
diff --git a/tests/category_tests.py b/tests/category_tests.py
new file mode 100644
index 0000000..6ba5abb
--- /dev/null
+++ b/tests/category_tests.py
@@ -0,0 +1,203 @@
+# -*- coding: utf-8  -*-
+"""Tests for the Category class."""
+#
+# (C) Pywikibot team, 2008-2014
+#
+# Distributed under the terms of the MIT license.
+#
+__version__ = '$Id$'
+
+import pywikibot
+import pywikibot.page
+
+from tests.aspects import unittest, TestCase
+from tests.utils import allowed_failure
+
+
+class TestCategoryObject(TestCase):
+
+    """Test Category object."""
+
+    family = 'wikipedia'
+    code = 'en'
+
+    cached = True
+
+    def test_init(self):
+        """Test the category's __init__ for one condition that can't be dry."""
+        site = self.get_site()
+        self.assertRaises(ValueError, pywikibot.Category, site, 
'Wikipedia:Test')
+
+    def test_is_empty(self):
+        """Test if category is empty or not."""
+        site = self.get_site()
+        cat_empty = pywikibot.Category(site, 'Category:foooooo')
+        cat_not_empty = pywikibot.Category(site, 'Category:Wikipedia 
categories')
+        self.assertTrue(cat_empty.isEmptyCategory())
+        self.assertFalse(cat_not_empty.isEmptyCategory())
+
+    def test_is_hidden(self):
+        """Test isHiddenCategory."""
+        site = self.get_site()
+        cat_hidden = pywikibot.Category(site, 'Category:Hidden categories')
+        cat_not_hidden = pywikibot.Category(site, 'Category:Wikipedia 
categories')
+        self.assertTrue(cat_hidden.isHiddenCategory())
+        self.assertFalse(cat_not_hidden.isHiddenCategory())
+
+    def test_categoryinfo(self):
+        """Test the categoryinfo property."""
+        site = self.get_site()
+        cat = pywikibot.Category(site, 'Category:Female Wikipedians')
+        categoryinfo = cat.categoryinfo
+        self.assertTrue(categoryinfo['files'] >= 0)
+        self.assertTrue(categoryinfo['pages'] >= 0)
+        self.assertTrue(categoryinfo['size'] > 0)
+        self.assertTrue(categoryinfo['subcats'] > 0)
+        members_sum = categoryinfo['files'] + categoryinfo['pages'] + 
categoryinfo['subcats']
+        self.assertEqual(members_sum, categoryinfo['size'])
+
+        cat_files = pywikibot.Category(site, 'Category:Files lacking an 
author')
+        categoryinfo2 = cat_files.categoryinfo
+        self.assertTrue(categoryinfo2['files'] > 0)
+
+    def test_members(self):
+        """Test the members method."""
+        site = self.get_site()
+        cat = pywikibot.Category(site, 'Category:Wikipedia legal policies')
+        p1 = pywikibot.Page(site, 'Category:Wikipedia disclaimers')
+        p2 = pywikibot.Page(site, 'Wikipedia:Terms of use')
+        p3 = pywikibot.Page(site, 'Wikipedia:Risk disclaimer')
+
+        members = list(cat.members())
+        self.assertIn(p1, members)
+        self.assertIn(p2, members)
+        self.assertNotIn(p3, members)
+
+        members_recurse = list(cat.members(recurse=True))
+        self.assertIn(p1, members_recurse)
+        self.assertIn(p2, members_recurse)
+        self.assertIn(p3, members_recurse)
+
+        members_namespace = list(cat.members(namespaces=14))
+        self.assertIn(p1, members_namespace)
+        self.assertNotIn(p2, members_namespace)
+        self.assertNotIn(p3, members_namespace)
+
+        members_total = list(cat.members(total=2))
+        self.assertEqual(len(members_total), 2)
+
+    def test_subcategories(self):
+        """Test the subcategories method."""
+        site = self.get_site()
+        cat = pywikibot.Category(site, 'Category:Wikipedians by gender')
+        c1 = pywikibot.Category(site, 'Category:Female Wikipedians')
+        c2 = pywikibot.Category(site, 'Category:Lesbian Wikipedians')
+
+        subcategories = list(cat.subcategories())
+        self.assertIn(c1, subcategories)
+        self.assertNotIn(c2, subcategories)
+
+        subcategories_total = list(cat.subcategories(total=2))
+        self.assertEqual(len(subcategories_total), 2)
+
+    @allowed_failure
+    def test_subcategories_recurse(self):
+        """Test the subcategories method with recurse=True."""
+        # FIXME: Broken, some subcategories are missing.
+        # See: T84860
+        site = self.get_site()
+        cat = pywikibot.Category(site, 'Category:Wikipedians by gender')
+        c1 = pywikibot.Category(site, 'Category:Female Wikipedians')
+        c2 = pywikibot.Category(site, 'Category:Lesbian Wikipedians')
+
+        subcategories_recurse = list(cat.subcategories(recurse=True))
+        self.assertIn(c1, subcategories_recurse)
+        self.assertIn(c2, subcategories_recurse)
+
+    def test_articles(self):
+        """Test the articles method."""
+        site = self.get_site()
+        cat = pywikibot.Category(site, 'Category:Wikipedia legal policies')
+        p1 = pywikibot.Page(site, 'Wikipedia:Terms of use')
+        p2 = pywikibot.Page(site, 'Wikipedia:Risk disclaimer')
+
+        articles = list(cat.articles())
+        self.assertIn(p1, articles)
+        self.assertNotIn(p2, articles)
+
+        articles_recurse = list(cat.articles(recurse=True))
+        self.assertIn(p1, articles_recurse)
+        self.assertIn(p2, articles_recurse)
+
+        articles_namespace = list(cat.articles(namespaces=1))
+        self.assertNotIn(p1, articles_namespace)
+        self.assertNotIn(p2, articles_namespace)
+
+        articles_total = list(cat.articles(total=2))
+        self.assertEqual(len(articles_total), 2)
+
+
+class TestCategoryDryObject(TestCase):
+
+    """Test the category object with dry tests."""
+
+    family = 'wikipedia'
+    code = 'en'
+
+    dry = True
+
+    def test_init_dry(self):
+        """Test the category's __init__."""
+        site = self.get_site()
+        cat_normal = pywikibot.Category(site, 'Category:Foo')
+        self.assertEqual(cat_normal.title(withNamespace=False), 'Foo')
+        self.assertEqual(cat_normal.namespace(), 14)
+
+        cat_missing = pywikibot.Category(site, 'Foo')
+        self.assertEqual(cat_missing.title(withNamespace=False), 'Foo')
+        self.assertEqual(cat_missing.namespace(), 14)
+
+        cat_duplicate = pywikibot.Category(site, 'Category:Category:Foo')
+        self.assertEqual(cat_duplicate.title(withNamespace=False), 
'Category:Foo')
+        self.assertEqual(cat_duplicate.namespace(), 14)
+
+        cat_dup_ns = pywikibot.Category(site, 'Category:Wikipedia:Test')
+        self.assertTrue(cat_dup_ns.title(withNamespace=False), 'Page:Foo')
+        self.assertTrue(cat_dup_ns.namespace(), 14)
+
+        self.assertRaises(ValueError, pywikibot.Category, site, 'Talk:Foo')
+
+    def test_section(self):
+        """Test the section method."""
+        site = self.get_site()
+        cat = pywikibot.Category(site, 'Category:Foo#bar')
+        self.assertEqual(cat.section(), 'bar')
+        cat2 = pywikibot.Category(site, 'Category:Foo')
+        self.assertEqual(cat2.section(), None)
+
+    def test_aslink(self):
+        """Test the title method with asLink=True."""
+        site = self.get_site()
+        cat = pywikibot.Category(site, 'Category:Wikipedia Categories')
+        self.assertEqual(cat.title(asLink=True, insite=cat.site),
+                         u'[[Category:Wikipedia Categories]]')
+        cat_section = pywikibot.Category(site, 'Category:Wikipedia 
Categories#Foo')
+        self.assertEqual(cat_section.title(asLink=True, 
insite=cat_section.site),
+                         u'[[Category:Wikipedia Categories#Foo]]')
+        cat_dup = pywikibot.Category(site, 'Category:Wikipedia:Test')
+        self.assertEqual(cat_dup.title(asLink=True, insite=cat_dup.site),
+                         u'[[Category:Wikipedia:Test]]')
+
+    def test_sortkey(self):
+        """Test the sortKey attribute."""
+        site = self.get_site()
+        cat = pywikibot.Category(site, 'Category:Wikipedia categories', 
'Example')
+        self.assertEqual(cat.aslink(), '[[Category:Wikipedia 
categories|Example]]')
+        self.assertEqual(cat.aslink(sortKey='Foo'), '[[Category:Wikipedia 
categories|Foo]]')
+
+
+if __name__ == '__main__':
+    try:
+        unittest.main()
+    except SystemExit:
+        pass
diff --git a/tests/page_tests.py b/tests/page_tests.py
index ee33b56..a756d5d 100644
--- a/tests/page_tests.py
+++ b/tests/page_tests.py
@@ -550,31 +550,6 @@
         self.assertRaises(pywikibot.exceptions.NoPage, p3.get)
 
 
-class TestCategoryObject(TestCase):
-
-    """Test Category object."""
-
-    family = 'wikipedia'
-    code = 'en'
-
-    cached = True
-
-    def test_isEmptyCategory(self):
-        """Test if category is empty or not."""
-        site = self.get_site()
-        cat_empty = pywikibot.Category(site, u'Category:foooooo')
-        cat_not_empty = pywikibot.Category(site, u'Category:Wikipedia 
categories')
-        self.assertTrue(cat_empty.isEmptyCategory())
-        self.assertFalse(cat_not_empty.isEmptyCategory())
-
-    def test_isHiddenCategory(self):
-        site = self.get_site()
-        cat_hidden = pywikibot.Category(site, u'Category:Hidden categories')
-        cat_not_hidden = pywikibot.Category(site, u'Category:Wikipedia 
categories')
-        self.assertTrue(cat_hidden.isHiddenCategory())
-        self.assertFalse(cat_not_hidden.isHiddenCategory())
-
-
 class TestPageUserAction(DefaultSiteTestCase):
 
     """Test page user actions."""

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I6e42a3a0ccb9efc85abdd411ee8c35a44603dba0
Gerrit-PatchSet: 8
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Unicodesnowman <[email protected]>
Gerrit-Reviewer: John Vandenberg <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Merlijn van Deen <[email protected]>
Gerrit-Reviewer: Unicodesnowman <[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