From 39a8fa637eda8dd39fcc2400de2ee978046f6209 Mon Sep 17 00:00:00 2001 From: bkfox Date: Wed, 28 Jun 2023 16:07:49 +0200 Subject: [PATCH] add tests for converters, utils, signals --- aircox/models/signals.py | 6 ++-- aircox/tests/test_converters.py | 54 +++++++++++++++++++++++++++++++++ aircox/utils.py | 23 +++----------- 3 files changed, 62 insertions(+), 21 deletions(-) create mode 100644 aircox/tests/test_converters.py diff --git a/aircox/models/signals.py b/aircox/models/signals.py index 97cf952..058fd07 100755 --- a/aircox/models/signals.py +++ b/aircox/models/signals.py @@ -53,8 +53,10 @@ def page_post_save(sender, instance, created, *args, **kwargs): def program_post_save(sender, instance, created, *args, **kwargs): """Clean-up later diffusions when a program becomes inactive.""" if not instance.active: - Diffusion.object.program(instance).after(tz.now()).delete() - Episode.object.parent(instance).filter(diffusion__isnull=True).delete() + Diffusion.objects.program(instance).after(tz.now()).delete() + Episode.objects.parent(instance).filter( + diffusion__isnull=True + ).delete() cover = getattr(instance, "__initial_cover", None) if cover is None and instance.cover is not None: diff --git a/aircox/tests/test_converters.py b/aircox/tests/test_converters.py new file mode 100644 index 0000000..73bd19b --- /dev/null +++ b/aircox/tests/test_converters.py @@ -0,0 +1,54 @@ +from datetime import date +from django.utils.safestring import SafeString + +import pytest + +from aircox import converters + + +@pytest.fixture +def page_path_conv(): + return converters.PagePathConverter() + + +@pytest.fixture +def week_conv(): + return converters.WeekConverter() + + +@pytest.fixture +def date_conv(): + return converters.DateConverter() + + +class TestPagePathConverter: + def test_to_python(self, page_path_conv): + val = "path_value" + result = page_path_conv.to_python(val) + assert result == "/" + val + "/" + + def test_to_url(self, page_path_conv): + val = "/val" + result = page_path_conv.to_url(val) + assert isinstance(result, SafeString) + assert result == val[1:] + "/" + + +class TestWeekConverter: + def test_to_python(self, week_conv): + val = "2023/02" + assert week_conv.to_python(val) == date(2023, 1, 9) + + def test_to_url(self, week_conv): + val = date(2023, 1, 10) + assert week_conv.to_url(val) == "2023/02" + + +class TestDateConverter: + def test_to_python(self, date_conv): + val = "2023/02/05" + assert date_conv.to_python(val) == date(2023, 2, 5) + + def test_to_url(self, date_conv): + val = date(2023, 5, 10) + assert date_conv.to_url(val) == "2023/05/10" diff --git a/aircox/utils.py b/aircox/utils.py index 34958d6..73d8cf9 100755 --- a/aircox/utils.py +++ b/aircox/utils.py @@ -4,7 +4,6 @@ import django.utils.timezone as tz __all__ = ( "Redirect", "redirect", - "date_range", "cast_date", "date_or_default", "to_timedelta", @@ -29,31 +28,17 @@ def redirect(url): def str_to_date(value, sep="/"): - """Return a date from the provided `value` string, formated as "yyyy/mm/dd" - (or "dd/mm/yyyy" if `reverse` is True). + """Return a date from the provided `value` string, formated as + "yyyy/mm/dd". - Raises ValueError for incorrect value format. + :raises: ValueError for incorrect value format. """ value = value.split(sep)[:3] if len(value) < 3: - return ValueError("incorrect date format") + raise ValueError("incorrect date format") return datetime.date(int(value[0]), int(value[1]), int(value[2])) -def date_range(date, delta=None, **delta_kwargs): - """Return a range of provided date such as `[date-delta, date+delta]`. - - :param date: the reference date - :param delta: timedelta - :param **delta_kwargs: timedelta init arguments - - Return a datetime range for a given day, as: - ```(date, 0:0:0:0; date, 23:59:59:999)```. - """ - delta = tz.timedelta(**delta_kwargs) if delta is None else delta - return [date - delta, date + delta] - - def cast_date(date, into=datetime.date): """Cast a given date into the provided class' instance.