diff options
Diffstat (limited to 'tests/test_scheduling.py')
| -rw-r--r-- | tests/test_scheduling.py | 145 |
1 files changed, 69 insertions, 76 deletions
diff --git a/tests/test_scheduling.py b/tests/test_scheduling.py index c9cda42..ae1cf92 100644 --- a/tests/test_scheduling.py +++ b/tests/test_scheduling.py @@ -1,16 +1,20 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals, absolute_import -# This code is so you can run the samples without installing the package, -# and should be before any import touching nikola, in any file under tests/ +import datetime +import locale import os import sys +# This code is so you can run the samples without installing the package, +# and should be before any import touching nikola, in any file under tests/ sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) +import dateutil.parser +import dateutil.tz +import pytest from .base import BaseTestCase -import datetime -from nose.plugins.skip import SkipTest + try: from freezegun import freeze_time _freeze_time = True @@ -18,127 +22,116 @@ except ImportError: _freeze_time = False freeze_time = lambda x: lambda y: y -FMT = '%Y/%m/%d %H:%M:%S' -NOW = '2013/08/22 10:00:00' # Thursday -TODAY = datetime.datetime.strptime(NOW, FMT) -RULE_TH = 'RRULE:FREQ=WEEKLY;BYDAY=TH' -RULE_FR = 'RRULE:FREQ=WEEKLY;BYDAY=FR' +_NOW = datetime.datetime( # Thursday + 2013, 8, 22, 10, 0, 0, tzinfo=dateutil.tz.tzutc()) +@pytest.mark.skipif(not _freeze_time, reason="freezegun not installed.") class TestScheduling(BaseTestCase): @classmethod - def setUp(self): - if not _freeze_time: - raise SkipTest('freezegun not installed') - + def setUp(cls): d = [name for name in sys.modules if name.startswith("six.moves.")] - self.deleted = {} + cls.deleted = {} for name in d: - self.deleted[name] = sys.modules[name] + cls.deleted[name] = sys.modules[name] del sys.modules[name] @classmethod - def tearDown(self): - for name, mod in self.deleted.items(): + def tearDown(cls): + for name, mod in cls.deleted.items(): sys.modules[name] = mod - @freeze_time(NOW) + @freeze_time(_NOW) def test_get_date(self): from nikola.plugins.command.new_post import get_date - #### NOW does not match rule ######################################### - ## No last date + FMT = '%Y-%m-%d %H:%M:%S %Z'.format( + locale.nl_langinfo(locale.D_FMT), + locale.nl_langinfo(locale.T_FMT), + ) + NOW = _NOW.strftime(FMT) + TODAY = dateutil.parser.parse(NOW) + RULE_TH = 'RRULE:FREQ=WEEKLY;BYDAY=TH' + RULE_FR = 'RRULE:FREQ=WEEKLY;BYDAY=FR' + UTC = dateutil.tz.tzutc() + + # NOW does not match rule ######################################### + # No last date expected = TODAY.replace(day=23).strftime(FMT) - self.assertEqual(expected, get_date(True, RULE_FR)) - self.assertEqual(expected, get_date(True, RULE_FR, force_today=True)) + self.assertEqual(expected, get_date(True, RULE_FR, tz=UTC)) + self.assertEqual(expected, get_date(True, RULE_FR, tz=UTC)) - ## Last date in the past; doesn't match rule + # Last date in the past; doesn't match rule date = TODAY.replace(hour=7) expected = TODAY.replace(day=23, hour=7).strftime(FMT) - self.assertEqual(expected, get_date(True, RULE_FR, date)) - self.assertEqual(expected, get_date(True, RULE_FR, date, True)) + self.assertEqual(expected, get_date(True, RULE_FR, date, tz=UTC)) - ## Last date in the future; doesn't match rule + # Last date in the future; doesn't match rule date = TODAY.replace(day=24, hour=7) expected = TODAY.replace(day=30, hour=7).strftime(FMT) - self.assertEqual(expected, get_date(True, RULE_FR, date)) - self.assertEqual(expected, get_date(True, RULE_FR, date, True)) + self.assertEqual(expected, get_date(True, RULE_FR, date, tz=UTC)) - ## Last date in the past; matches rule + # Last date in the past; matches rule date = TODAY.replace(day=16, hour=8) expected = TODAY.replace(day=23, hour=8).strftime(FMT) - self.assertEqual(expected, get_date(True, RULE_FR, date)) - self.assertEqual(expected, get_date(True, RULE_FR, date, True)) + self.assertEqual(expected, get_date(True, RULE_FR, date, tz=UTC)) - ## Last date in the future; matches rule + # Last date in the future; matches rule date = TODAY.replace(day=23, hour=18) expected = TODAY.replace(day=30, hour=18).strftime(FMT) - self.assertEqual(expected, get_date(True, RULE_FR, date)) - self.assertEqual(expected, get_date(True, RULE_FR, date, True)) - - #### NOW matches rule ################################################ - ## Not scheduling should return NOW - self.assertEqual(NOW, get_date(False, RULE_TH)) - ## No last date - self.assertEqual(NOW, get_date(True, RULE_TH)) - self.assertEqual(NOW, get_date(True, RULE_TH, force_today=True)) - - ## Last date in the past; doesn't match rule - ### Corresponding time has already passed, today + self.assertEqual(expected, get_date(True, RULE_FR, date, tz=UTC)) + + # NOW matches rule ################################################ + # Not scheduling should return NOW + self.assertEqual(NOW, get_date(False, RULE_TH, tz=UTC)) + # No last date + self.assertEqual(NOW, get_date(True, RULE_TH, tz=UTC)) + self.assertEqual(NOW, get_date(True, RULE_TH, tz=UTC)) + + # Last date in the past; doesn't match rule + # Corresponding time has already passed, today date = TODAY.replace(day=21, hour=7) expected = TODAY.replace(day=29, hour=7).strftime(FMT) - self.assertEqual(expected, get_date(True, RULE_TH, date)) - expected = TODAY.replace(day=22, hour=7).strftime(FMT) - self.assertEqual(expected, get_date(True, RULE_TH, date, True)) - ### Corresponding time has not passed today + self.assertEqual(expected, get_date(True, RULE_TH, date, tz=UTC)) + # Corresponding time has not passed today date = TODAY.replace(day=21, hour=18) expected = TODAY.replace(day=22, hour=18).strftime(FMT) - self.assertEqual(expected, get_date(True, RULE_TH, date)) - self.assertEqual(expected, get_date(True, RULE_TH, date, True)) + self.assertEqual(expected, get_date(True, RULE_TH, date, tz=UTC)) - ## Last date in the future; doesn't match rule - ### Corresponding time has already passed, today + # Last date in the future; doesn't match rule + # Corresponding time has already passed, today date = TODAY.replace(day=24, hour=7) expected = TODAY.replace(day=29, hour=7).strftime(FMT) - self.assertEqual(expected, get_date(True, RULE_TH, date)) - self.assertEqual(expected, get_date(True, RULE_TH, date, True)) - ### Corresponding time has not passed today + self.assertEqual(expected, get_date(True, RULE_TH, date, tz=UTC)) + # Corresponding time has not passed today date = TODAY.replace(day=24, hour=18) expected = TODAY.replace(day=29, hour=18).strftime(FMT) - self.assertEqual(expected, get_date(True, RULE_TH, date)) - self.assertEqual(expected, get_date(True, RULE_TH, date, True)) + self.assertEqual(expected, get_date(True, RULE_TH, date, tz=UTC)) - ## Last date in the past; matches rule - ### Corresponding time has already passed, today + # Last date in the past; matches rule + # Corresponding time has already passed, today date = TODAY.replace(day=15, hour=7) expected = TODAY.replace(day=29, hour=7).strftime(FMT) - self.assertEqual(expected, get_date(True, RULE_TH, date)) - expected = TODAY.replace(day=22, hour=7).strftime(FMT) - self.assertEqual(expected, get_date(True, RULE_TH, date, True)) - ### Corresponding time has already passed, today; rule specifies HOUR + self.assertEqual(expected, get_date(True, RULE_TH, date, tz=UTC)) + # Corresponding time has already passed, today; rule specifies HOUR date = TODAY.replace(day=15, hour=7) expected = TODAY.replace(day=29, hour=9).strftime(FMT) - self.assertEqual(expected, get_date(True, RULE_TH + ';BYHOUR=9', date)) - expected = TODAY.replace(day=22, hour=9).strftime(FMT) - self.assertEqual(expected, - get_date(True, RULE_TH + ';BYHOUR=9', date, True)) - ### Corresponding time has not passed today + self.assertEqual(expected, get_date(True, RULE_TH + ';BYHOUR=9', date, tz=UTC)) + # Corresponding time has not passed today date = TODAY.replace(day=15, hour=18) expected = TODAY.replace(day=22, hour=18).strftime(FMT) - self.assertEqual(expected, get_date(True, RULE_TH, date)) - self.assertEqual(expected, get_date(True, RULE_TH, date, True)) + self.assertEqual(expected, get_date(True, RULE_TH, date, tz=UTC)) - ## Last date in the future; matches rule - ### Corresponding time has already passed, today + # Last date in the future; matches rule + # Corresponding time has already passed, today date = TODAY.replace(day=29, hour=7) expected = TODAY.replace(day=5, month=9, hour=7).strftime(FMT) - self.assertEqual(expected, get_date(True, RULE_TH, date)) - ### Corresponding time has not passed today + self.assertEqual(expected, get_date(True, RULE_TH, date, tz=UTC)) + # Corresponding time has not passed today date = TODAY.replace(day=22, hour=18) expected = TODAY.replace(day=29, hour=18).strftime(FMT) - self.assertEqual(expected, get_date(True, RULE_TH, date)) - self.assertEqual(expected, get_date(True, RULE_TH, date, True)) + self.assertEqual(expected, get_date(True, RULE_TH, date, tz=UTC)) if __name__ == '__main__': import unittest |
