# Copyright {{ year }} {{ author }}
# See LICENSE file for licensing details.

[tox]
no_package = True
skip_missing_interpreters = True
env_list = format, lint, unit
min_version = 4.0.0

[vars]
src_path = {tox_root}/src
tests_path = {tox_root}/tests
;lib_path = {tox_root}/lib/charms/operator_name_with_underscores
all_path = {[vars]src_path} {[vars]tests_path}

[testenv]
set_env =
    PYTHONPATH = {tox_root}/lib:{[vars]src_path}
    PYTHONBREAKPOINT=pdb.set_trace
    PY_COLORS=1
pass_env =
    PYTHONPATH
    CHARM_BUILD_DIR
    MODEL_SETTINGS

[testenv:format]
description = Apply coding style standards to code
deps =
    ruff
commands =
    ruff format {[vars]all_path}
    ruff check --fix {[vars]all_path}

[testenv:lint]
description = Check code against coding style standards, and static checks
runner = uv-venv-lock-runner
dependency_groups =
    lint
    unit
    integration
commands =
    # if this charm owns a lib, uncomment "lib_path" variable
    # and uncomment the following line
    # codespell {[vars]lib_path}
    codespell {tox_root}
    ruff check {[vars]all_path}
    ruff format --check --diff {[vars]all_path}
    pyright {posargs}

[testenv:unit]
description = Run unit tests
runner = uv-venv-lock-runner
dependency_groups =
    unit
commands =
    coverage run --source={[vars]src_path} -m pytest \
        -v \
        -s \
        --tb native \
        {[vars]tests_path}/unit \
        {posargs}
    coverage report

[testenv:integration]
description = Run integration tests
runner = uv-venv-lock-runner
dependency_groups =
    integration
pass_env =
    # The integration tests don't pack the charm. If CHARM_PATH is set, the tests deploy the
    # specified .charm file. Otherwise, the tests look for a .charm file in the project dir.
    CHARM_PATH
commands =
    pytest \
        -v \
        -s \
        --tb native \
        --log-cli-level=INFO \
        {[vars]tests_path}/integration \
        {posargs}
