Commit 5a16b64e authored by Carl Meyer's avatar Carl Meyer
Browse files

Avoid spurious failures in naturaltime tests.

Previous fix didn't cover timesince module, which naturaltime delegates to
under certain conditions. Extended mock of datetime to timesince module, and
switched to a fixed datetime rather than now() for testing, for more
reproducible tests (failures in mock will fail fast, rather than sporadically).

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17038 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 9796f695
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -118,7 +118,8 @@ class HumanizeTests(TestCase):
        self.assertNotEqual(naturalday_one, naturalday_two)

    def test_naturaltime(self):
        now = datetime.now()
        # we're going to mock datetime.datetime, so use a fixed datetime
        now = datetime(2011, 8, 15)
        test_list = [
            now,
            now - timedelta(seconds=1),
@@ -160,18 +161,21 @@ class HumanizeTests(TestCase):

        # mock out datetime so these tests don't fail occasionally when the
        # test runs too slow
        class MockDateTime(object):
        class MockDateTime(datetime):
            @classmethod
            def now(self):
                return now

            def __call__(self, *args, **kwargs):
                return datetime(*args, **kwargs)

        # naturaltime also calls timesince/timeuntil
        from django.contrib.humanize.templatetags import humanize
        orig_datetime = humanize.datetime
        humanize.datetime = MockDateTime()
        from django.utils import timesince
        orig_humanize_datetime = humanize.datetime
        orig_timesince_datetime = timesince.datetime.datetime
        humanize.datetime = MockDateTime
        timesince.datetime.datetime = MockDateTime

        try:
            self.humanize_tester(test_list, result_list, 'naturaltime')
        finally:
            humanize.datetime = orig_datetime
            humanize.datetime = orig_humanize_datetime
            timesince.datetime.datetime = orig_timesince_datetime