Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test media in temp folder #140

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

## In development

- Add option to store test media in temp folder (#140).

## 24.2 (2024-04-16)

- Reinstate setuptools_scm for build (#441).
Expand Down
2 changes: 2 additions & 0 deletions docs/test.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,5 @@ The `test` module offers extra functions for unit tests.

.. autoclass:: django_marina.test.test_cases.ExtendedTestCase
:members:

.. autoclass:: django_marina.test.runners.TempMediaDiscoverRunner
35 changes: 35 additions & 0 deletions src/django_marina/test/runners.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import shutil
import tempfile

from django.conf import settings
from django.test.runner import DiscoverRunner


class TempMediaMixin:
"""
Mixin to create MEDIA_ROOT in temporary directory and tear down when complete.
Source: https://www.caktusgroup.com/blog/2013/06/26/media-root-and-django-tests/
"""

def setup_test_environment(self):
"""Create temp directory and update MEDIA_ROOT and default storage."""
super().setup_test_environment()
settings._original_media_root = settings.MEDIA_ROOT
settings._original_file_storage = settings.DEFAULT_FILE_STORAGE
self._temp_media = tempfile.mkdtemp()
settings.MEDIA_ROOT = self._temp_media
settings.DEFAULT_FILE_STORAGE = "django.core.files.storage.FileSystemStorage"

def teardown_test_environment(self):
"""Delete temp storage."""
super().teardown_test_environment()
shutil.rmtree(self._temp_media, ignore_errors=True)
settings.MEDIA_ROOT = settings._original_media_root
del settings._original_media_root
settings.DEFAULT_FILE_STORAGE = settings._original_file_storage
del settings._original_file_storage


class TempMediaDiscoverRunner(TempMediaMixin, DiscoverRunner):
"""Default Django DiscoverRunner, modified to write media files to a temp folder."""