"""Unit tests: exclude_encrypted""" import pytest @pytest.mark.parametrize("exclude", ["missing", "outdated", "up-to-date"]) @pytest.mark.parametrize("encrypt_exists", [True, False], ids=["encrypt", "no-encrypt"]) @pytest.mark.parametrize("auto_exclude", [True, False], ids=["enabled", "disabled"]) def test_exclude_encrypted(runner, tmpdir, yadm, encrypt_exists, auto_exclude, exclude): """Test exclude_encrypted()""" header = "# yadm-auto-excludes\n# This section is managed by yadm.\n# Any edits below will be lost.\n" config_function = 'function config() { echo "false";}' if auto_exclude: config_function = "function config() { return; }" encrypt_file = tmpdir.join("encrypt_file") repo_dir = tmpdir.join("repodir") exclude_file = repo_dir.join("info/exclude") if encrypt_exists: encrypt_file.write("test-encrypt-data\n", ensure=True) if exclude == "outdated": exclude_file.write(f"original-exclude\n{header}outdated\n", ensure=True) elif exclude == "up-to-date": exclude_file.write(f"original-exclude\n{header}test-encrypt-data\n", ensure=True) script = f""" YADM_TEST=1 source {yadm} {config_function} DEBUG=1 YADM_ENCRYPT="{encrypt_file}" YADM_REPO="{repo_dir}" exclude_encrypted """ run = runner(command=["bash"], inp=script) assert run.success assert run.err == "" if auto_exclude: if encrypt_exists: assert exclude_file.exists() if exclude == "missing": assert exclude_file.read() == f"{header}test-encrypt-data\n" else: assert exclude_file.read() == ("original-exclude\n" f"{header}test-encrypt-data\n") if exclude != "up-to-date": assert f"Updating {exclude_file}" in run.out else: assert run.out == "" else: assert run.out == "" else: assert run.out == ""