2019-10-22 22:47:41 +00:00
|
|
|
"""Unit tests: upgrade"""
|
|
|
|
import pytest
|
|
|
|
|
|
|
|
|
2020-11-18 05:01:45 +00:00
|
|
|
@pytest.mark.parametrize('condition', ['override', 'equal', 'existing_repo'])
|
2019-10-22 22:47:41 +00:00
|
|
|
def test_upgrade_errors(tmpdir, runner, yadm, condition):
|
|
|
|
"""Test upgrade() error conditions"""
|
|
|
|
|
|
|
|
home = tmpdir.mkdir('home')
|
|
|
|
yadm_dir = home.join('.config/yadm')
|
2020-11-18 05:01:45 +00:00
|
|
|
yadm_data = home.join('.local/share/yadm')
|
|
|
|
override = ''
|
|
|
|
if condition == 'override':
|
|
|
|
override = 'override'
|
2019-10-22 22:47:41 +00:00
|
|
|
if condition == 'equal':
|
2020-11-18 05:01:45 +00:00
|
|
|
yadm_data = yadm_dir
|
2019-10-22 22:47:41 +00:00
|
|
|
if condition == 'existing_repo':
|
|
|
|
yadm_dir.ensure_dir('repo.git')
|
2020-11-18 05:01:45 +00:00
|
|
|
yadm_data.ensure_dir('repo.git')
|
2019-10-22 22:47:41 +00:00
|
|
|
|
|
|
|
script = f"""
|
|
|
|
YADM_TEST=1 source {yadm}
|
|
|
|
YADM_DIR="{yadm_dir}"
|
2020-11-18 05:01:45 +00:00
|
|
|
YADM_DATA="{yadm_data}"
|
|
|
|
YADM_REPO="{yadm_data}/repo.git"
|
|
|
|
YADM_LEGACY_ARCHIVE="files.gpg"
|
|
|
|
YADM_OVERRIDE_REPO="{override}"
|
2019-10-22 22:47:41 +00:00
|
|
|
upgrade
|
|
|
|
"""
|
|
|
|
run = runner(command=['bash'], inp=script)
|
|
|
|
assert run.failure
|
|
|
|
assert run.err == ''
|
|
|
|
assert 'Unable to upgrade' in run.out
|
2020-11-18 05:01:45 +00:00
|
|
|
if condition in ['override', 'equal']:
|
|
|
|
assert 'Paths have been overridden' in run.out
|
2019-10-22 22:47:41 +00:00
|
|
|
if condition == 'existing_repo':
|
|
|
|
assert 'already exists' in run.out
|
|
|
|
|
|
|
|
|
2019-11-07 13:48:42 +00:00
|
|
|
@pytest.mark.parametrize(
|
|
|
|
'condition', ['no-paths', 'untracked', 'tracked', 'submodules'])
|
2019-10-22 22:47:41 +00:00
|
|
|
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".
|
|
|
|
"""
|
2020-12-29 17:10:18 +00:00
|
|
|
legacy_paths = ('config', 'encrypt', 'bootstrap', 'hooks/pre_cmd')
|
2019-10-22 22:47:41 +00:00
|
|
|
home = tmpdir.mkdir('home')
|
|
|
|
yadm_dir = home.join('.config/yadm')
|
2020-11-18 05:01:45 +00:00
|
|
|
yadm_data = home.join('.local/share/yadm')
|
2020-12-29 17:10:18 +00:00
|
|
|
yadm_legacy = home.join('.yadm')
|
2019-10-22 22:47:41 +00:00
|
|
|
|
|
|
|
if condition != 'no-paths':
|
2020-11-18 05:01:45 +00:00
|
|
|
yadm_dir.join('repo.git/config').write('test-repo', ensure=True)
|
|
|
|
yadm_dir.join('files.gpg').write('files.gpg', ensure=True)
|
2020-12-29 17:10:18 +00:00
|
|
|
for path in legacy_paths:
|
|
|
|
yadm_legacy.join(path).write(path, ensure=True)
|
2019-10-22 22:47:41 +00:00
|
|
|
|
2019-11-07 13:48:42 +00:00
|
|
|
mock_git = ""
|
|
|
|
if condition in ['tracked', 'submodules']:
|
|
|
|
mock_git = f'''
|
|
|
|
function git() {{
|
|
|
|
echo "$@"
|
|
|
|
if [[ "$*" == *.gitmodules* ]]; then
|
|
|
|
return { '0' if condition == 'submodules' else '1' }
|
|
|
|
fi
|
|
|
|
return 0
|
|
|
|
}}
|
|
|
|
'''
|
2019-10-22 22:47:41 +00:00
|
|
|
|
|
|
|
script = f"""
|
|
|
|
YADM_TEST=1 source {yadm}
|
2020-12-29 17:10:18 +00:00
|
|
|
YADM_LEGACY_DIR="{yadm_legacy}"
|
2019-10-22 22:47:41 +00:00
|
|
|
YADM_DIR="{yadm_dir}"
|
2020-11-18 05:01:45 +00:00
|
|
|
YADM_DATA="{yadm_data}"
|
|
|
|
YADM_REPO="{yadm_data}/repo.git"
|
|
|
|
YADM_ARCHIVE="{yadm_data}/archive"
|
2019-11-07 13:48:42 +00:00
|
|
|
GIT_PROGRAM="git"
|
|
|
|
{mock_git}
|
2019-11-05 22:36:05 +00:00
|
|
|
function cd {{ echo "$@";}}
|
2019-10-22 22:47:41 +00:00
|
|
|
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:
|
2020-11-18 05:01:45 +00:00
|
|
|
for (lpath, npath) in [
|
|
|
|
('repo.git', 'repo.git'), ('files.gpg', 'archive')]:
|
2019-10-22 22:47:41 +00:00
|
|
|
expected = (
|
2020-11-18 05:01:45 +00:00
|
|
|
f'Moving {yadm_dir.join(lpath)} '
|
|
|
|
f'to {yadm_data.join(npath)}')
|
2019-10-22 22:47:41 +00:00
|
|
|
assert expected in run.out
|
2020-12-29 17:10:18 +00:00
|
|
|
for path in legacy_paths:
|
|
|
|
expected = (
|
|
|
|
f'Moving {yadm_legacy.join(path)} '
|
|
|
|
f'to {yadm_dir.join(path)}')
|
|
|
|
assert expected in run.out
|
2019-10-22 22:47:41 +00:00
|
|
|
if condition == 'untracked':
|
2020-11-18 05:01:45 +00:00
|
|
|
assert 'test-repo' in yadm_data.join('repo.git/config').read()
|
|
|
|
assert 'files.gpg' in yadm_data.join('archive').read()
|
2020-12-29 17:10:18 +00:00
|
|
|
for path in legacy_paths:
|
|
|
|
assert path in yadm_dir.join(path).read()
|
2019-11-07 13:48:42 +00:00
|
|
|
elif condition in ['tracked', 'submodules']:
|
2020-11-18 05:01:45 +00:00
|
|
|
expected = (
|
|
|
|
f'mv {yadm_dir.join("files.gpg")} '
|
|
|
|
f'{yadm_data.join("archive")}')
|
|
|
|
assert expected in run.out
|
2019-10-22 22:47:41 +00:00
|
|
|
assert 'files tracked by yadm have been renamed' in run.out
|
2019-11-07 13:48:42 +00:00
|
|
|
if condition == 'submodules':
|
|
|
|
assert 'submodule deinit -f .' in run.out
|
|
|
|
assert 'submodule update --init --recursive' in run.out
|
|
|
|
else:
|
|
|
|
assert 'submodule deinit -f .' not in run.out
|
|
|
|
assert 'submodule update --init --recursive' not in run.out
|