# Tox (http://tox.testrun.org/) 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 = lint,py3
skipsdist=True

[pytest]
markers =
    serial: mark a test that must run by itself

[testenv]
basepython=python3
usedevelop=True
# for testing with other python versions
commands = py.test --tb native -ra -v -s -n auto -k 'not integration' -m 'not serial' {posargs}
passenv =
    HOME
    TEST_AGENTS
deps =
    asynctest
    ipdb
    mock
    pytest
    pytest-asyncio
    pytest-xdist
    Twine
    # use fork to pick up fix for https://github.com/aaugustin/websockets/pull/528
    git+https://github.com/johnsca/websockets@bug/client-redirects#egg=websockets

[testenv:py3]
# default tox env excludes integration and serial tests
commands =
    # These need to be installed in a specific order
    pip install urllib3==1.22
    pip install pylxd
    py.test --tb native -ra -v -s -n auto -k 'not integration' -m 'not serial' {posargs}

[testenv:lint]
envdir = {toxworkdir}/py3
commands =
    flake8 --ignore E501,W504 {posargs} juju tests
deps =
    flake8

[testenv:integration]
envdir = {toxworkdir}/py3
commands =
    # These need to be installed in a specific order
    pip install urllib3==1.22
    pip install pylxd
    py.test --tb native -ra -v -s -n auto -k 'integration' -m 'not serial' {posargs}

[testenv:serial]
# tests that can't be run in parallel
envdir = {toxworkdir}/py3
commands = py.test --tb native -ra -v -s {posargs:-m 'serial'}

[testenv:example]
envdir = {toxworkdir}/py3
commands = python {posargs}

[flake8]
exclude = juju/client/_*
