import2ledger/tests/test_templates.py
Brett Smith 5c73c40bcc import2ledger: First version.
This is a pretty feature-complete version 1.
I don't know why I waited this long to commit anything.
2017-10-22 13:40:20 -04:00

75 lines
2.5 KiB
Python

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)
print(repr(rendered))
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",
]