jenkins-bot has submitted this change and it was merged.
Change subject: Additional archivebot tests and error handling ......................................................................
Additional archivebot tests and error handling
Change-Id: I224c34d893a85dc8e2671de9a7884db5d045dd8c --- M scripts/archivebot.py M tests/archivebot_tests.py 2 files changed, 67 insertions(+), 2 deletions(-)
Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
diff --git a/scripts/archivebot.py b/scripts/archivebot.py index 86cb2f6..ea20c78 100755 --- a/scripts/archivebot.py +++ b/scripts/archivebot.py @@ -195,7 +195,10 @@ elif string.endswith('y'): return datetime.timedelta(days=int(string[:-1]) * 366) else: - return datetime.timedelta(seconds=int(string)) + if string.isdigit(): + return datetime.timedelta(seconds=int(string)) + else: + raise MalformedConfigError('Unrecognized parameter in template: %s' % string)
def str2size(string): diff --git a/tests/archivebot_tests.py b/tests/archivebot_tests.py index 467c4c1..560275d 100644 --- a/tests/archivebot_tests.py +++ b/tests/archivebot_tests.py @@ -9,7 +9,7 @@
__version__ = '$Id$'
-from datetime import datetime +from datetime import datetime, timedelta
import pywikibot import pywikibot.page @@ -35,6 +35,68 @@ }
+class TestArchiveBotFunctionsWithSites(TestCase): + + """Test functions dependent to sites in archivebot.""" + + sites = { + 'enwiki': { + 'family': 'wikipedia', + 'code': 'en', + }, + 'frwikt': { + 'family': 'wiktionary', + 'code': 'fr', + }, + 'jawiki': { + 'family': 'wikipedia', + 'code': 'ja', + } + } + + def test_str2localized_duraction_English(self): + """Test English localizations of duration.""" + site = self.get_site('enwiki') + self.assertEqual(archivebot.str2localized_duration(site, '0m'), '0 minutes') + self.assertEqual(archivebot.str2localized_duration(site, '1d'), '1 day') + self.assertEqual(archivebot.str2localized_duration(site, '10h'), '10 hours') + + def test_str2localized_duraction_French(self): + """Test French localizations of duration.""" + site = self.get_site('frwikt') + self.assertEqual(archivebot.str2localized_duration(site, '10d'), '10 jours') + self.assertEqual(archivebot.str2localized_duration(site, '1y'), '1 an') + + def test_str2localized_duraction_Japanese(self): + """Test Japanese localizations of duration.""" + site = self.get_site('jawiki') + self.assertEqual(archivebot.str2localized_duration(site, '4000m'), '4000 分') + + +class TestArchiveBotFunctions(TestCase): + + """Test functions in archivebot.""" + + net = False + + def test_str2time(self): + """Test for parsing the shorthand notation of durations.""" + self.assertEqual(archivebot.str2time('0'), timedelta(0)) + self.assertEqual(archivebot.str2time('4000h'), timedelta(hours=4000)) + self.assertEqual(archivebot.str2time('4000h'), timedelta(hours=4000)) + self.assertRaises(archivebot.MalformedConfigError, archivebot.str2time, '4000@') + self.assertRaises(archivebot.MalformedConfigError, archivebot.str2time, '$1') + + def test_str2size(self): + """Test for parsing the shorthand notation of sizes.""" + self.assertEqual(archivebot.str2size('0'), (0, 'B')) + self.assertEqual(archivebot.str2size('3000'), (3000, 'B')) + self.assertEqual(archivebot.str2size('4 K'), (4096, 'B')) + self.assertEqual(archivebot.str2size('2T'), (2, 'T')) + # TODO: should probably be recognized 2000? + self.assertEqual(archivebot.str2size('2 000'), (2, 'B')) + + class TestArchiveBot(TestCase):
"""Test archivebot script on 40+ Wikipedia sites."""