.. _tox-ini-file:


``tox.ini`` file
================

The ``tox.ini`` file in your charm's root directory is a typical Tox
configuration file.

    See more: `Tox |
    Configuration <https://tox.wiki/en/latest/user_guide.html#configuration>`_

This file is generated automatically by ``charmcraft init`` with the
contents below:

.. code-block:: yaml

      Copyright 2023 Ubuntu
    # See LICENSE file for licensing details.

    [tox]
    no_package = True
    skip_missing_interpreters = True
    env_list = format, lint, static, 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 =
        black
        ruff
    commands =
        black {[vars]all_path}
        ruff --fix {[vars]all_path}

    [testenv:lint]
    description = Check code against coding style standards
    deps =
        black
        ruff
        codespell
    commands =
        # if this charm owns a lib, uncomment "lib_path" variable
        # and uncomment the following line
        # codespell {[vars]lib_path}
        codespell {tox_root}
        ruff {[vars]all_path}
        black --check --diff {[vars]all_path}

    [testenv:unit]
    description = Run unit tests
    deps =
        pytest
        coverage[toml]
        -r {tox_root}/requirements.txt
    commands =
        coverage run --source={[vars]src_path} \
                      -m pytest \
                      --tb native \
                      -v \
                      -s \
                      {posargs} \
                      {[vars]tests_path}/unit
        coverage report

    [testenv:static]
    description = Run static type checks
    deps =
        pyright
        -r {tox_root}/requirements.txt
    commands =
        pyright {posargs}

    [testenv:integration]
    description = Run integration tests
    deps =
        pytest
        juju
        pytest-operator
        -r {tox_root}/requirements.txt
    commands =
        pytest -v \
                -s \
                --tb native \
                --log-cli-level=INFO \
                {posargs} \
                {[vars]tests_path}/integration
