From cfe6e27a7a86c359a30a34685f59dd3144305013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Hells=C3=A9n?= Date: Wed, 11 Dec 2024 23:30:59 +0100 Subject: [PATCH] Improve testing --- .vscode/settings.json | 1 + core/settings.py | 3 +++ core/tests/conftest.py | 40 ++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 6 ++++++ 4 files changed, 50 insertions(+) create mode 100644 core/tests/conftest.py diff --git a/.vscode/settings.json b/.vscode/settings.json index e7c2d83..6725c98 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,6 +7,7 @@ "appendonly", "appname", "asgiref", + "autouse", "Behaviour", "cacd", "cellspacing", diff --git a/core/settings.py b/core/settings.py index 284eced..ca6dbdb 100644 --- a/core/settings.py +++ b/core/settings.py @@ -1,5 +1,6 @@ from __future__ import annotations +import logging import os from pathlib import Path from typing import Literal @@ -8,6 +9,8 @@ from django.contrib import messages from dotenv import load_dotenv from platformdirs import user_data_dir +logger: logging.Logger = logging.getLogger(__name__) + # Parse a .env file and then load all the variables found as environment variables. load_dotenv(verbose=True) diff --git a/core/tests/conftest.py b/core/tests/conftest.py new file mode 100644 index 0000000..3905af7 --- /dev/null +++ b/core/tests/conftest.py @@ -0,0 +1,40 @@ +from __future__ import annotations + +import logging +from typing import TYPE_CHECKING + +import pytest + +if TYPE_CHECKING: + from django.conf import LazySettings + +logger: logging.Logger = logging.getLogger(__name__) + + +@pytest.fixture(autouse=True) +def _media_root( + settings: LazySettings, + tmpdir_factory: pytest.TempPathFactory, +) -> None: + """Forces django to save media files into temp folder.""" + settings.MEDIA_ROOT = tmpdir_factory.mktemp("media", numbered=True) + logger.info("Testing: Media root is set to %s", settings.MEDIA_ROOT) + + +@pytest.fixture(autouse=True) +def _password_hashers(settings: LazySettings) -> None: + """Forces django to use fast password hashers for tests.""" + settings.PASSWORD_HASHERS = [ + "django.contrib.auth.hashers.MD5PasswordHasher", + ] + logger.info("Testing: Password hashers are set to %s", settings.PASSWORD_HASHERS) + + +@pytest.fixture(autouse=True) +def _debug(settings: LazySettings) -> None: + """Sets proper DEBUG and TEMPLATE debug mode for coverage.""" + settings.DEBUG = False + for template in settings.TEMPLATES: + template["OPTIONS"]["debug"] = True + + logger.info("Testing: DEBUG is set to %s", settings.DEBUG) diff --git a/pyproject.toml b/pyproject.toml index 1be86c2..7e10f49 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -97,6 +97,12 @@ DJANGO_SETTINGS_MODULE = "core.settings" # Only run tests in files that match this pattern. python_files = ["*_test.py"] +# Enable logging in the console. +log_cli = true +log_cli_level = "INFO" +log_cli_format = "%(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)" +log_cli_date_format = "%Y-%m-%d %H:%M:%S" + [tool.mypy] plugins = ["mypy_django_plugin.main"]