weblate/docs/contributing/tests.rst
2023-09-18 19:27:42 +02:00

90 lines
2.7 KiB
ReStructuredText

Weblate testsuite and continuous integration
--------------------------------------------
Testsuites exist for most of the current code, increase coverage by adding testcases for any new
functionality, and verify that it works.
.. _ci-tests:
Continuous integration
++++++++++++++++++++++
Current test results can be found on `GitHub Actions`_ and coverage is reported
on `Codecov`_.
.. _GitHub Actions: https://github.com/WeblateOrg/weblate/actions
.. _Codecov: https://app.codecov.io/gh/WeblateOrg/weblate/
There are several jobs to verify different aspects:
* Unit tests
* Documentation build and external links
* Migration testing from all supported releases
* Code linting
* Setup verification (ensures that generated dist files do not miss anything and can be tested)
The configuration for the CI is in :file:`.github/workflows` directory. It
heavily uses helper scripts stored in :file:`ci` directory. The scripts can be
also executed manually, but they require several environment variables, mostly
defining Django settings file to use and database connection. The example
definition of that is in :file:`scripts/test-database.sh`:
.. literalinclude:: ../../scripts/test-database.sh
:language: sh
The simple execution can look like:
.. code-block:: sh
. scripts/test-database.sh
./ci/run-migrate
./ci/run-test
./ci/run-docs
.. _local-tests:
Local testing
+++++++++++++
Before running test, please make sure test dependencies are installed. This can be done by `pip install -r requirements-dev.txt` or `pip install -e .[test]`.
To run a testsuite locally, use:
.. code-block:: sh
DJANGO_SETTINGS_MODULE=weblate.settings_test ./manage.py test
.. hint::
You will need a database (PostgreSQL) server to be used for tests. By
default Django creates separate database to run tests with ``test_`` prefix,
so in case your settings is configured to use ``weblate``, the tests will
use ``test_weblate`` database. See :ref:`database-setup` for setup
instructions.
The :file:`weblate/settings_test.py` is used in CI environment as well (see
:ref:`ci-tests`) and can be tuned using environment variables:
.. literalinclude:: ../../scripts/test-database.sh
:language: sh
Prior to running tests you should collect static files as some tests rely on them being present:
.. code-block:: sh
DJANGO_SETTINGS_MODULE=weblate.settings_test ./manage.py collectstatic
You can also specify individual tests to run:
.. code-block:: sh
DJANGO_SETTINGS_MODULE=weblate.settings_test ./manage.py test weblate.gitexport
.. hint::
The tests can also be executed inside developer docker container, see :ref:`dev-docker`.
.. seealso::
See :doc:`django:topics/testing/index` for more info on running and
writing tests for Django.