mirror of
https://github.com/TheLocehiliosan/yadm
synced 2024-10-27 20:34:27 +00:00
102 lines
3.2 KiB
Python
102 lines
3.2 KiB
Python
|
"""Unit tests: upgrade"""
|
||
|
import pytest
|
||
|
|
||
|
LEGACY_PATHS = [
|
||
|
'config',
|
||
|
'encrypt',
|
||
|
'files.gpg',
|
||
|
'bootstrap',
|
||
|
'hooks/pre_command',
|
||
|
'hooks/post_command',
|
||
|
]
|
||
|
|
||
|
# used:
|
||
|
# YADM_COMPATIBILITY
|
||
|
# YADM_DIR
|
||
|
# YADM_LEGACY_DIR
|
||
|
# GIT_PROGRAM
|
||
|
@pytest.mark.parametrize('condition', ['compat', 'equal', 'existing_repo'])
|
||
|
def test_upgrade_errors(tmpdir, runner, yadm, condition):
|
||
|
"""Test upgrade() error conditions"""
|
||
|
|
||
|
compatibility = 'YADM_COMPATIBILITY=1' if condition == 'compat' else ''
|
||
|
|
||
|
home = tmpdir.mkdir('home')
|
||
|
yadm_dir = home.join('.config/yadm')
|
||
|
legacy_dir = home.join('.yadm')
|
||
|
if condition == 'equal':
|
||
|
legacy_dir = yadm_dir
|
||
|
if condition == 'existing_repo':
|
||
|
yadm_dir.ensure_dir('repo.git')
|
||
|
legacy_dir.ensure_dir('repo.git')
|
||
|
|
||
|
script = f"""
|
||
|
YADM_TEST=1 source {yadm}
|
||
|
{compatibility}
|
||
|
YADM_DIR="{yadm_dir}"
|
||
|
YADM_REPO="{yadm_dir}/repo.git"
|
||
|
YADM_LEGACY_DIR="{legacy_dir}"
|
||
|
upgrade
|
||
|
"""
|
||
|
run = runner(command=['bash'], inp=script)
|
||
|
assert run.failure
|
||
|
assert run.err == ''
|
||
|
assert 'Unable to upgrade' in run.out
|
||
|
if condition == 'compat':
|
||
|
assert 'YADM_COMPATIBILITY' in run.out
|
||
|
if condition == 'equal':
|
||
|
assert 'has been resolved as' in run.out
|
||
|
if condition == 'existing_repo':
|
||
|
assert 'already exists' in run.out
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize('condition', ['no-paths', 'untracked', 'tracked'])
|
||
|
def test_upgrade(tmpdir, runner, yadm, condition):
|
||
|
"""Test upgrade()
|
||
|
|
||
|
When testing the condition of git-tracked data, "echo" will be used as a
|
||
|
mock for git. echo will return true, simulating a positive result from "git
|
||
|
ls-files". Also echo will report the parameters for "git mv".
|
||
|
"""
|
||
|
home = tmpdir.mkdir('home')
|
||
|
yadm_dir = home.join('.config/yadm')
|
||
|
legacy_dir = home.join('.yadm')
|
||
|
|
||
|
if condition != 'no-paths':
|
||
|
legacy_dir.join('repo.git/config').write('test-repo', ensure=True)
|
||
|
for lpath in LEGACY_PATHS:
|
||
|
legacy_dir.join(lpath).write(lpath, ensure=True)
|
||
|
|
||
|
git = 'echo' if condition == 'tracked' else 'git'
|
||
|
|
||
|
script = f"""
|
||
|
YADM_TEST=1 source {yadm}
|
||
|
YADM_DIR="{yadm_dir}"
|
||
|
YADM_REPO="{yadm_dir}/repo.git"
|
||
|
YADM_LEGACY_DIR="{legacy_dir}"
|
||
|
GIT_PROGRAM="{git}"
|
||
|
upgrade
|
||
|
"""
|
||
|
run = runner(command=['bash'], inp=script)
|
||
|
assert run.success
|
||
|
assert run.err == ''
|
||
|
if condition == 'no-paths':
|
||
|
assert 'Upgrade is not necessary' in run.out
|
||
|
else:
|
||
|
for lpath in LEGACY_PATHS + ['repo.git']:
|
||
|
expected = (
|
||
|
f'Moving {legacy_dir.join(lpath)} '
|
||
|
f'to {yadm_dir.join(lpath)}')
|
||
|
assert expected in run.out
|
||
|
if condition == 'untracked':
|
||
|
assert 'test-repo' in yadm_dir.join('repo.git/config').read()
|
||
|
for lpath in LEGACY_PATHS:
|
||
|
assert lpath in yadm_dir.join(lpath).read()
|
||
|
elif condition == 'tracked':
|
||
|
for lpath in LEGACY_PATHS:
|
||
|
expected = (
|
||
|
f'mv {legacy_dir.join(lpath)} '
|
||
|
f'{yadm_dir.join(lpath)}')
|
||
|
assert expected in run.out
|
||
|
assert 'files tracked by yadm have been renamed' in run.out
|