288 lines
9.5 KiB
Python
288 lines
9.5 KiB
Python
import os
|
|
|
|
from django.contrib.messages import constants as message_constants
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from wagtail.test.numberformat import patch_number_formats
|
|
|
|
WAGTAIL_CHECK_TEMPLATE_NUMBER_FORMAT = (
|
|
os.environ.get("WAGTAIL_CHECK_TEMPLATE_NUMBER_FORMAT", "0") == "1"
|
|
)
|
|
if WAGTAIL_CHECK_TEMPLATE_NUMBER_FORMAT:
|
|
# Patch Django number formatting functions to raise exceptions if a number is output directly
|
|
# on a template (which is liable to cause bugs when USE_THOUSAND_SEPARATOR is in use).
|
|
patch_number_formats()
|
|
|
|
DEBUG = os.environ.get("DJANGO_DEBUG", "false").lower() == "true"
|
|
WAGTAIL_ROOT = os.path.dirname(os.path.dirname(__file__))
|
|
WAGTAILADMIN_BASE_URL = "http://testserver"
|
|
STATIC_ROOT = os.path.join(WAGTAIL_ROOT, "tests", "test-static")
|
|
MEDIA_ROOT = os.path.join(WAGTAIL_ROOT, "tests", "test-media")
|
|
MEDIA_URL = "/media/"
|
|
|
|
TIME_ZONE = "Asia/Tokyo"
|
|
|
|
DATABASES = {
|
|
"default": {
|
|
"ENGINE": os.environ.get("DATABASE_ENGINE", "django.db.backends.sqlite3"),
|
|
"NAME": os.environ.get("DATABASE_NAME", ":memory:"),
|
|
"USER": os.environ.get("DATABASE_USER", ""),
|
|
"PASSWORD": os.environ.get("DATABASE_PASSWORD", ""),
|
|
"HOST": os.environ.get("DATABASE_HOST", ""),
|
|
"PORT": os.environ.get("DATABASE_PORT", ""),
|
|
"TEST": {"NAME": os.environ.get("DATABASE_NAME", "")},
|
|
}
|
|
}
|
|
|
|
# Set regular database name when a non-SQLite db is used
|
|
if DATABASES["default"]["ENGINE"] != "django.db.backends.sqlite3":
|
|
DATABASES["default"]["NAME"] = os.environ.get("DATABASE_NAME", "wagtail")
|
|
|
|
# Add extra options when mssql is used (on for example appveyor)
|
|
if DATABASES["default"]["ENGINE"] == "sql_server.pyodbc":
|
|
DATABASES["default"]["OPTIONS"] = {
|
|
"driver": os.environ.get("DATABASE_DRIVER", "SQL Server Native Client 11.0"),
|
|
"MARS_Connection": "True",
|
|
"host_is_server": True, # Applies to FreeTDS driver only
|
|
}
|
|
|
|
|
|
# explicitly set charset / collation to utf8 on mysql
|
|
if DATABASES["default"]["ENGINE"] == "django.db.backends.mysql":
|
|
DATABASES["default"]["OPTIONS"] = {
|
|
"charset": "utf8mb4",
|
|
"collation": "utf8mb4_general_ci",
|
|
}
|
|
DATABASES["default"]["TEST"]["CHARSET"] = "utf8mb4"
|
|
DATABASES["default"]["TEST"]["COLLATION"] = "utf8mb4_general_ci"
|
|
|
|
|
|
SECRET_KEY = "not needed"
|
|
|
|
ROOT_URLCONF = "wagtail.test.urls"
|
|
|
|
STATIC_URL = "/static/"
|
|
|
|
STATICFILES_FINDERS = (
|
|
"django.contrib.staticfiles.finders.FileSystemFinder",
|
|
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
|
|
)
|
|
|
|
# Default storage settings
|
|
# https://docs.djangoproject.com/en/stable/ref/settings/#std-setting-STORAGES
|
|
STORAGES = {
|
|
"default": {
|
|
"BACKEND": "django.core.files.storage.FileSystemStorage",
|
|
},
|
|
"staticfiles": {
|
|
"BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage",
|
|
},
|
|
}
|
|
|
|
if os.environ.get("STATICFILES_STORAGE", "") == "manifest":
|
|
STORAGES["staticfiles"]["BACKEND"] = (
|
|
"django.contrib.staticfiles.storage.ManifestStaticFilesStorage"
|
|
)
|
|
|
|
|
|
USE_TZ = not os.environ.get("DISABLE_TIMEZONE")
|
|
if not USE_TZ:
|
|
print("Timezone support disabled") # noqa: T201
|
|
|
|
LANGUAGE_CODE = "en"
|
|
|
|
TEMPLATES = [
|
|
{
|
|
"BACKEND": "django.template.backends.django.DjangoTemplates",
|
|
"DIRS": [],
|
|
"APP_DIRS": True,
|
|
"OPTIONS": {
|
|
"context_processors": [
|
|
"django.template.context_processors.debug",
|
|
"django.template.context_processors.request",
|
|
"django.contrib.auth.context_processors.auth",
|
|
"django.contrib.messages.context_processors.messages",
|
|
"django.template.context_processors.request",
|
|
"wagtail.test.context_processors.do_not_use_static_url",
|
|
"wagtail.contrib.settings.context_processors.settings",
|
|
"wagtail.test.context_processors.count_calls",
|
|
],
|
|
"debug": True, # required in order to catch template errors
|
|
},
|
|
},
|
|
{
|
|
"BACKEND": "django.template.backends.jinja2.Jinja2",
|
|
"APP_DIRS": False,
|
|
"DIRS": [
|
|
os.path.join(WAGTAIL_ROOT, "test", "testapp", "jinja2_templates"),
|
|
],
|
|
"OPTIONS": {
|
|
"extensions": [
|
|
"wagtail.jinja2tags.core",
|
|
"wagtail.admin.jinja2tags.userbar",
|
|
"wagtail.images.jinja2tags.images",
|
|
"wagtail.contrib.settings.jinja2tags.settings",
|
|
],
|
|
},
|
|
},
|
|
]
|
|
|
|
MIDDLEWARE = (
|
|
"django.middleware.common.CommonMiddleware",
|
|
"django.contrib.sessions.middleware.SessionMiddleware",
|
|
"django.middleware.csrf.CsrfViewMiddleware",
|
|
"django.middleware.locale.LocaleMiddleware",
|
|
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
|
"django.contrib.messages.middleware.MessageMiddleware",
|
|
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
|
"wagtail.test.middleware.BlockDodgyUserAgentMiddleware",
|
|
"wagtail.contrib.redirects.middleware.RedirectMiddleware",
|
|
)
|
|
|
|
INSTALLED_APPS = [
|
|
# Place wagtail.test.earlypage first, to test the behaviour of page models
|
|
# that are defined before wagtail.admin is loaded
|
|
"wagtail.test.earlypage",
|
|
# Install wagtailredirects with its appconfig
|
|
# There's nothing special about wagtailredirects, we just need to have one
|
|
# app which uses AppConfigs to test that hooks load properly
|
|
"wagtail.contrib.redirects.apps.WagtailRedirectsAppConfig",
|
|
"wagtail.test.testapp",
|
|
"wagtail.test.demosite",
|
|
"wagtail.test.snippets",
|
|
"wagtail.test.routablepage",
|
|
"wagtail.test.search",
|
|
"wagtail.test.i18n",
|
|
"wagtail.test.streamfield_migrations",
|
|
"wagtail.contrib.simple_translation",
|
|
"wagtail.contrib.styleguide",
|
|
"wagtail.contrib.routable_page",
|
|
"wagtail.contrib.frontend_cache",
|
|
"wagtail.contrib.search_promotions",
|
|
"wagtail.contrib.settings",
|
|
"wagtail.contrib.table_block",
|
|
"wagtail.contrib.forms",
|
|
"wagtail.contrib.typed_table_block",
|
|
"wagtail.search",
|
|
"wagtail.embeds",
|
|
"wagtail.images",
|
|
"wagtail.sites",
|
|
"wagtail.locales",
|
|
"wagtail.snippets",
|
|
"wagtail.documents",
|
|
"wagtail.admin",
|
|
"wagtail.api.v2",
|
|
"wagtail",
|
|
"taggit",
|
|
"rest_framework",
|
|
"django_filters",
|
|
"django.contrib.admin",
|
|
"django.contrib.auth",
|
|
"django.contrib.contenttypes",
|
|
"django.contrib.sessions",
|
|
"django.contrib.messages",
|
|
"django.contrib.sitemaps",
|
|
"django.contrib.staticfiles",
|
|
]
|
|
|
|
|
|
# Using DatabaseCache to make sure that the cache is cleared between tests.
|
|
# This prevents false-positives in some wagtail core tests where we are
|
|
# changing the 'wagtail_root_paths' key which may cause future tests to fail.
|
|
CACHES = {
|
|
"default": {
|
|
"BACKEND": "django.core.cache.backends.db.DatabaseCache",
|
|
"LOCATION": "cache",
|
|
}
|
|
}
|
|
|
|
PASSWORD_HASHERS = (
|
|
"django.contrib.auth.hashers.MD5PasswordHasher", # don't use the intentionally slow default password hasher
|
|
)
|
|
|
|
ALLOWED_HOSTS = [
|
|
"localhost",
|
|
"testserver",
|
|
"other.example.com",
|
|
"127.0.0.1",
|
|
"0.0.0.0",
|
|
]
|
|
|
|
WAGTAILSEARCH_BACKENDS = {
|
|
"default": {
|
|
"BACKEND": "wagtail.search.backends.database.fallback",
|
|
}
|
|
}
|
|
|
|
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
|
|
|
|
if os.environ.get("USE_EMAIL_USER_MODEL"):
|
|
INSTALLED_APPS.append("wagtail.users")
|
|
INSTALLED_APPS.append("wagtail.test.emailuser")
|
|
AUTH_USER_MODEL = "emailuser.EmailUser"
|
|
print("EmailUser (no username) user model active") # noqa: T201
|
|
else:
|
|
# this appconfig takes the place of wagtail.users
|
|
INSTALLED_APPS.append("wagtail.test.apps.CustomUsersAppConfig")
|
|
INSTALLED_APPS.append("wagtail.test.customuser")
|
|
AUTH_USER_MODEL = "customuser.CustomUser"
|
|
|
|
if os.environ.get("DATABASE_ENGINE") == "django.db.backends.postgresql":
|
|
WAGTAILSEARCH_BACKENDS["postgresql"] = {
|
|
"BACKEND": "wagtail.search.backends.database",
|
|
"AUTO_UPDATE": False,
|
|
"SEARCH_CONFIG": "english",
|
|
}
|
|
|
|
if "ELASTICSEARCH_URL" in os.environ:
|
|
if os.environ.get("ELASTICSEARCH_VERSION") == "8":
|
|
backend = "wagtail.search.backends.elasticsearch8"
|
|
elif os.environ.get("ELASTICSEARCH_VERSION") == "7":
|
|
backend = "wagtail.search.backends.elasticsearch7"
|
|
|
|
WAGTAILSEARCH_BACKENDS["elasticsearch"] = {
|
|
"BACKEND": backend,
|
|
"URLS": [os.environ["ELASTICSEARCH_URL"]],
|
|
"TIMEOUT": 10,
|
|
"max_retries": 1,
|
|
"AUTO_UPDATE": False,
|
|
"INDEX_SETTINGS": {"settings": {"index": {"number_of_shards": 1}}},
|
|
}
|
|
|
|
|
|
WAGTAIL_SITE_NAME = "Test Site"
|
|
|
|
WAGTAILADMIN_RICH_TEXT_EDITORS = {
|
|
"default": {"WIDGET": "wagtail.admin.rich_text.DraftailRichTextArea"},
|
|
"custom": {"WIDGET": "wagtail.test.testapp.rich_text.CustomRichTextArea"},
|
|
}
|
|
|
|
WAGTAIL_CONTENT_LANGUAGES = [
|
|
("en", _("English")),
|
|
("fr", _("French")),
|
|
]
|
|
|
|
|
|
# Set a non-standard DEFAULT_AUTHENTICATION_CLASSES value, to verify that the
|
|
# admin API still works with session-based auth regardless of this setting
|
|
# (see https://github.com/wagtail/wagtail/issues/5585)
|
|
REST_FRAMEWORK = {
|
|
"DEFAULT_AUTHENTICATION_CLASSES": [
|
|
"rest_framework.authentication.BasicAuthentication",
|
|
]
|
|
}
|
|
|
|
# Disable redirect autocreation for the majority of tests (to improve efficiency)
|
|
WAGTAILREDIRECTS_AUTO_CREATE = False
|
|
|
|
|
|
# https://github.com/wagtail/wagtail/issues/2551 - projects should be able to set
|
|
# MESSAGE_TAGS for their own purposes without them leaking into Wagtail admin styles.
|
|
|
|
MESSAGE_TAGS = {
|
|
message_constants.DEBUG: "my-custom-tag",
|
|
message_constants.INFO: "my-custom-tag",
|
|
message_constants.SUCCESS: "my-custom-tag",
|
|
message_constants.WARNING: "my-custom-tag",
|
|
message_constants.ERROR: "my-custom-tag",
|
|
}
|