# Copyright 2018 Telefonica S.A.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.

[tox]
envlist = cover, flake8, unittest

[testenv]
basepython = python3
install_command = python3 -m pip install -r requirements.txt -U {opts} {packages}
deps = -rtest-requirements.txt
commands=
    python3 -m unittest discover -v

[testenv:cover]
basepython = python3
deps =
  nose2
  nose2-cov
  coverage
  -rrequirements.txt
  -rtest-requirements.txt
commands =
    coverage erase
    nose2 -C --coverage osm_lcm --plugin nose2.plugins.junitxml -s osm_lcm/tests
    coverage report --omit='*tests*'
    coverage html -d ./cover --omit='*tests*'
    coverage xml -o coverage.xml --omit='*tests*'

[testenv:flake8]
basepython = python3
deps =
  flake8
  -rrequirements.txt
commands = flake8 osm_lcm --max-line-length 120 \
    --exclude .svn,CVS,.gz,.git,__pycache__,.tox,local,temp,frontend_grpc.py,frontend_pb2.py \
    --ignore W291,W293,E226,W504

[testenv:unittest]
basepython = python3
deps = asynctest
commands = python3 -m unittest osm_lcm.tests.test_ns osm_lcm.tests.test_prometheus

[testenv:build]
basepython = python3
deps = stdeb
       setuptools-version-command
commands = python3 setup.py --command-packages=stdeb.command bdist_deb

