Commits

Anonymous committed f70eaa4

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).

Comments (0)

Files changed (1)

django/contrib/humanize/tests.py

         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),
 
         # 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