yadm/test/test_alt_copy.py

62 lines
1.6 KiB
Python

"""Test yadm.alt-copy"""
import os
import pytest
@pytest.mark.parametrize(
'cygwin',
[pytest.param(True, marks=pytest.mark.deprecated), False],
ids=['cygwin', 'no-cygwin'])
@pytest.mark.parametrize(
'compatibility', [True, False], ids=['compat', 'no-compat'])
@pytest.mark.parametrize(
'setting, expect_link, pre_existing', [
(None, True, None),
(True, False, None),
(False, True, None),
(True, False, 'link'),
(True, False, 'file'),
],
ids=[
'unset',
'true',
'false',
'pre-existing symlink',
'pre-existing file',
])
@pytest.mark.usefixtures('ds1_copy')
def test_alt_copy(
runner, yadm_y, paths, tst_sys,
setting, expect_link, pre_existing,
compatibility, cygwin):
"""Test yadm.alt-copy"""
option = 'yadm.cygwin-copy' if cygwin else 'yadm.alt-copy'
if setting is not None:
os.system(' '.join(yadm_y('config', option, str(setting))))
if compatibility:
expected_content = f'test_alt_copy##{tst_sys}'
else:
expected_content = f'test_alt_copy##os.{tst_sys}'
alt_path = paths.work.join('test_alt_copy')
if pre_existing == 'symlink':
alt_path.mklinkto(expected_content)
elif pre_existing == 'file':
alt_path.write('wrong content')
env = os.environ.copy()
if compatibility:
env['YADM_COMPATIBILITY'] = '1'
run = runner(yadm_y('alt'), env=env)
assert run.success
assert run.err == ''
assert 'Linking' in run.out
assert alt_path.read() == expected_content
assert alt_path.islink() == expect_link