Files @ f888b13c56b0
Branch filter:

Location: NPO-Accounting/import2ledger/tests/test_hooks.py

Brett Smith
hooks.add_entity: Better handle common name prefix parts.

Keep these with the name they're attached to, rather than breaking the name
in the middle.
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