1
0
mirror of https://github.com/TheLocehiliosan/yadm synced 2025-06-04 08:33:57 +00:00
TheLocehiliosan_yadm/test/test_unit_exclude_encrypted.py
Erik Flodin 6726730701
parse_encrypt: Don't let e.g. "*.ext" match files in subdirs
This matches the behavior before 3.4.0.

Silent errors from ls-files to avoid warnings about e.g. directories that
aren't readable and also list files that would have been encrypted had they not
been tracked in git (#521).

Fix the patterns written to info/exclude so that they match the same files as
are encrypted (e.g. *.key should only match .key files in the topdir, not in
subdirs).
2025-02-25 23:04:23 +01:00

56 lines
1.9 KiB
Python

"""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 == ""