import argparse import datetime import itertools import pytest from import2ledger import hooks from import2ledger.hooks import add_entity, default_date def test_load_all(): all_hooks = list(hooks.load_all()) assert add_entity.AddEntityHook in all_hooks @pytest.mark.parametrize('payee,expected', [ ('Alex Smith', 'Smith-Alex'), ('Dakota D. Doe', 'Doe-Dakota-D'), ('Björk', 'Bjork'), ('Fran Doe-Smith', 'Doe-Smith-Fran'), ('Alex(Nickname) Smith', 'Smith-Alex'), ('稲荷', '稲荷'), ('Pøweł', 'Powel'), ('Elyse Jan Smith', 'Smith-Elyse-Jan'), ('Jan van Smith', 'van-Smith-Jan'), ('Francis da Silva', 'da-Silva-Francis'), ]) def test_add_entity(payee, expected): data = {'payee': payee} hook = add_entity.AddEntityHook(argparse.Namespace()) hook.run(data) assert data['entity'] == expected class DefaultDateConfig: ONE_DAY = datetime.timedelta(days=1) def __init__(self, start_date=None): if start_date is None: start_date = datetime.date(2016, 3, 5) self.date = start_date - self.ONE_DAY def get_default_date(self, section_name=None): self.date += self.ONE_DAY return self.date class TestDefaultDate: def test_simple_case(self): expect_date = datetime.date(2016, 2, 4) config = DefaultDateConfig(expect_date) data = {} hook = default_date.DefaultDateHook(config) hook.run(data) assert data['date'] == expect_date def test_no_caching(self): config = DefaultDateConfig() hook = default_date.DefaultDateHook(config) d1 = {} d2 = {} hook.run(d1) hook.run(d2) assert d1['date'] != d2['date'] def test_no_override(self): expect_date = datetime.date(2016, 2, 6) config = DefaultDateConfig(expect_date + datetime.timedelta(days=300)) hook = default_date.DefaultDateHook(config) data = {'date': expect_date} hook.run(data) assert data['date'] is expect_date