"""Unit tests: configure_paths""" import pytest ARCHIVE = "archive" BOOTSTRAP = "bootstrap" CONFIG = "config" ENCRYPT = "encrypt" HOME = "/testhome" REPO = "repo.git" YDIR = ".config/yadm" YDATA = ".local/share/yadm" @pytest.mark.parametrize( "override, expect", [ (None, {}), ("-Y", {"yadm": "YADM_DIR"}), ("--yadm-data", {"data": "YADM_DATA"}), ("--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 yadm data", "override repo", "override config", "override encrypt", "override archive", "override bootstrap", ], ) @pytest.mark.parametrize( "path", [".", "./override", "override", ".override", "/override"], ids=["cwd", "./relative", "relative", "hidden relative", "absolute"], ) def test_config(runner, paths, override, expect, path): """Test configure_paths""" if path.startswith("/"): expected_path = path else: expected_path = str(paths.root.join(path)) args = [override, path] if override else [] if override == "-Y": matches = match_map(expected_path) elif override == "--yadm-data": matches = match_map(None, expected_path) else: matches = match_map() for ekey in expect.keys(): matches[ekey] = f'{expect[ekey]}="{expected_path}"' run_test(runner, paths, args, matches.values(), cwd=str(paths.root)) def match_map(yadm_dir=None, yadm_data=None): """Create a dictionary of matches, relative to yadm_dir""" if not yadm_dir: yadm_dir = "/".join([HOME, YDIR]) if not yadm_data: yadm_data = "/".join([HOME, YDATA]) return { "yadm": f'YADM_DIR="{yadm_dir}"', "repo": f'YADM_REPO="{yadm_data}/{REPO}"', "config": f'YADM_CONFIG="{yadm_dir}/{CONFIG}"', "encrypt": f'YADM_ENCRYPT="{yadm_dir}/{ENCRYPT}"', "archive": f'YADM_ARCHIVE="{yadm_data}/{ARCHIVE}"', "bootstrap": f'YADM_BOOTSTRAP="{yadm_dir}/{BOOTSTRAP}"', "git": f'GIT_DIR="{yadm_data}/{REPO}"', } def run_test(runner, paths, args, expected_matches, cwd=None): """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} XDG_CONFIG_HOME= XDG_DATA_HOME= HOME="{HOME}" set_yadm_dirs configure_paths declare -p | grep -E '(YADM|GIT)_' """ run = runner(command=["bash"], inp=script, cwd=cwd) assert run.success assert run.err == "" for match in expected_matches: assert match in run.out