[tox]
skipsdist=True
envlist = 
    lint
    unit
    integration
skip_missing_interpreters = True

[vars]
application = candid
src_path = {toxinidir}/src/
tst_path = {toxinidir}/tests/
lib_path = {toxinidir}/lib/charms/operator_libs_linux/v2
all_path = {[vars]src_path} {[vars]tst_path} 

[testenv]
basepython = python3
setenv =
  PYTHONPATH = {toxinidir}:{toxinidir}/lib:{[vars]src_path}
  PYTHONBREAKPOINT=ipdb.set_trace
  PY_COLORS=1
passenv =
  PYTHONPATH
  CHARM_BUILD_DIR
  MODEL_SETTINGS

[testenv:fmt]
description = Apply coding style standards to code
deps =
    black
    isort
commands =
    isort {[vars]all_path} {[vars]lib_path}
    black {[vars]all_path} {[vars]lib_path}

[testenv:lint]
description = Check code against coding style standards
deps =
    black
    flake8 == 4.0.1
    flake8-docstrings
    flake8-copyright
    flake8-builtins
    pylint
    pyproject-flake8
    pep8-naming
    isort
    codespell
    yamllint
    -r{toxinidir}/requirements.txt
commands =
    # uncomment the following 2 lines if this charm owns a lib
    codespell {[vars]lib_path}
    # pylint -E {[vars]lib_path}
    codespell {toxinidir}/. --skip {toxinidir}/.git --skip {toxinidir}/.tox \
      --skip {toxinidir}/build --skip {toxinidir}/lib --skip {toxinidir}/venv \
      --skip {toxinidir}/.mypy_cache --skip {toxinidir}/icon.svg
    pylint -E {[vars]src_path}
    # pflake8 wrapper supports config from pyproject.toml
    pflake8 --ignore=W503 {[vars]all_path} 
    black --check --diff {[vars]all_path} {[vars]lib_path} --line-length 79


[testenv:integration]
description = Run integration tests
deps =
    -r {toxinidir}/requirements-dev.txt
    -r {toxinidir}/requirements-test.txt
commands =
    pytest -ra {toxinidir}/tests/integration


[testenv:unit]
description = Run unit tests
deps =
    pytest
    pytest-mock
    coverage[toml]
    -r{toxinidir}/requirements-dev.txt
    -r{toxinidir}/requirements-test.txt
commands =
    coverage run --source={[vars]src_path},{[vars]lib_path} \
        -m pytest --ignore={[vars]tst_path}integration -v --tb native -s {posargs}
    coverage report
    coverage xml

