diff --git a/relate/utils.py b/relate/utils.py index 8eae8526d..3dc240e5e 100644 --- a/relate/utils.py +++ b/relate/utils.py @@ -224,12 +224,11 @@ def format_datetime_local(datetime, format='DATETIME_FORMAT'): """ from django.utils import formats - from django.utils.dateformat import format as dformat - try: return formats.date_format(datetime, format) except AttributeError: try: + from django.utils.dateformat import format as dformat return dformat(datetime, format) except AttributeError: return formats.date_format(datetime, "DATETIME_FORMAT") diff --git a/tests/test_misc.py b/tests/test_misc.py index 0f0f06af7..137fab753 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -30,13 +30,16 @@ import datetime from django.test import TestCase, RequestFactory from django.test.utils import override_settings +from django.utils.formats import date_format, get_format +from django.utils.dateformat import format from django.utils.translation import ugettext_lazy as _ from course.models import Course from course.views import EditCourseForm from course.versioning import CourseCreationForm from relate.utils import ( - is_maintenance_mode, render_email_template, get_outbound_mail_connection) + is_maintenance_mode, render_email_template, get_outbound_mail_connection, + format_datetime_local) from tests.base_test_mixins import SingleCourseTestMixin from tests.utils import LocmemBackendTestsMixin, mail, mock @@ -522,4 +525,57 @@ def test_label_is_none(self): get_outbound_mail_connection(None), BaseEmailBackend) +# {{{ test relate.utils.format_datetime_local + +def date_format_side_effect(value, format=None, use_l10n=None): + """mock django.utils.formats.date_format""" + if format == "foo": + raise AttributeError + else: + return date_format(value, format, use_l10n) + + +def format_side_effectformat(value, format_string): + """mock django.utils.dateformat.format""" + if format_string == "foo": + raise AttributeError + else: + return format(value, format_string) + + +class FormatDatetimeLocalTest(unittest.TestCase): + """test relate.utils.format_datetime_local""" + + def test_success(self): + dtime = datetime.datetime(2019, 1, 1) + format_str = "SHORT_DATETIME_FORMAT" + self.assertEqual( + format_datetime_local(dtime, format=format_str), + date_format(dtime, format=format_str)) + + def test_attribute_error1(self): + dtime = datetime.datetime(2019, 1, 1) + with mock.patch("django.utils.formats.date_format") as mock_date_format: + mock_date_format.side_effect = date_format_side_effect + result = format_datetime_local( + dtime, format="foo") + self.assertEqual( + result, date_format(dtime, format="foo")) + + def test_attribute_error2(self): + dtime = datetime.datetime(2019, 1, 1) + with mock.patch( + "django.utils.formats.date_format" + ) as mock_date_format, mock.patch( + "django.utils.dateformat.format" + ) as mock_format: + mock_date_format.side_effect = date_format_side_effect + mock_format.side_effect = format_side_effectformat + result = format_datetime_local( + dtime, format="foo") + self.assertEqual( + result, date_format(dtime, format=get_format("DATETIME_FORMAT"))) + +# }}} + # vim: foldmethod=marker