#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
#

# Remember to start celery workers to run celery tests, e.g.
# celery --app=superset.tasks.celery_app:app worker -Ofair -c 2
[testenv]
basepython = python3.9
ignore_basepython_conflict = true
commands =
    superset db upgrade
    superset init
    # use -s to be able to use break pointers.
    # no args or tests/* can be passed as an argument to run all tests
    pytest -s {posargs}
deps =
    -rrequirements/testing.txt
setenv =
    PYTHONPATH = {toxinidir}
    SUPERSET_TESTENV = true
    SUPERSET_CONFIG = tests.integration_tests.superset_test_config
    SUPERSET_HOME = {envtmpdir}
    mysql: SUPERSET__SQLALCHEMY_DATABASE_URI = mysql://mysqluser:mysqluserpassword@localhost/superset?charset=utf8
    postgres: SUPERSET__SQLALCHEMY_DATABASE_URI = postgresql+psycopg2://superset:superset@localhost/test
    sqlite: SUPERSET__SQLALCHEMY_DATABASE_URI = sqlite:////{envtmpdir}/superset.db
    mysql-presto: SUPERSET__SQLALCHEMY_DATABASE_URI = mysql://mysqluser:mysqluserpassword@localhost/superset?charset=utf8
    # docker run -p 8080:8080 --name presto starburstdata/presto
    mysql-presto: SUPERSET__SQLALCHEMY_EXAMPLES_URI = presto://localhost:8080/memory/default
    # based on https://github.com/big-data-europe/docker-hadoop
    # clone the repo & run docker-compose up -d to test locally
    mysql-hive: SUPERSET__SQLALCHEMY_DATABASE_URI = mysql://mysqluser:mysqluserpassword@localhost/superset?charset=utf8
    mysql-hive: SUPERSET__SQLALCHEMY_EXAMPLES_URI = hive://localhost:10000/default
    # make sure that directory is accessible by docker
    hive: UPLOAD_FOLDER = /tmp/.superset/app/static/uploads/
usedevelop = true
allowlist_externals =
    npm
    pkill

[testenv:cypress]
setenv =
    PYTHONPATH = {toxinidir}
    SUPERSET_TESTENV = true
    SUPERSET_CONFIG = tests.integration_tests.superset_test_config
    SUPERSET_HOME = {envtmpdir}
commands =
    npm install -g npm@'>=6.5.0'
    pip install -e {toxinidir}/
    {toxinidir}/superset-frontend/cypress_build.sh
commands_post =
    pkill -if "python {envbindir}/flask"

[testenv:cypress-dashboard]
setenv =
    PYTHONPATH = {toxinidir}
    SUPERSET_TESTENV = true
    SUPERSET_CONFIG = tests.integration_tests.superset_test_config
    SUPERSET_HOME = {envtmpdir}
commands =
    npm install -g npm@'>=6.5.0'
    pip install -e {toxinidir}/
    {toxinidir}/superset-frontend/cypress_build.sh dashboard
commands_post =
    pkill -if "python {envbindir}/flask"

[testenv:cypress-explore]
setenv =
    PYTHONPATH = {toxinidir}
    SUPERSET_TESTENV = true
    SUPERSET_CONFIG = tests.integration_tests.superset_test_config
    SUPERSET_HOME = {envtmpdir}
commands =
    npm install -g npm@'>=6.5.0'
    pip install -e {toxinidir}/
    {toxinidir}/superset-frontend/cypress_build.sh explore
commands_post =
    pkill -if "python {envbindir}/flask"

[testenv:cypress-sqllab]
setenv =
    PYTHONPATH = {toxinidir}
    SUPERSET_TESTENV = true
    SUPERSET_CONFIG = tests.integration_tests.superset_test_config
    SUPERSET_HOME = {envtmpdir}
commands =
    npm install -g npm@'>=6.5.0'
    pip install -e {toxinidir}/
    {toxinidir}/superset-frontend/cypress_build.sh sqllab
commands_post =
    pkill -if "python {envbindir}/flask"

[testenv:cypress-sqllab-backend-persist]
setenv =
    PYTHONPATH = {toxinidir}
    SUPERSET_TESTENV = true
    SUPERSET_CONFIG = tests.integration_tests.superset_test_config
    SUPERSET_HOME = {envtmpdir}
commands =
    npm install -g npm@'>=6.5.0'
    pip install -e {toxinidir}/
    {toxinidir}/superset-frontend/cypress_build.sh sqllab
commands_post =
    pkill -if "python {envbindir}/flask"

[testenv:eslint]
changedir = {toxinidir}/superset-frontend
commands =
    npm run lint
deps =

[testenv:fossa]
commands =
    {toxinidir}/scripts/fossa.sh
deps =
passenv = *

[testenv:javascript]
commands =
    npm install -g npm@'>=6.5.0'
    {toxinidir}/superset-frontend/js_build.sh
deps =

[testenv:license-check]
commands =
    {toxinidir}/scripts/check_license.sh
passenv = *
whitelist_externals =
    {toxinidir}/scripts/check_license.sh
deps =

[testenv:pre-commit]
commands =
    pre-commit run --all-files
deps =
    -rrequirements/integration.txt
skip_install = true

[testenv:pylint]
commands =
    pylint superset
deps =
    -rrequirements/testing.txt

[testenv:thumbnails]
setenv =
    SUPERSET_CONFIG = tests.integration_tests.superset_test_config_thumbnails
deps =
    -rrequirements/testing.txt

[tox]
envlist =
    cypress-dashboard
    cypress-explore
    cypress-sqllab
    cypress-sqllab-backend-persist
    eslint
    fossa
    javascript
    license-check
    pre-commit
    pylint
skipsdist = true