Files @ ab9c65d20dc5
Branch filter:

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

Brett Smith
import2ledger: Support only importing entries in a date range.
import configparser
import datetime
import decimal
import pathlib

import pytest
from import2ledger import template

from . import DATA_DIR, normalize_whitespace

DATE = datetime.date(2015, 3, 14)

config = configparser.ConfigParser(comment_prefixes='#')
with pathlib.Path(DATA_DIR, 'templates.ini').open() as conffile:
    config.read_file(conffile)

def template_from(section_name, *args, **kwargs):
    return template.Template(config[section_name]['template'], *args, **kwargs)

def assert_easy_render(tmpl, entity, amount, currency, expect_date, expect_amt):
    rendered = tmpl.render(entity, decimal.Decimal(amount), currency, DATE)
    lines = [normalize_whitespace(s) for s in rendered.splitlines()]
    assert lines == [
        "",
        "{} {}".format(expect_date, entity),
        "  Accrued:Accounts Receivable  " + expect_amt,
        "  Income:Donations  " + expect_amt.replace(amount, "-" + amount),
    ]

def test_easy_template():
    tmpl = template_from('Simplest')
    assert_easy_render(tmpl, 'JJ', '5.99', 'CAD', '2015/03/14', '5.99 CAD')

def test_date_formatting():
    tmpl = template_from('Simplest', date_fmt='%Y-%m-%d')
    assert_easy_render(tmpl, 'KK', '6.99', 'CAD', '2015-03-14', '6.99 CAD')

def test_currency_formatting():
    tmpl = template_from('Simplest', signed_currencies=['USD'])
    assert_easy_render(tmpl, 'CC', '7.99', 'USD', '2015/03/14', '$7.99')

def test_complex_template():
    template_vars = {
        'entity': 'T-T',
        'txid': 'ABCDEF',
    }
    tmpl = template_from('Complex', date_fmt='%Y-%m-%d', signed_currencies=['USD'])
    rendered = tmpl.render('TT', decimal.Decimal('125.50'), 'USD', DATE, **template_vars)
    lines = [normalize_whitespace(s) for s in rendered.splitlines()]
    assert lines == [
        "",
        "2015-03-14 TT",
        "  ;Tag: Value",
        "  ;TransactionID: ABCDEF",
        "  Accrued:Accounts Receivable  $125.50",
        "  ;Entity: Supplier",
        "  Income:Donations:Specific  $-119.85",
        "  ;Program: Specific",
        "  ;Entity: T-T",
        "  Income:Donations:General  $-5.65",
        "  ;Entity: T-T",
    ]

def test_balancing():
    tmpl = template_from('FiftyFifty')
    rendered = tmpl.render('FF', decimal.Decimal('1.01'), 'USD', DATE)
    lines = [normalize_whitespace(s) for s in rendered.splitlines()]
    assert lines == [
        "",
        "2015/03/14 FF",
        "  Accrued:Accounts Receivable  1.01 USD",
        "  Income:Donations  -0.50 USD",
        "  Income:Sales  -0.51 USD",
    ]