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