Files
videodinges/tests/videodinges/models/test_track.py
2022-04-05 09:06:03 +02:00

97 lines
3.9 KiB
Python

from django.db.utils import IntegrityError
from django.test import TestCase
from tests.videodinges import factories, UploadMixin
from videodinges.models import Track, Video, Upload
class TrackTestCase(UploadMixin, TestCase):
def setUp(self):
super().setUp()
self.video = Video.objects.create(title='Title', slug='slug', description='Description')
def test_model_is_created_with_required_fields(self):
Track.objects.create(video=self.video, lang='en', upload=factories.create(Upload))
track = Track.objects.all()[0]
self.assertEqual(track.video.slug, 'slug')
self.assertEqual(track.default, False)
self.assertEqual(track.kind, 'subtitles')
self.assertEqual(track.lang, 'en')
self.assertEqual(track.label, None)
self.assertEqual(track.upload.file.name, 'some_file.txt')
def test_model_is_created_with_nonrequired_fields(self):
Track.objects.create(
video=self.video,
lang='en',
upload=factories.create(Upload),
default=True,
label='Something',
kind='chapters',
)
track = Track.objects.all()[0]
self.assertEqual(track.video.slug, 'slug')
self.assertEqual(track.default, True)
self.assertEqual(track.kind, 'chapters')
self.assertEqual(track.lang, 'en')
self.assertEqual(track.label, 'Something')
self.assertEqual(track.upload.file.name, 'some_file.txt')
def test_can_create_two_models(self):
model1 = Track.objects.create(video=self.video, lang='en', upload=factories.create(Upload))
model2 = Track.objects.create(video=self.video, lang='nl', upload=factories.create(Upload))
self.assertEqual({model1, model2}, set((m for m in Track.objects.all())))
self.assertEqual(model1.video, self.video)
self.assertEqual(model1.default, False)
self.assertEqual(model1.kind, 'subtitles')
self.assertEqual(model1.lang, 'en')
self.assertEqual(model2.video, self.video)
self.assertEqual(model2.default, False)
self.assertEqual(model2.kind, 'subtitles')
self.assertEqual(model2.lang, 'nl')
def test_can_create_two_models_with_one_default(self):
model1 = Track.objects.create(video=self.video, default=True, lang='en', upload=factories.create(Upload))
model2 = Track.objects.create(video=self.video, lang='nl', upload=factories.create(Upload))
self.assertEqual({model1, model2}, set((m for m in Track.objects.all())))
self.assertEqual(model1.video, self.video)
self.assertEqual(model1.default, True)
self.assertEqual(model1.kind, 'subtitles')
self.assertEqual(model1.lang, 'en')
self.assertEqual(model2.video, self.video)
self.assertEqual(model2.default, False)
self.assertEqual(model2.kind, 'subtitles')
self.assertEqual(model2.lang, 'nl')
def test_cannot_set_default_twice(self):
video = factories.create(Video)
Track.objects.create(video=video, default=True, lang='en', upload=factories.create(Upload))
with self.assertRaisesMessage(IntegrityError, 'UNIQUE constraint failed: tracks.video_id'):
Track.objects.create(video=video, default=True, lang='nl', upload=factories.create(Upload))
def test_cannot_set_two_subtitles_with_same_lang(self):
video = factories.create(Video)
Track.objects.create(video=video, lang='en', upload=factories.create(Upload))
with self.assertRaisesMessage(IntegrityError, 'UNIQUE constraint failed: tracks.video_id'):
Track.objects.create(video=video, lang='en', upload=factories.create(Upload))
def test_can_create_two_models_with_same_lang_but_different_kind(self):
model1 = Track.objects.create(video=self.video, lang='en', upload=factories.create(Upload))
model2 = Track.objects.create(video=self.video, lang='en', kind='chapters', upload=factories.create(Upload))
self.assertEqual({model1, model2}, set((m for m in Track.objects.all())))
self.assertEqual(model1.video, self.video)
self.assertEqual(model1.default, False)
self.assertEqual(model1.kind, 'subtitles')
self.assertEqual(model1.lang, 'en')
self.assertEqual(model2.video, self.video)
self.assertEqual(model2.default, False)
self.assertEqual(model2.kind, 'chapters')
self.assertEqual(model2.lang, 'en')