Skip to content

Commit

Permalink
Add test runner that uses tempfile
Browse files Browse the repository at this point in the history
  • Loading branch information
dyve committed Apr 18, 2024
1 parent 5175b87 commit e601237
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 0 deletions.
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."""

0 comments on commit e601237

Please sign in to comment.