import pytest

from transpose.console import parse_arguments


def test_parse_arguments():
    # Missing required argument - action
    with pytest.raises(SystemExit):
        parse_arguments()

    args = parse_arguments(
        [
            "store",
            "--cache-filename",
            "test-cache-file.json",
            "--store-path",
            "/mnt/store",
            "MyTarget",
            "/tmp/some/path",
        ]
    )
    assert args.cache_filename == "test-cache-file.json"
    assert args.store_path == "/mnt/store"


def test_parse_arguments_apply():
    # Missing required argument - target_path (Apply)
    with pytest.raises(SystemExit):
        args = parse_arguments(["apply"])

    args = parse_arguments(["apply", "/tmp/some/path"])
    assert args.action == "apply"
    assert args.target_path == "/tmp/some/path"


def test_parse_arguments_store():
    # Missing required argument - name (Store)
    with pytest.raises(SystemExit):
        args = parse_arguments(["store"])

    # Missing required argument - target_path (Store)
    with pytest.raises(SystemExit):
        args = parse_arguments(["store", "My Name"])

    args = parse_arguments(["store", "My Name", "/tmp/some/path"])
    assert args.action == "store"
    assert args.name == "My Name"
    assert args.target_path == "/tmp/some/path"


def test_parse_arguments_restore():
    # Missing required argument - target_path (Restore)
    with pytest.raises(SystemExit):
        args = parse_arguments(["restore"])

    args = parse_arguments(["restore", "/tmp/some/path"])
    assert args.action == "restore"
    assert args.target_path == "/tmp/some/path"