From 90f62d3482886e7e4d45b75ffc98aaef9350455e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sascha=20I=C3=9Fbr=C3=BCcker?= Date: Tue, 6 Apr 2021 23:38:15 +0200 Subject: [PATCH] Fix relative date formatting (#107) --- bookmarks/tests/test_utils.py | 18 ++++++++++++++++++ bookmarks/utils.py | 9 +++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/bookmarks/tests/test_utils.py b/bookmarks/tests/test_utils.py index 6638335..74845d0 100644 --- a/bookmarks/tests/test_utils.py +++ b/bookmarks/tests/test_utils.py @@ -1,3 +1,5 @@ +from unittest.mock import patch + from django.test import TestCase from django.utils import timezone @@ -23,6 +25,14 @@ class UtilsTestCase(TestCase): result = humanize_absolute_date(test_case[0], test_case[1]) self.assertEqual(test_case[2], result) + def test_humanize_absolute_date_should_use_current_date_as_default(self): + with patch.object(timezone, 'now', return_value=timezone.datetime(2021, 1, 1)): + self.assertEqual(humanize_absolute_date(timezone.datetime(2021, 1, 1)), 'Today') + + # Regression: Test that subsequent calls use current date instead of cached date (#107) + with patch.object(timezone, 'now', return_value=timezone.datetime(2021, 1, 13)): + self.assertEqual(humanize_absolute_date(timezone.datetime(2021, 1, 13)), 'Today') + def test_humanize_relative_date(self): test_cases = [ (timezone.datetime(2021, 1, 1), timezone.datetime(2022, 1, 1), '1 year ago'), @@ -45,3 +55,11 @@ class UtilsTestCase(TestCase): for test_case in test_cases: result = humanize_relative_date(test_case[0], test_case[1]) self.assertEqual(test_case[2], result) + + def test_humanize_relative_date_should_use_current_date_as_default(self): + with patch.object(timezone, 'now', return_value=timezone.datetime(2021, 1, 1)): + self.assertEqual(humanize_relative_date(timezone.datetime(2021, 1, 1)), 'Today') + + # Regression: Test that subsequent calls use current date instead of cached date (#107) + with patch.object(timezone, 'now', return_value=timezone.datetime(2021, 1, 13)): + self.assertEqual(humanize_relative_date(timezone.datetime(2021, 1, 13)), 'Today') diff --git a/bookmarks/utils.py b/bookmarks/utils.py index 65a6dd4..d3e9570 100644 --- a/bookmarks/utils.py +++ b/bookmarks/utils.py @@ -1,4 +1,5 @@ from datetime import datetime +from typing import Optional from dateutil.relativedelta import relativedelta from django.template.defaultfilters import pluralize @@ -20,7 +21,9 @@ weekday_names = { } -def humanize_absolute_date(value: datetime, now=timezone.now()): +def humanize_absolute_date(value: datetime, now: Optional[datetime] = None): + if not now: + now = timezone.now() delta = relativedelta(now, value) yesterday = now - relativedelta(days=1) @@ -36,7 +39,9 @@ def humanize_absolute_date(value: datetime, now=timezone.now()): return weekday_names[value.isoweekday()] -def humanize_relative_date(value: datetime, now: datetime = timezone.now()): +def humanize_relative_date(value: datetime, now: Optional[datetime] = None): + if not now: + now = timezone.now() delta = relativedelta(now, value) if delta.years > 0: