import subprocess

from conftest import LIBEXEC, env_with_fake_commands, fake_command


JOURNALCTL_HELPER = LIBEXEC / "left4me-journalctl"


def test_journalctl_helper_passes_shell_syntax_check_and_rejects_bad_args(tmp_path):
    subprocess.run(["sh", "-n", str(JOURNALCTL_HELPER)], check=True)
    marker = fake_command(tmp_path, "journalctl")

    for args in [
        ["../evil", "--lines", "25", "--no-follow"],
        ["alpha", "--bad", "25", "--no-follow"],
        ["alpha", "--lines", "not-number", "--no-follow"],
        ["alpha", "--lines", "25", "--bad-follow"],
        ["bad/name", "--lines", "25", "--no-follow"],
    ]:
        result = subprocess.run(
            ["sh", str(JOURNALCTL_HELPER), *args],
            env=env_with_fake_commands(tmp_path),
            check=False,
        )
        assert result.returncode != 0, f"helper accepted bad args: {args!r}"
        assert not marker.exists(), f"helper invoked journalctl for: {args!r}"

    script = JOURNALCTL_HELPER.read_text()
    assert 'unit="left4me-server@${name}.service"' in script
    # Anchors `--since` to the unit's most recent start so the panel shows
    # the current run (and any post-restart lines until reload).
    assert 'InactiveExitTimestamp' in script
    assert 'LC_ALL=C' in script
    assert 'exec "$journalctl" -u "$unit" --since "$start_time" -n "$lines" -o cat "$follow_arg"' in script
    assert 'exec "$journalctl" -u "$unit" --since "$start_time" -n "$lines" -o cat' in script
    # Never-started fallback keeps the legacy unit-only form.
    assert 'exec "$journalctl" -u "$unit" -n "$lines" -o cat "$follow_arg"' in script
    assert 'exec "$journalctl" -u "$unit" -n "$lines" -o cat' in script
