Files
@ 44762555d5eb
Branch filter:
Location: NPO-Accounting/import2ledger/tests/test_main.py - annotation
44762555d5eb
2.2 KiB
text/x-python
yourcause: New importer.
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
|