Files
@ ef03893bfed3
Branch filter:
Location: NPO-Accounting/conservancy_beancount/tests/test_extract_odf_links.py - annotation
ef03893bfed3
2.4 KiB
text/x-python
query: Convert query functions that return List to Set.
Beancount's built-in renderers expect this and are better equipped for it.
Beancount's built-in renderers expect this and are better equipped for it.
ce067963dc6f ce067963dc6f 1b7fdf4f3b00 ce067963dc6f 1b7fdf4f3b00 1b7fdf4f3b00 ce067963dc6f ce067963dc6f 2eba5a554600 ce067963dc6f ce067963dc6f ce067963dc6f cf2d825a08db cf2d825a08db ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f 72f144e1fffb ce067963dc6f cf2d825a08db cf2d825a08db cf2d825a08db cf2d825a08db ce067963dc6f ce067963dc6f cf2d825a08db cf2d825a08db cf2d825a08db cf2d825a08db cf2d825a08db cf2d825a08db 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f 2eba5a554600 ce067963dc6f ce067963dc6f ce067963dc6f 72f144e1fffb 72f144e1fffb ce067963dc6f ce067963dc6f 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 2eba5a554600 | """test_extract_odf_links.py - Unit tests for ODF link extraction"""
# Copyright © 2020 Brett Smith
# License: AGPLv3-or-later WITH Beancount-Plugin-Additional-Permission-1.0
#
# Full copyright and licensing details can be found at toplevel file
# LICENSE.txt in the repository.
import io
import sys
import pytest
from pathlib import Path
from . import testutil
from conservancy_beancount.tools import extract_odf_links
SRC_PATH = testutil.test_path('repository/LinksReport.ods')
BAD_PATH_S = str(testutil.test_path('repository/Projects/Bad Link.txt'))
INCLUDED_FILE_LINKS = {
Path('/repository/Projects/project-data.yml'),
Path('Projects/project-data.yml'),
Path('Projects/Bad Link.txt'),
}
def expected_links(rel_path):
return frozenset(
str(path if path.is_absolute() else rel_path / path)
for path in INCLUDED_FILE_LINKS
)
def check_output(stdout, sep, rel_path):
actual = stdout.getvalue().split(sep)
if actual and not actual[-1]:
actual.pop()
expected = expected_links(rel_path)
assert len(actual) == len(expected)
assert set(actual) == expected
@pytest.mark.parametrize('arglist,sep', [
(['-0'], '\0'),
(['-d', '\\v'], '\v'),
([str(SRC_PATH)], '\n'), # Test that links aren't duplicated
])
def test_extract_file_links(arglist, sep, caplog):
arglist.append(str(SRC_PATH))
stdout = io.StringIO()
stderr = io.StringIO()
exitcode = extract_odf_links.main(arglist, stdout, stderr)
assert exitcode == 0
assert not stderr.getvalue()
check_output(stdout, sep, SRC_PATH.parent)
assert caplog.records
assert any(
log.levelname == 'WARNING'
and log.message.startswith('link path not found: ')
and log.message.endswith(BAD_PATH_S)
for log in caplog.records
)
@pytest.mark.parametrize('rel_path', [
Path('/run'),
Path('/tmp'),
])
def test_extract_relative_to(rel_path):
arglist = ['--relative', str(rel_path), '-0', '-']
stdout = io.StringIO()
stderr = io.StringIO()
orig_stdin = sys.stdin
try:
sys.stdin = SRC_PATH.open('rb')
exitcode = extract_odf_links.main(arglist, stdout, stderr)
finally:
sys.stdin = orig_stdin
assert exitcode == 0
assert not stderr.getvalue()
check_output(stdout, '\0', rel_path)
def test_reading_stdin_requires_relative_to():
with pytest.raises(SystemExit) as exc_check:
extract_odf_links.main(['-'])
assert exc_check.value.args[0] == 2
|