"""Test CLI utilities"""
# Copyright © 2020 Brett Smith
# Copyright © 2020, 2021 Brett Smith
# License: AGPLv3-or-later WITH Beancount-Plugin-Additional-Permission-1.0
#
# Full copyright and licensing details can be found at toplevel file
@@ -23,7 +23,7 @@ from pathlib import Path
from . import testutil
from conservancy_beancount import cliutil
from conservancy_beancount import cliutil, errors
FILE_NAMES = ['-foobar', '-foo.bin']
STREAM_PATHS = [None, Path('-')]
@@ -163,6 +163,25 @@ def test_excepthook_oserror(errnum, caplog):
assert log.levelname == 'CRITICAL'
assert log.message == f"I/O error: {error.filename}: {error.strerror}"
@pytest.mark.parametrize('errcls', [
errors.RewriteRuleActionError,
errors.RewriteRuleConditionError,
errors.RewriteRuleLoadError,
errors.RewriteRuleValidationError,
])
def test_excepthook_rewrite_rule_error(errcls, caplog):
name = errcls.__name__
error = errcls("bad rewrite rule", f"{name}.yml", 170, [name])
with pytest.raises(SystemExit) as exc_check:
cliutil.ExceptHook()(type(error), error, None)
assert exc_check.value.args[0] == cliutil.ExitCode.RewriteRulesError
assert caplog.records
for log in caplog.records:
lines = log.message.splitlines()
assert lines[0].startswith(f"{name}: bad rewrite rule in {name}.yml rule #170")
assert re.match(rf' source:\W+{name}\b', lines[-1])
@pytest.mark.parametrize('exc_type', [
AttributeError,
RuntimeError,