Files @ b41a7a99af17
Branch filter:

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

Brett Smith
hooks: Filter entries by setting entry_data['_hook_cancel'] to True.

The current method only works for plain dicts and other simple mappings.
Mapping that may still contain items after .clear(), like ChainMap, can't
rely on the old method.
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 entries2set(in_file):
    return set(normalize_whitespace(e) for e in iter_entries(in_file))

def expected_entries(path):
    path = pathlib.Path(path)
    if not path.is_absolute():
        path = DATA_DIR / path
    with path.open() as in_file:
        return entries2set(in_file)

def test_fees_import():
    arglist = ARGLIST + [
        '-c', 'One',
        pathlib.Path(DATA_DIR, 'PatreonEarnings.csv').as_posix(),
    ]
    exitcode, stdout, _ = run_main(arglist)
    assert exitcode == 0
    actual = entries2set(stdout)
    assert actual == expected_entries('test_main_fees_import.ledger')

def test_date_range_import():
    arglist = ARGLIST + [
        '-c', 'One',
        '--date-range', '2017/10/01-',
        pathlib.Path(DATA_DIR, 'PatreonEarnings.csv').as_posix(),
    ]
    exitcode, stdout, _ = run_main(arglist)
    assert exitcode == 0
    actual = entries2set(stdout)
    expected = {entry for entry in expected_entries('test_main_fees_import.ledger')
                if entry.startswith('2017/10/')}
    assert actual == expected