Atempt to create model factories

This commit is contained in:
2020-05-21 17:42:24 +02:00
parent 5c89842b92
commit eb90bca467
5 changed files with 74 additions and 0 deletions

View File

@@ -0,0 +1,40 @@
""" Module generating useful models in 1 place """
import tempfile
from typing import Type, TypeVar
from django.core.files.uploadedfile import SimpleUploadedFile
import django.db.models
from django.test import override_settings
from videodinges import models
T = TypeVar('T', bound=django.db.models.Model)
def create(model: Type[T], **kwargs) -> T:
if model is models.Video:
return models.Video.objects.create(**{**dict(title='Title', slug='slug', description='Description'), **kwargs})
if model is models.Transcoding:
video = create(models.Video, title='Title', slug='slug', description='Description')
return models.Transcoding.objects.create(
**{
**dict(
video=video,
quality=models.qualities[0].name,
type=str(models.transcoding_types[0]),
url='https://some_url',
),
**kwargs
}
)
if model is models.Upload:
return _upload(**kwargs)
@override_settings(MEDIA_ROOT=tempfile.mkdtemp())
def _upload(**kwargs):
return models.Upload.objects.create(**{**dict(file=SimpleUploadedFile('some_file.txt', b'some contents')), **kwargs})
# TODO fix annoying dict notation to something more gentle.

View File

@@ -0,0 +1,12 @@
from django.test import TestCase
from videodinges.models import Transcoding
from tests.videodinges import factories
from datetime import datetime
class TranscodingTestCase(TestCase):
def test_factory_returns_model(self):
transcoding = factories.create(Transcoding)
self.assertEqual(transcoding.video.slug, 'slug')
self.assertEqual(transcoding.quality, '360p')
self.assertEqual(transcoding.type, 'video/webm')
self.assertEqual(transcoding.url, 'https://some_url')

View File

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

View File

@@ -0,0 +1,13 @@
from django.test import TestCase
from videodinges.models import Video
from tests.videodinges import factories
from datetime import datetime
class VideoTestCase(TestCase):
def test_factory_returns_model(self):
video = factories.create(Video)
self.assertEqual(video.slug, 'slug')
self.assertEqual(video.title, 'Title')
self.assertEqual(video.description, 'Description')
self.assertIsInstance(video.created_at, datetime)
self.assertIsInstance(video.updated_at, datetime)