Better upload handling in temporary dirs

This commit is contained in:
2020-05-09 11:21:47 +02:00
parent e1aff0c7a1
commit 40490d6086
7 changed files with 37 additions and 19 deletions

View File

@@ -0,0 +1 @@
from .base import UploadMixin

22
tests/videodinges/base.py Normal file
View File

@@ -0,0 +1,22 @@
import tempfile
from unittest import TestCase
from django.test import override_settings
class UploadMixin(TestCase):
base_upload_dir: str
@classmethod
def setUpClass(cls) -> None:
super().setUpClass()
cls.base_upload_dir = tempfile.mkdtemp(suffix='-videodinges-tests')
def setUp(self) -> None:
super().setUp()
media_root = tempfile.mkdtemp(suffix='-' + self.__class__.__name__, dir=self.base_upload_dir)
self.media_root_override_settings = override_settings(MEDIA_ROOT=media_root)
self.media_root_override_settings.enable()
def tearDown(self) -> None:
self.media_root_override_settings.disable()
super().tearDown()

View File

@@ -1,10 +1,8 @@
""" Module generating useful models in 1 place """ """ Module generating useful models in 1 place """
import tempfile
from typing import Type, TypeVar from typing import Type, TypeVar
from django.core.files.uploadedfile import SimpleUploadedFile from django.core.files.uploadedfile import SimpleUploadedFile
import django.db.models import django.db.models
from django.test import override_settings
from videodinges import models from videodinges import models
@@ -30,13 +28,9 @@ def create(model: Type[T], **kwargs) -> T:
return models.Transcoding.objects.create(**{**defaults, **kwargs}) return models.Transcoding.objects.create(**{**defaults, **kwargs})
if model is models.Upload: if model is models.Upload:
return _upload(**kwargs) file = SimpleUploadedFile('some_file.txt', b'some contents') \
if 'file' not in kwargs else None
@override_settings(MEDIA_ROOT=tempfile.mkdtemp()) return models.Upload.objects.create(**{**dict(file=file), **kwargs})
def _upload(**kwargs):
file = SimpleUploadedFile('some_file.txt', b'some contents') \
if 'file' not in kwargs else None
return models.Upload.objects.create(**{**dict(file=file), **kwargs})
# TODO fix annoying dict notation to something more gentle. # TODO fix annoying dict notation to something more gentle.

View File

@@ -2,7 +2,7 @@ from django.db.utils import IntegrityError
from django.test import TestCase from django.test import TestCase
from tests.videodinges import factories from tests.videodinges import factories, UploadMixin
from videodinges.models import Transcoding, Video, qualities, transcoding_types, Upload from videodinges.models import Transcoding, Video, qualities, transcoding_types, Upload
@@ -19,7 +19,7 @@ class TranscodingTestCase(TestCase):
self.assertEqual(transcoding.url, 'https://some_url') self.assertEqual(transcoding.url, 'https://some_url')
class CreateTranscodingTestCase(TestCase): class CreateTranscodingTestCase(UploadMixin, TestCase):
def test_upload_and_url_cannot_both_be_filled(self): def test_upload_and_url_cannot_both_be_filled(self):
video = factories.create(Video) video = factories.create(Video)

View File

@@ -1,13 +1,13 @@
from django.test import TestCase from django.test import TestCase
from tests.videodinges import UploadMixin
from videodinges.models import Upload from videodinges.models import Upload
from django.core.files.uploadedfile import SimpleUploadedFile from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import override_settings
import tempfile
@override_settings(MEDIA_ROOT=tempfile.mkdtemp()) class UploadTestCase(UploadMixin, TestCase):
class UploadTestCase(TestCase):
def setUp(self): def setUp(self):
super().setUp()
Upload.objects.create(file=SimpleUploadedFile('some_file.txt', b'some contents')) Upload.objects.create(file=SimpleUploadedFile('some_file.txt', b'some contents'))
def test_model_is_created(self): def test_model_is_created(self):

View File

@@ -1,9 +1,9 @@
from django.test import TestCase from django.test import TestCase
from tests.videodinges import factories from tests.videodinges import factories, UploadMixin
from videodinges.models import Upload from videodinges.models import Upload
class UploadTestCase(TestCase): class UploadTestCase(UploadMixin, TestCase):
def test_model_is_created(self): def test_model_is_created(self):
upload = factories.create(Upload) upload = factories.create(Upload)
self.assertEqual(upload.file.name, 'some_file.txt') self.assertEqual(upload.file.name, 'some_file.txt')

View File

@@ -3,12 +3,13 @@ from django.http import HttpResponse
from django.test import TestCase, Client from django.test import TestCase, Client
from django.urls import reverse from django.urls import reverse
from tests.videodinges import factories from tests.videodinges import factories, UploadMixin
from videodinges import models from videodinges import models
class VideoTestCase(TestCase): class VideoTestCase(UploadMixin, TestCase):
def setUp(self): def setUp(self):
super().setUp()
self.client = Client() self.client = Client()
def test_video_view_renders_properly(self): def test_video_view_renders_properly(self):