Files
@ 76f2707aacf7
Branch filter:
Location: NPO-Accounting/import2ledger/tests/test_main.py - annotation
76f2707aacf7
2.2 KiB
text/x-python
hooks.ledger_entry: New hook to output Ledger entries.
This is roughly the smallest diff necessary to move output to a hook.
There's a lot of code reorganization that should still happen to bring it
better in line with this new structure.
This is roughly the smallest diff necessary to move output to a hook.
There's a lot of code reorganization that should still happen to bring it
better in line with this new structure.
5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe cc8c03ab626a cc8c03ab626a 5c73c40bccfe cc8c03ab626a cc8c03ab626a cc8c03ab626a cc8c03ab626a cc8c03ab626a cc8c03ab626a 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe cc8c03ab626a cc8c03ab626a cc8c03ab626a cc8c03ab626a cc8c03ab626a cc8c03ab626a cc8c03ab626a cc8c03ab626a 5c73c40bccfe 5c73c40bccfe cc8c03ab626a 5c73c40bccfe 5c73c40bccfe cc8c03ab626a 5c73c40bccfe 5c73c40bccfe 5c73c40bccfe cc8c03ab626a cc8c03ab626a cc8c03ab626a ab9c65d20dc5 ab9c65d20dc5 cc8c03ab626a ab9c65d20dc5 ab9c65d20dc5 ab9c65d20dc5 cc8c03ab626a ab9c65d20dc5 ab9c65d20dc5 ab9c65d20dc5 cc8c03ab626a cc8c03ab626a cc8c03ab626a ab9c65d20dc5 | import io
import pathlib
import pytest
from . import DATA_DIR, normalize_whitespace
from import2ledger import __main__ as i2lmain
ARGLIST = [
'-C', (DATA_DIR / 'test_main.ini').as_posix(),
]
def run_main(arglist):
stdout = io.StringIO()
stderr = io.StringIO()
exitcode = i2lmain.main(arglist, stdout, stderr)
stdout.seek(0)
stderr.seek(0)
return exitcode, stdout, stderr
def iter_entries(in_file):
lines = []
for line in in_file:
if line == '\n':
if lines:
yield ''.join(lines)
lines = []
else:
lines.append(line)
if lines:
yield ''.join(lines)
def format_entry(entry_s, format_vars):
return normalize_whitespace(entry_s).format_map(format_vars)
def format_entries(source, format_vars=None):
if format_vars is None:
format_vars = {}
return (format_entry(e, format_vars) for e in iter_entries(source))
def expected_entries(path, format_vars=None):
path = pathlib.Path(path)
if not path.is_absolute():
path = DATA_DIR / path
with path.open() as in_file:
return list(format_entries(in_file, format_vars))
def path_vars(path):
return {
'source_abspath': str(path),
'source_name': path.name,
'source_path': str(path),
}
def test_fees_import():
source_path = pathlib.Path(DATA_DIR, 'PatreonEarnings.csv')
arglist = ARGLIST + [
'-c', 'One',
source_path.as_posix(),
]
exitcode, stdout, _ = run_main(arglist)
assert exitcode == 0
actual = list(format_entries(stdout))
expected = expected_entries('test_main_fees_import.ledger', path_vars(source_path))
assert actual == expected
def test_date_range_import():
source_path = pathlib.Path(DATA_DIR, 'PatreonEarnings.csv')
arglist = ARGLIST + [
'-c', 'One',
'--date-range', '2017/10/01-',
source_path.as_posix(),
]
exitcode, stdout, _ = run_main(arglist)
assert exitcode == 0
actual = list(format_entries(stdout))
valid = expected_entries('test_main_fees_import.ledger', path_vars(source_path))
expected = [entry for entry in valid if entry.startswith('2017/10/')]
assert actual == expected
|