yadm/test/test_init.py

87 lines
2.4 KiB
Python

"""Test init"""
import pytest
@pytest.mark.parametrize(
"alt_work, repo_present, force",
[
(False, False, False),
(True, False, False),
(False, True, False),
(False, True, True),
(True, True, True),
],
ids=[
"simple",
"-w",
"existing repo",
"-f",
"-w & -f",
],
)
@pytest.mark.usefixtures("ds1_work_copy")
def test_init(runner, yadm_cmd, paths, repo_config, alt_work, repo_present, force):
"""Test init
Repos should have attribs:
- 0600 permissions
- not bare
- worktree = $HOME
- showUntrackedFiles = no
- yadm.managed = true
"""
# these tests will assume this for $HOME
home = str(paths.root.mkdir("HOME"))
# ds1_work_copy comes WITH an empty repo dir present.
old_repo = paths.repo.join("old_repo")
if repo_present:
# Let's put some data in it, so we can confirm that data is gone when
# forced to be overwritten.
old_repo.write("old repo data")
assert old_repo.isfile()
else:
paths.repo.remove()
# command args
args = ["init"]
cwd = None
if alt_work:
if force:
cwd = paths.work.dirname
args.extend(["-w", paths.work.basename])
else:
args.extend(["-w", paths.work])
if force:
args.append("-f")
# run init
runner(["git", "config", "--global", "init.defaultBranch", "master"], env={"HOME": home}, cwd=cwd)
run = runner(yadm_cmd(*args), env={"HOME": home}, cwd=cwd)
if repo_present and not force:
assert run.failure
assert "repo already exists" in run.err
assert old_repo.isfile(), "Missing original repo"
else:
assert run.success
assert "Initialized empty shared Git repository" in run.out
if repo_present:
assert not old_repo.isfile(), "Original repo still exists"
else:
assert run.err == ""
if alt_work:
assert repo_config("core.worktree") == paths.work
else:
assert repo_config("core.worktree") == home
# uniform repo assertions
assert oct(paths.repo.stat().mode).endswith("00"), "Repo is not secure"
assert repo_config("core.bare") == "false"
assert repo_config("status.showUntrackedFiles") == "no"
assert repo_config("yadm.managed") == "true"