2023-06-26 19:48:38 +02:00
name : Unit Tests
2019-10-27 14:28:33 +01:00
on :
pull_request :
2024-03-02 10:56:15 +01:00
paths :
- telegram/**
- tests/**
2024-07-03 19:04:45 +02:00
- .github/workflows/unit_tests.yml
2024-06-15 10:29:19 +02:00
- pyproject.toml
- requirements-unit-tests.txt
2020-01-26 21:07:25 +01:00
push :
2022-08-17 18:24:50 +02:00
branches :
2020-01-26 21:07:25 +01:00
- master
2022-05-03 17:22:30 +02:00
schedule :
# Run monday and friday morning at 03:07 - odd time to spread load on GitHub Actions
- cron : '7 3 * * 1,5'
2019-10-27 14:28:33 +01:00
jobs :
pytest :
name : pytest
runs-on : ${{matrix.os}}
strategy :
matrix :
2024-09-13 19:32:22 +02:00
python-version : [ '3.8' , '3.9' , '3.10' , '3.11' , '3.12' , '3.13.0-rc.2' ]
2020-12-30 15:39:38 +01:00
os : [ ubuntu-latest, windows-latest, macos-latest]
2019-10-27 14:28:33 +01:00
fail-fast : False
steps :
2023-10-02 20:20:28 +02:00
- uses : actions/checkout@v4
2019-10-27 14:28:33 +01:00
- name : Set up Python ${{ matrix.python-version }}
2024-01-03 16:43:35 +01:00
uses : actions/setup-python@v5
2019-10-27 14:28:33 +01:00
with :
python-version : ${{ matrix.python-version }}
2023-01-06 08:13:20 +01:00
cache : 'pip'
cache-dependency-path : '**/requirements*.txt'
2019-10-27 14:28:33 +01:00
- name : Install dependencies
run : |
2019-11-09 19:33:51 +01:00
python -W ignore -m pip install --upgrade pip
2023-04-16 10:54:49 +02:00
python -W ignore -m pip install -U pytest-cov
2024-06-15 10:29:19 +02:00
python -W ignore -m pip install .
python -W ignore -m pip install -r requirements-unit-tests.txt
2022-10-23 14:25:49 +02:00
python -W ignore -m pip install pytest-xdist[psutil]
2019-10-27 14:28:33 +01:00
- name : Test with pytest
2022-08-26 06:50:03 +02:00
# We run 4 different suites here
2021-09-22 16:49:10 +02:00
# 1. Test just utils.datetime.py without pytz being installed
2021-02-13 22:07:37 +01:00
# 2. Test just test_no_passport.py without passport dependencies being installed
2022-08-26 06:50:03 +02:00
# 3. Test just test_rate_limiter.py without passport dependencies being installed
# 4. Test everything else
2021-02-19 19:07:48 +01:00
# The first & second one are achieved by mocking the corresponding import
# See test_helpers.py & test_no_passport.py for details
2019-10-27 14:28:33 +01:00
run : |
2023-02-11 10:45:17 +01:00
# We test without optional dependencies first. This includes:
# - without pytz
# - without jobqueue
# - without ratelimiter
# - without webhooks
# - without arbitrary callback data
2023-03-12 16:30:39 +01:00
# - without socks support
# - without http2 support
2023-02-11 10:45:17 +01:00
TO_TEST="test_no_passport.py or test_datetime.py or test_defaults.py or test_jobqueue.py or test_applicationbuilder.py or test_ratelimiter.py or test_updater.py or test_callbackdatacache.py or test_request.py"
pytest -v --cov -k "${TO_TEST}"
2023-04-01 22:35:20 +02:00
# Rerun only failed tests (--lf), and don't run any tests if none failed (--lfnf=none)
2023-06-26 19:48:38 +02:00
pytest -v --cov --cov-append -k "${TO_TEST}" --lf --lfnf=none --junit-xml=.test_report_no_optionals.xml
2023-04-01 22:35:20 +02:00
# No tests were selected, convert returned status code to 0
opt_dep_status=$(( $? == 5 ? 0 : $? ))
2022-11-22 10:43:50 +01:00
2022-10-31 10:12:18 +01:00
# Test the rest
export TEST_WITH_OPT_DEPS='true'
2024-06-15 10:29:19 +02:00
pip install .[all]
2022-10-23 14:25:49 +02:00
# `-n auto --dist loadfile` uses pytest-xdist to run each test file on a different CPU
2023-02-11 10:45:17 +01:00
# worker. Increasing number of workers has little effect on test duration, but it seems
# to increase flakyness, specially on python 3.7 with --dist=loadgroup.
2022-10-23 14:25:49 +02:00
pytest -v --cov --cov-append -n auto --dist loadfile
2023-06-26 19:48:38 +02:00
pytest -v --cov --cov-append -n auto --dist loadfile --lf --lfnf=none --junit-xml=.test_report_optionals.xml
2023-04-01 22:35:20 +02:00
main_status=$(( $? == 5 ? 0 : $? ))
# exit with non-zero status if any of the two pytest runs failed
exit $(( ${opt_dep_status} || ${main_status} ))
2019-10-27 14:28:33 +01:00
env :
JOB_INDEX : ${{ strategy.job-index }}
2023-01-01 17:00:49 +01:00
BOTS : W3sidG9rZW4iOiAiNjk2MTg4NzMyOkFBR1Z3RUtmSEhsTmpzY3hFRE5LQXdraEdzdFpfa28xbUMwIiwgInBheW1lbnRfcHJvdmlkZXJfdG9rZW4iOiAiMjg0Njg1MDYzOlRFU1Q6WldGaU1UUmxNbVF5TnpNeSIsICJuYW1lIjogIlBUQiB0ZXN0cyBvbiBUcmF2aXMgdXNpbmcgQ1B5dGhvbiAyLjciLCAic3VwZXJfZ3JvdXBfaWQiOiAiLTEwMDEzOTA5ODM5OTciLCAidXNlcm5hbWUiOiAiQHB0Yl90cmF2aXNfY3B5dGhvbl8yN19ib3QiLCAiZm9ydW1fZ3JvdXBfaWQiOiAiLTEwMDE3MTA4NTA4MjIifSwgeyJ0b2tlbiI6ICI2NzE0Njg4ODY6QUFHUEdmY2lSSUJVTkZlODI0dUlWZHE3SmUzX1luQVROR3ciLCAicGF5bWVudF9wcm92aWRlcl90b2tlbiI6ICIyODQ2ODUwNjM6VEVTVDpaR1l3T1Rsa016TXhOMlkyIiwgIm5hbWUiOiAiUFRCIHRlc3RzIG9uIFRyYXZpcyB1c2luZyBDUHl0aG9uIDMuNCIsICJzdXBlcl9ncm91cF9pZCI6ICItMTAwMTQ0NjAyMjUyMiIsICJ1c2VybmFtZSI6ICJAcHRiX3RyYXZpc19jcHl0aG9uXzM0X2JvdCIsICJmb3J1bV9ncm91cF9pZCI6ICItMTAwMTg5MTQ0MTc5MSJ9LCB7InRva2VuIjogIjYyOTMyNjUzODpBQUZSclpKckI3b0IzbXV6R3NHSlhVdkdFNUNRek01Q1U0byIsICJwYXltZW50X3Byb3ZpZGVyX3Rva2VuIjogIjI4NDY4NTA2MzpURVNUOk1tTTVZV0poWXpreE0yVTEiLCAibmFtZSI6ICJQVEIgdGVzdHMgb24gVHJhdmlzIHVzaW5nIENQeXRob24gMy41IiwgInN1cGVyX2dyb3VwX2lkIjogIi0xMDAxNDk2OTE3NzUwIiwgInVzZXJuYW1lIjogIkBwdGJfdHJhdmlzX2NweXRob25fMzVfYm90IiwgImZvcnVtX2dyb3VwX2lkIjogIi0xMDAxNTc3NTA0Nzg3In0sIHsidG9rZW4iOiAiNjQwMjA4OTQzOkFBRmhCalFwOXFtM1JUeFN6VXBZekJRakNsZS1Kano1aGNrIiwgInBheW1lbnRfcHJvdmlkZXJfdG9rZW4iOiAiMjg0Njg1MDYzOlRFU1Q6WXpoa1pUZzFOamMxWXpWbCIsICJuYW1lIjogIlBUQiB0ZXN0cyBvbiBUcmF2aXMgdXNpbmcgQ1B5dGhvbiAzLjYiLCAic3VwZXJfZ3JvdXBfaWQiOiAiLTEwMDEzMzM4NzE0NjEiLCAidXNlcm5hbWUiOiAiQHB0Yl90cmF2aXNfY3B5dGhvbl8zNl9ib3QiLCAiZm9ydW1fZ3JvdXBfaWQiOiAiLTEwMDE4Njc5MDExNzIifSwgeyJ0b2tlbiI6ICI2OTUxMDQwODg6QUFIZnp5bElPalNJSVMtZU9uSTIweTJFMjBIb2RIc2Z6LTAiLCAicGF5bWVudF9wcm92aWRlcl90b2tlbiI6ICIyODQ2ODUwNjM6VEVTVDpPR1ExTURnd1pqSXdaakZsIiwgIm5hbWUiOiAiUFRCIHRlc3RzIG9uIFRyYXZpcyB1c2luZyBDUHl0aG9uIDMuNyIsICJzdXBlcl9ncm91cF9pZCI6ICItMTAwMTQ3ODI5MzcxNCIsICJ1c2VybmFtZSI6ICJAcHRiX3RyYXZpc19jcHl0aG9uXzM3X2JvdCIsICJmb3J1bV9ncm91cF9pZCI6ICItMTAwMTg2NDA1NDg3OSJ9LCB7InRva2VuIjogIjY5MTQyMzU1NDpBQUY4V2tqQ1pibkhxUF9pNkdoVFlpckZFbFpyR2FZT2hYMCIsICJwYXltZW50X3Byb3ZpZGVyX3Rva2VuIjogIjI4NDY4NTA2MzpURVNUOllqYzVOVGhpTW1ReU1XVmgiLCAibmFtZSI6ICJQVEIgdGVzdHMgb24gVHJhdmlzIHVzaW5nIFB5UHkgMi43IiwgInN1cGVyX2dyb3VwX2lkIjogIi0xMDAxMzYzOTMyNTczIiwgInVzZXJuYW1lIjogIkBwdGJfdHJhdmlzX3B5cHlfMjdfYm90IiwgImZvcnVtX2dyb3VwX2lkIjogIi0xMDAxODY3ODU1OTM2In0sIHsidG9rZW4iOiAiNjg0MzM5OTg0OkFBRk1nRUVqcDAxcjVyQjAwN3lDZFZOc2c4QWxOc2FVLWNjIiwgInBheW1lbnRfcHJvdmlkZXJfdG9rZW4iOiAiMjg0Njg1MDYzOlRFU1Q6TVRBek1UWTNNR1V5TmpnMCIsICJuYW1lIjogIlBUQiB0ZXN0cyBvbiBUcmF2aXMgdXNpbmcgUHlQeSAzLjUiLCAic3VwZXJfZ3JvdXBfaWQiOiAiLTEwMDE0MDc4MzY2MDUiLCAidXNlcm5hbWUiOiAiQHB0Yl90cmF2aXNfcHlweV8zNV9ib3QiLCAiZm9ydW1fZ3JvdXBfaWQiOiAiLTEwMDE1NTg5OTAyODIifSwgeyJ0b2tlbiI6ICI2OTAwOTEzNDc6QUFGTG1SNXBBQjVZY3BlX21PaDd6TTRKRkJPaDB6M1QwVG8iLCAicGF5bWVudF9wcm92aWRlcl90b2tlbiI6ICIyODQ2ODUwNjM6VEVTVDpaRGhsTnpFNU1Ea3dZV0ppIiwgIm5hbWUiOiAiUFRCIHRlc3RzIG9uIEFwcFZleW9yIHVzaW5nIENQeXRob24gMy40IiwgInN1cGVyX2dyb3VwX2lkIjogIi0xMDAxMjc5NjAwMDI2IiwgInVzZXJuYW1lIjogIkBwdGJfYXBwdmV5b3JfY3B5dGhvbl8zNF9ib3QiLCAiZm9ydW1fZ3JvdXBfaWQiOiAiLTEwMDE3MjU2OTEzODcifSwgeyJ0b2tlbiI6ICI2OTQzMDgwNTI6QUFFQjJfc29uQ2s1NUxZOUJHOUFPLUg4anhpUFM1NW9vQkEiLCAicGF5bWVudF9wcm92aWRlcl90b2tlbiI6ICIyODQ2ODUwNjM6VEVTVDpZbVppWVdabU1qSmhaR015IiwgIm5hbWUiOiAiUFRCIHRlc3RzIG9uIEFwcFZleW9yIHVzaW5nIENQeXRob24gMi43IiwgInN1cGVyX2dyb3VwX2lkIjogIi0xMDAxMjkzMDc5MTY1IiwgInVzZXJuYW1lIjogIkBwdGJfYXBwdmV5b3JfY3B5dGhvbl8yN19ib3QiLCAiZm9ydW1fZ3JvdXBfaWQiOiAiLTEwMDE1NjU4NTU5ODcifSwgeyJ0b2tlbiI6ICIxMDU1Mzk3NDcxOkFBRzE4bkJfUzJXQXd1SjNnN29oS0JWZ1hYY2VNbklPeVNjIiwgInBheW1lbnRfcHJvdmlkZXJfdG9rZW4iOiAiMjg0Njg1MDYzOlRFU1Q6TmpBd056QXpZalZpTkdOayIsICJuYW1lIjogIlBUQiB0ZXN0cyBbMF0iLCAic3VwZXJfZ3JvdXBfaWQiOiAiLTEwMDExODU1MDk2MzYiLCAidXNlcm5hbWUiOiAicHRiXzBfYm90IiwgImZvcnVtX2dyb3VwX2lkIjogIi0xMDAxODE5MDM3MzExIn0sIHsidG9rZW4iOiAiMTA0NzMyNjc3MTpBQUY4bk90ODFGcFg4bGJidno4VWV3UVF2UmZUYkZmQnZ1SSIsICJwYXltZW50X3Byb3ZpZGVyX3Rva2VuIjogIjI4NDY4NTA2MzpURVNUOllUVTFOVEk0WkdSallqbGkiLCAibmFtZSI6ICJQVEIgdGVzdHMgWzFdIiwgInN1cGVyX2dyb3VwX2lkIjogIi0xMDAxNDg0Nzk3NjEyIiwgInVzZXJuYW1lIjogInB0Yl8xX2JvdCIsICJmb3J1bV9ncm91cF9pZCI6ICItMTAwMTc5NzMwODQ0NCJ9LCB7InRva2VuIjogIjk3MTk5Mjc
2022-10-31 10:12:18 +01:00
TEST_WITH_OPT_DEPS : "false"
2021-02-19 19:07:48 +01:00
TEST_BUILD : "true"
2019-10-27 14:28:33 +01:00
shell : bash --noprofile --norc {0}
2023-06-26 19:48:38 +02:00
- name : Test Summary
id : test_summary
2024-08-03 17:27:39 +02:00
uses : test-summary/action@v2.4
2023-06-26 19:48:38 +02:00
if : always() # always run, even if tests fail
with :
paths : |
.test_report_no_optionals.xml
.test_report_optionals.xml
2019-10-27 14:28:33 +01:00
- name : Submit coverage
2024-02-02 23:56:59 +01:00
uses : codecov/codecov-action@v4
2020-10-10 10:50:19 +02:00
with :
env_vars : OS,PYTHON
name : ${{ matrix.os }}-${{ matrix.python-version }}
fail_ci_if_error : true
2024-02-02 23:56:59 +01:00
token : ${{ secrets.CODECOV_TOKEN }}