A tool for moving and symlinking directories to a central location
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.
 

170 lines
4.5 KiB

import pytest
from pathlib import Path
from transpose import TransposeConfig
from transpose.console import parse_arguments, run as run_console
from .utils import (
setup_restore,
setup_store,
setup_apply,
STORE_PATH,
TARGET_PATH,
TRANSPOSE_CONFIG_PATH,
)
class ConfigArgs:
name: str = "MyName"
action: str = "config"
forced: bool = False
path: str = str(TARGET_PATH)
config_action: str
def __init__(self, config_action: str) -> None:
self.config_action = config_action
def test_parse_arguments():
with pytest.raises(SystemExit): # Missing required args: action
parse_arguments()
args = parse_arguments(
[
"--store-path",
"/mnt/store",
"store",
"/tmp/some/path",
"MyTarget",
]
)
assert args.store_path == "/mnt/store"
def test_parse_arguments_apply():
with pytest.raises(SystemExit): # Missing required args: name
args = parse_arguments(["apply"])
args = parse_arguments(["apply", "SomeName"])
assert args.action == "apply"
assert args.name == "SomeName"
assert args.force is False
args = parse_arguments(["apply", "SomeName", "--force"])
assert args.force is True
def test_parse_arguments_config():
with pytest.raises(SystemExit): # Missing required args: config_action
parse_arguments(["config"])
def test_parse_arguments_config_add():
with pytest.raises(SystemExit): # Missing required args: name, path
args = parse_arguments(["config", "add"])
with pytest.raises(SystemExit): # Missing required args: path
args = parse_arguments(["config", "add", "SomeName"])
args = parse_arguments(["config", "add", "SomeName", "/var/tmp/something"])
assert args.config_action == "add"
assert args.name == "SomeName"
assert args.path == "/var/tmp/something"
def test_parse_arguments_config_get():
with pytest.raises(SystemExit): # Missing required args: name
args = parse_arguments(["config", "get"])
args = parse_arguments(["config", "get", "SomeName"])
assert args.config_action == "get"
assert args.name == "SomeName"
def test_parse_arguments_config_list():
args = parse_arguments(["config", "list"])
assert args.config_action == "list"
def test_parse_arguments_config_remove():
with pytest.raises(SystemExit): # Missing required args: name
args = parse_arguments(["config", "remove"])
args = parse_arguments(["config", "remove", "SomeName"])
assert args.config_action == "remove"
assert args.name == "SomeName"
def test_parse_arguments_store():
with pytest.raises(SystemExit): # Missing required args: target_path
args = parse_arguments(["store"])
args = parse_arguments(["store", "/tmp/some/path"])
assert args.name is None
args = parse_arguments(["store", "/tmp/some/path", "My Name"])
assert args.action == "store"
assert args.name == "My Name"
assert args.target_path == "/tmp/some/path"
def test_parse_arguments_restore():
with pytest.raises(SystemExit): # Missing required args: name
args = parse_arguments(["restore"])
args = parse_arguments(["restore", "SomeName"])
assert args.action == "restore"
assert args.name == "SomeName"
args = parse_arguments(["restore", "SomeName", "--force"])
assert args.force is True
@setup_restore()
def test_run_config_add():
args = ConfigArgs("add")
args.name = "MyName2"
run_console(args, TRANSPOSE_CONFIG_PATH)
config = TransposeConfig().load(TRANSPOSE_CONFIG_PATH)
assert config.entries.get(args.name)
@setup_restore()
def test_run_config_get(capsys):
args = ConfigArgs("get")
run_console(args, TRANSPOSE_CONFIG_PATH)
captured = capsys.readouterr()
assert str(TARGET_PATH) in captured.out
@setup_restore()
def test_run_config_list(capsys):
args = ConfigArgs("list")
run_console(args, TRANSPOSE_CONFIG_PATH)
captured = capsys.readouterr()
assert f"-> {TARGET_PATH}" in captured.out
@setup_restore()
def test_run_config_remove():
args = ConfigArgs("remove")
run_console(args, TRANSPOSE_CONFIG_PATH)
config = TransposeConfig().load(TRANSPOSE_CONFIG_PATH)
assert not config.entries.get(args.name)
@setup_restore()
def test_run_config_update():
args = ConfigArgs("update")
args.path = "/var/tmp/something"
run_console(args, TRANSPOSE_CONFIG_PATH)
config = TransposeConfig().load(TRANSPOSE_CONFIG_PATH)
assert config.entries[args.name].path == args.path