e7f9616b39
The new test system is written with py.test. These tests are more comprehensive, run faster by an order of magnitude, and are far more maintainable. The tests themselves conform to PEP8.
80 lines
2.4 KiB
Python
80 lines
2.4 KiB
Python
"""Unit tests: configure_paths"""
|
|
|
|
import pytest
|
|
|
|
ARCHIVE = 'files.gpg'
|
|
BOOTSTRAP = 'bootstrap'
|
|
CONFIG = 'config'
|
|
ENCRYPT = 'encrypt'
|
|
HOME = '/testhome'
|
|
REPO = 'repo.git'
|
|
YDIR = '.yadm'
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
'override, expect', [
|
|
(None, {}),
|
|
('-Y', {}),
|
|
('--yadm-repo', {'repo': 'YADM_REPO', 'git': 'GIT_DIR'}),
|
|
('--yadm-config', {'config': 'YADM_CONFIG'}),
|
|
('--yadm-encrypt', {'encrypt': 'YADM_ENCRYPT'}),
|
|
('--yadm-archive', {'archive': 'YADM_ARCHIVE'}),
|
|
('--yadm-bootstrap', {'bootstrap': 'YADM_BOOTSTRAP'}),
|
|
], ids=[
|
|
'default',
|
|
'override yadm dir',
|
|
'override repo',
|
|
'override config',
|
|
'override encrypt',
|
|
'override archive',
|
|
'override bootstrap',
|
|
])
|
|
def test_config(runner, paths, override, expect):
|
|
"""Test configure_paths"""
|
|
opath = 'override'
|
|
matches = match_map()
|
|
args = []
|
|
if override == '-Y':
|
|
matches = match_map('/' + opath)
|
|
|
|
if override:
|
|
args = [override, '/' + opath]
|
|
for ekey in expect.keys():
|
|
matches[ekey] = f'{expect[ekey]}="/{opath}"'
|
|
run_test(
|
|
runner, paths,
|
|
[override, opath],
|
|
['must specify a fully qualified'], 1)
|
|
|
|
run_test(runner, paths, args, matches.values(), 0)
|
|
|
|
|
|
def match_map(yadm_dir=None):
|
|
"""Create a dictionary of matches, relative to yadm_dir"""
|
|
if not yadm_dir:
|
|
yadm_dir = '/'.join([HOME, YDIR])
|
|
return {
|
|
'yadm': f'YADM_DIR="{yadm_dir}"',
|
|
'repo': f'YADM_REPO="{yadm_dir}/{REPO}"',
|
|
'config': f'YADM_CONFIG="{yadm_dir}/{CONFIG}"',
|
|
'encrypt': f'YADM_ENCRYPT="{yadm_dir}/{ENCRYPT}"',
|
|
'archive': f'YADM_ARCHIVE="{yadm_dir}/{ARCHIVE}"',
|
|
'bootstrap': f'YADM_BOOTSTRAP="{yadm_dir}/{BOOTSTRAP}"',
|
|
'git': f'GIT_DIR="{yadm_dir}/{REPO}"',
|
|
}
|
|
|
|
|
|
def run_test(runner, paths, args, expected_matches, expected_code=0):
|
|
"""Run proces global args, and run configure_paths"""
|
|
argstring = ' '.join(['"'+a+'"' for a in args])
|
|
script = f"""
|
|
YADM_TEST=1 HOME="{HOME}" source {paths.pgm}
|
|
process_global_args {argstring}
|
|
configure_paths
|
|
declare -p | grep -E '(YADM|GIT)_'
|
|
"""
|
|
run = runner(command=['bash'], inp=script)
|
|
assert run.code == expected_code
|
|
assert run.err == ''
|
|
for match in expected_matches:
|
|
assert match in run.out
|