# tox (https://tox.readthedocs.io/) is a tool for running tests
# in multiple virtualenvs. This configuration file will run the
# test suite on all supported python versions. To use it, "pip install tox"
# and then run "tox" from this directory.

[tox]
envlist = begin,py37,py38,coverage,security,lint,bundle

[testenv]
# build a wheel and test it
wheel = true
wheel_build_env = build

# whitelist commands we need
whitelist_externals = cp

# install everything via requirements-dev.txt, so that developer environment
# is the same as the tox environment (for ease of use/no weird gotchas in
# local dev results vs. tox results) and also to avoid ticky-tacky maintenance
# of "oh this particular env has weird results unless I install foo" --- just
# shotgun blast install everything everywhere
deps =
    -rrequirements/requirements-dev.txt

[testenv:build]
# require setuptools when building
deps = setuptools

[testenv:begin]
# clean up potential previous coverage runs
skip_install = true
commands = coverage erase

[testenv:py37]
# run pytest with coverage
commands =
    pytest --cov-append --cov={envsitepackagesdir}/incorporealcms/ --cov-branch

[testenv:py38]
# run pytest with coverage
commands =
    pytest --cov-append --cov={envsitepackagesdir}/incorporealcms/ --cov-branch

[testenv:coverage]
# report on coverage runs from above
skip_install = true
commands =
    coverage report --fail-under=95 --show-missing

[testenv:security]
# run security checks
#
# again it seems the most valuable here to run against the packaged code
commands =
    bandit {envsitepackagesdir}/incorporealcms/ -r

[testenv:lint]
# run style checks
commands =
    flake8
    - flake8 --disable-noqa --ignore= --select=E,W,F,C,D,A,G,B,I,T,M,DUO

[testenv:bundle]
# take extra actions (build sdist, sphinx, whatever) to completely package the app
commands =
    cp -r {distdir} .
    python setup.py sdist

[coverage:paths]
source =
    ./
    .tox/**/site-packages/

[coverage:run]
branch = True

# redundant with pytest --cov above, but this tricks the coverage.xml report into
# using the full path, otherwise files with the same name in different paths
# get clobbered. maybe appends would fix this, IDK
include =
    .tox/**/incorporealcms/

omit =
    **/_version.py

[flake8]
enable-extensions = G,M
exclude =
    .tox/
    versioneer.py
    _version.py
    instance/
extend-ignore = T101
max-complexity = 10
max-line-length = 120

[isort]
line_length = 120

[pytest]
python_files =
    *_tests.py
    tests.py
    test_*.py