diff --git a/tests/test_hooks.py b/tests/test_hooks.py index 270209f5f1b525ae2ec00ae781ca9b8555c547d8..583453e9c3e18f56e0e293fc0980b877314f3f0a 100644 --- a/tests/test_hooks.py +++ b/tests/test_hooks.py @@ -5,7 +5,7 @@ import itertools import pytest from import2ledger import hooks -from import2ledger.hooks import add_entity, default_date +from import2ledger.hooks import add_entity, default_date, filter_by_date def test_load_all(): all_hooks = list(hooks.load_all()) @@ -30,6 +30,36 @@ def test_add_entity(payee, expected): assert data['entity'] == expected +class DateRangeConfig: + def __init__(self, start_date=None, end_date=None): + self.start_date = start_date + self.end_date = end_date + + def date_in_want_range(self, date): + return ( + ((self.start_date is None) or (date >= self.start_date)) + and ((self.end_date is None) or (date <= self.end_date)) + ) + + +@pytest.mark.parametrize('entry_date,start_date,end_date,allowed', [ + (datetime.date(2016, 5, 10), datetime.date(2016, 1, 1), datetime.date(2016, 12, 31), True), + (datetime.date(2016, 1, 1), datetime.date(2016, 1, 1), datetime.date(2016, 12, 31), True), + (datetime.date(2016, 12, 31), datetime.date(2016, 1, 1), datetime.date(2016, 12, 31), True), + (datetime.date(2016, 1, 1), datetime.date(2016, 1, 1), None, True), + (datetime.date(2016, 12, 31), None, datetime.date(2016, 12, 31), True), + (datetime.date(1999, 1, 2), None, None, True), + (datetime.date(2016, 1, 25), datetime.date(2016, 2, 1), datetime.date(2016, 12, 31), False), + (datetime.date(2016, 12, 26), datetime.date(2016, 1, 1), datetime.date(2016, 11, 30), False), + (datetime.date(2016, 1, 31), datetime.date(2016, 2, 1), None, False), + (datetime.date(2016, 12, 1), None, datetime.date(2016, 11, 30), False), +]) +def test_filter_by_date(entry_date, start_date, end_date, allowed): + entry_data = {'date': entry_date} + hook = filter_by_date.FilterByDateHook(DateRangeConfig(start_date, end_date)) + hook.run(entry_data) + assert bool(entry_data) == allowed + class DefaultDateConfig: ONE_DAY = datetime.timedelta(days=1)