"""Unit tests: yadm.[git,gpg]-program"""

import os

import pytest


@pytest.mark.parametrize(
    "executable, success, value, match",
    [
        (None, True, "program", None),
        ("cat", True, "cat", None),
        ("badprogram", False, None, "badprogram"),
    ],
    ids=[
        "executable missing",
        "valid alternative",
        "invalid alternative",
    ],
)
@pytest.mark.parametrize("program", ["git", "gpg"])
def test_x_program(runner, yadm_cmd, paths, program, executable, success, value, match):
    """Set yadm.X-program, and test result of require_X"""

    # set configuration
    if executable:
        os.system(" ".join(yadm_cmd("config", f"yadm.{program}-program", executable)))

    # test require_[git,gpg]
    script = f"""
        YADM_TEST=1 source {paths.pgm}
        YADM_OVERRIDE_CONFIG="{paths.config}"
        configure_paths
        require_{program}
        echo ${program.upper()}_PROGRAM
    """
    run = runner(command=["bash"], inp=script)
    assert run.success == success

    # [GIT,GPG]_PROGRAM set correctly
    if value == "program":
        assert run.out.rstrip() == program
    elif value:
        assert run.out.rstrip() == value

    # error reported about bad config
    if match:
        assert match in run.err
    else:
        assert run.err == ""
