Coverage for app/venv/lib/python3.14/site-packages/weblate/settings_test.py: 0%
63 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 07:15 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 07:15 +0000
1# Copyright © Michal Čihař <michal@weblate.org>
2#
3# SPDX-License-Identifier: GPL-3.0-or-later
5#
6# Django settings for running testsuite
7#
9import os
10import warnings
11from tempfile import TemporaryDirectory
13from weblate.settings_example import * # noqa: F403
15CI_DATABASE = os.environ.get("CI_DATABASE", "")
17default_user = "weblate"
18default_name = "weblate"
19if CI_DATABASE in {"mysql", "mariadb"}:
20 DATABASES["default"]["ENGINE"] = "django.db.backends.mysql"
21 default_user = "root"
22 DATABASES["default"]["OPTIONS"] = {
23 "init_command": (
24 "SET NAMES utf8mb4, "
25 "wait_timeout=28800, "
26 "default_storage_engine=INNODB, "
27 'sql_mode="STRICT_TRANS_TABLES"'
28 ),
29 "charset": "utf8",
30 "isolation_level": "read committed",
31 }
32elif CI_DATABASE == "postgresql":
33 DATABASES["default"]["ENGINE"] = "django.db.backends.postgresql"
34 default_user = "postgres"
35else:
36 if not CI_DATABASE:
37 msg = "Missing CI_DATABASE configuration in the environment"
38 raise ValueError(msg)
39 msg = f"Not supported database: {CI_DATABASE}"
40 raise ValueError(msg)
42DATABASES["default"]["HOST"] = os.environ.get("CI_DB_HOST", "")
43DATABASES["default"]["NAME"] = os.environ.get("CI_DB_NAME", default_name)
44DATABASES["default"]["USER"] = os.environ.get("CI_DB_USER", default_user)
45DATABASES["default"]["PASSWORD"] = os.environ.get("CI_DB_PASSWORD", "")
46DATABASES["default"]["PORT"] = os.environ.get("CI_DB_PORT", "")
48# Configure admins
49ADMINS = (("Weblate test", "noreply@weblate.org"),)
51# The secret key is needed for tests
52SECRET_KEY = "secret key used for tests only" # noqa: S105
54SITE_DOMAIN = "example.com"
55OTP_WEBAUTHN_RP_NAME = SITE_DOMAIN
56OTP_WEBAUTHN_RP_ID = SITE_DOMAIN
57OTP_WEBAUTHN_ALLOWED_ORIGINS = [f"https://{SITE_DOMAIN}"]
59# Different root for test repos
60if "CI_BASE_DIR" in os.environ:
61 BASE_DIR = os.environ["CI_BASE_DIR"]
62else:
63 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
65DATA_DIR = os.path.join(BASE_DIR, "data-test")
67# Use random data directory when running in parallel
68if "PYTEST_XDIST_TESTRUNUID" in os.environ:
69 if not os.path.exists(DATA_DIR):
70 os.makedirs(DATA_DIR, exist_ok=True)
71 DATA_DIR_TMP = TemporaryDirectory(dir=DATA_DIR, prefix="xdist-")
72 DATA_DIR = DATA_DIR_TMP.name
74CACHE_DIR = os.path.join(DATA_DIR, "cache")
75MEDIA_ROOT = os.path.join(DATA_DIR, "media")
76STATIC_ROOT = os.path.join(DATA_DIR, "static")
77CELERY_TASK_ALWAYS_EAGER = True
78CELERY_BROKER_URL = "memory://"
79CELERY_TASK_EAGER_PROPAGATES = True
80CELERY_RESULT_BACKEND = None
82# Enable lazy stats for testing
83STATS_LAZY = True
85VCS_API_DELAY = 0
86VCS_FILE_PROTOCOL = True
88# Localize CDN addon
89LOCALIZE_CDN_URL = "https://cdn.example.com/"
90LOCALIZE_CDN_PATH = os.path.join(DATA_DIR, "l10n-cdn")
92# Needed for makemessages, otherwise it does not discover all available locales
93# and the -a parameter does not work
94LOCALE_PATHS = [os.path.join(os.path.dirname(__file__), "locale")]
96# Silent logging setup
97LOGGING = {
98 "version": 1,
99 "disable_existing_loggers": False,
100 "filters": {"require_debug_false": {"()": "django.utils.log.RequireDebugFalse"}},
101 "formatters": {"simple": {"format": "%(levelname)s %(message)s"}},
102 "handlers": {
103 "mail_admins": {
104 "level": "ERROR",
105 "filters": ["require_debug_false"],
106 "class": "django.utils.log.AdminEmailHandler",
107 },
108 "console": {
109 "level": "DEBUG",
110 "class": "logging.StreamHandler",
111 "formatter": "simple",
112 },
113 },
114 "loggers": {
115 "django.request": {
116 "handlers": ["mail_admins"],
117 "level": "ERROR",
118 "propagate": True,
119 },
120 "weblate": {"handlers": [], "level": "ERROR"},
121 "social": {"handlers": [], "level": "ERROR"},
122 },
123}
125# Reset caches
126CACHES = {"default": {"BACKEND": "django.core.cache.backends.locmem.LocMemCache"}}
128if "CI_REDIS_HOST" in os.environ:
129 CACHES["avatar"] = {
130 "BACKEND": "django_redis.cache.RedisCache",
131 "LOCATION": "redis://{}:{}/0".format(
132 os.environ["CI_REDIS_HOST"], os.environ.get("CI_REDIS_PORT", "6379")
133 ),
134 }
136# Selenium can not clear HttpOnly cookies in MSIE
137SESSION_COOKIE_HTTPONLY = False
139# Use database backed sessions for transaction consistency in tests
140SESSION_ENGINE = "django.contrib.sessions.backends.db"
142# Test optional apps as well
143INSTALLED_APPS += ("weblate.billing", "weblate.legal")
145# Test GitHub auth
146AUTHENTICATION_BACKENDS = (
147 "social_core.backends.email.EmailAuth",
148 "social_core.backends.github.GithubOAuth2",
149 "weblate.accounts.auth.WeblateUserBackend",
150)
152# Disable random admin checks trigger
153BACKGROUND_ADMIN_CHECKS = False
155# Use weak password hasher for testing
156PASSWORD_HASHERS = [
157 "django.contrib.auth.hashers.MD5PasswordHasher",
158]
160# Let the testsuite fail on timezone issues
161warnings.filterwarnings(
162 "error",
163 r"DateTimeField .* received a naive datetime",
164 RuntimeWarning,
165 r"django\.db\.models\.fields",
166)