############################################################################
# Copyright (C) SchedMD LLC.
############################################################################
import re

import pytest

import atf


@pytest.fixture(scope="module", autouse=True)
def setup():
    if atf.get_version("bin/sacct") < (25, 5):
        atf.require_accounting()
        atf.require_slurm_running()


@pytest.mark.parametrize("opt", ["--help", "-h"])
def test_help(opt):
    """Verify sacct --help displays the help page"""

    output = atf.run_command_output("sacct --help", fatal=True)

    assert re.search(r"sacct \[<OPTION>\]", output) is not None
    assert re.search(r"Valid <OPTION> values are:", output) is not None
    assert re.search(r"-A, --accounts:", output) is not None
    assert re.search(r"-j, --jobs:", output) is not None
    assert re.search(r"-s, --state:", output) is not None
    assert re.search(r"-S, --starttime:", output) is not None
    assert re.search(r"valid start/end time formats are...", output) is not None


@pytest.mark.parametrize("opt", ["--helpformat", "-e"])
def test_helpformat(opt):
    """Verify sacct --helpformat displays the expected fields"""

    output = atf.run_command_output("sacct --helpformat", fatal=True)

    assert re.search(r"Account", output) is not None
    assert re.search(r"ExitCode", output) is not None
    assert re.search(r"JobID", output) is not None
    assert re.search(r"NodeList", output) is not None
    assert re.search(r"ReqMem", output) is not None
    assert re.search(r"Start", output) is not None
    assert re.search(r"State", output) is not None
    assert re.search(r"Timelimit", output) is not None
    assert re.search(r"User", output) is not None
    assert re.search(r"WorkDir", output) is not None

    if atf.get_version("bin/sacct") >= (26, 5):
        assert (
            re.search(r"\bExclusive\b", output) is not None
        ), "sacct --helpformat should advertise the Exclusive field (ticket 23303)"
        assert (
            re.search(r"\bOverSubscribe\b", output) is not None
        ), "sacct --helpformat should advertise the OverSubscribe field (ticket 23303)"
