"""PyTest Fixtures."""
import importlib
import os
import subprocess
import sys

# Ensure we always run from the root of the repository
if os.getcwd() != os.path.dirname(__file__):
    os.chdir(os.path.dirname(__file__))

# checking if user is running pytest without installing test dependencies:
missing = []
for module in ["ansible", "black", "flake8", "mypy", "pylint"]:
    if not importlib.util.find_spec(module):
        missing.append(module)
if missing:
    print(
        f"FATAL: Missing modules: {', '.join(missing)} -- probably you missed installing test requirements with: pip install -e '.[test]'",
        file=sys.stderr,
    )
    sys.exit(1)
# we need to be sure that we have the requirements installed as some tests
# might depend on these. This approach is compatible with GHA caching.
try:
    subprocess.check_output(
        ["./tools/install-reqs.sh"],
        stderr=subprocess.PIPE,
        text=True,
    )
except subprocess.CalledProcessError as exc:
    print(f"{exc}\n{exc.stderr}\n{exc.stdout}", file=sys.stderr)
    sys.exit(1)

# flake8: noqa: E402
from ansible.module_utils.common.yaml import (  # pylint: disable=wrong-import-position
    HAS_LIBYAML,
)

if not HAS_LIBYAML and sys.version_info >= (3, 9, 0):
    # While presence of libyaml is not required for runtime, we keep this error
    # fatal here in order to be sure that we spot libyaml errors during testing.
    #
    # For 3.8.x we do not do this check, as libyaml does not have an arm64 build for py38.
    print(
        "FATAL: For testing, we require pyyaml to be installed with its native extension, missing it would make testing 3x slower and risk missing essential bugs.",
        file=sys.stderr,
    )
    sys.exit(1)


os.environ["NO_COLOR"] = "1"
