Yet Another Dotfiles Manager
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
2.3 KiB

"""Testing Utilities
This module holds values/functions common to multiple tests.
import os
ALT_FILE1 = 'test_alt'
ALT_FILE2 = 'test alt/test alt'
ALT_DIR = 'test alt/test alt dir'
# Directory based alternates must have a tracked contained file.
# This will be the test contained file name
CONTAINED = 'contained_file'
def set_local(paths, variable, value):
"""Set local override"""
f'GIT_DIR={str(paths.repo)} '
f'git config --local "local.{variable}" "{value}"'
def create_alt_files(paths, suffix,
preserve=False, tracked=True,
encrypt=False, exclude=False,
"""Create new files, and add to the repo
This is used for testing alternate files. In each case, a suffix is
appended to two standard file paths. Particulars of the file creation and
repo handling are dependent upon the function arguments.
if not preserve:
for remove_path in (ALT_FILE1, ALT_FILE2, ALT_DIR):
if, ignore_errors=True)
assert not
new_file1 = + suffix)
new_file1.write(ALT_FILE1 + suffix, ensure=True)
new_file2 = + suffix)
new_file2.write(ALT_FILE2 + suffix, ensure=True)
new_dir = + suffix).join(CONTAINED)
new_dir.write(ALT_DIR + suffix, ensure=True)
# Do not test directory support for jinja alternates
test_paths = [new_file1, new_file2]
test_names = [ALT_FILE1, ALT_FILE2]
if suffix != '##yadm.j2':
test_paths += [new_dir]
test_names += [ALT_DIR]
for test_path in test_paths:
if content:
test_path.write('\n' + content, mode='a', ensure=True)
assert test_path.exists()
if tracked:
for track_path in test_paths:
os.system(f'GIT_DIR={str(paths.repo)} git add "{track_path}"')
os.system(f'GIT_DIR={str(paths.repo)} git commit -m "Add test files"')
if encrypt:
for encrypt_name in test_names:
paths.encrypt.write(f'{encrypt_name + suffix}\n', mode='a')
if exclude:
paths.encrypt.write(f'!{encrypt_name + suffix}\n', mode='a')