Files
@ 4bb6177e45bc
Branch filter:
Location: NPO-Accounting/conservancy_beancount/tests/test_extract_odf_links.py - annotation
4bb6177e45bc
2.4 KiB
text/x-python
reconcile: Update cleared query.
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
|