Files
@ 72f144e1fffb
Branch filter:
Location: NPO-Accounting/conservancy_beancount/tests/test_extract_odf_links.py - annotation
72f144e1fffb
2.9 KiB
text/x-python
extract_odf_links: Make "not found" warning easier to parse.
e.g., you can just use `grep | cut -b N-`.
e.g., you can just use `grep | cut -b N-`.
ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f ce067963dc6f 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
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
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
|