diff --git a/tests/videodinges/factories.py b/tests/videodinges/factories.py index 0867ab2..fffccd8 100644 --- a/tests/videodinges/factories.py +++ b/tests/videodinges/factories.py @@ -34,6 +34,13 @@ def create(model: Type[T], **kwargs) -> T: if model is models.Upload: return _create_with_defaults(models.Upload, kwargs, file=SimpleUploadedFile('some_file.txt', b'some contents')) + if model is models.Track: + return _create_with_defaults(models.Track, kwargs, + video=lambda: create(models.Video), + lang='en', + upload=lambda: create(models.Upload) + ) + raise NotImplementedError('Factory for %s not implemented' % model) diff --git a/tests/videodinges/views/test_video.py b/tests/videodinges/views/test_video.py index b5dedb8..4804f36 100644 --- a/tests/videodinges/views/test_video.py +++ b/tests/videodinges/views/test_video.py @@ -246,3 +246,191 @@ class VideoTestCase(UploadMixin, TestCase): ) +class VideoWithTrackTestCase(UploadMixin, TestCase): + def setUp(self): + super().setUp() + self.client = Client() + self.video = factories.create( + models.Video, + title='Vid 1', + slug='vid-1', + default_quality='480p', + ) + factories.create( + models.Transcoding, + video=self.video, + quality='480p', + type='video/webm; codecs="vp9, opus"', + url='http://480p.webm', + ) + factories.create( + models.Transcoding, + video=self.video, + quality='480p', + type='video/mp4', + url='http://480p.mp4', + ) + + def test_video_view_renders_track_properly(self): + + factories.create( + models.Track, + video=self.video, + lang='en', + ) + + resp:HttpResponse = self.client.get(reverse('video', args=['vid-1'])) + + self.assertEqual(resp.status_code, 200) + + content:str = resp.content.decode(resp.charset) + + self.assertInHTML( + """""", + content, + ) + + def test_video_view_renders_multiple_tracks_properly(self): + + track_en = factories.create( + models.Track, + video=self.video, + lang='en', + ) + + track_nl = factories.create( + models.Track, + video=self.video, + lang='nl', + ) + + resp:HttpResponse = self.client.get(reverse('video', args=['vid-1'])) + + self.assertEqual(resp.status_code, 200) + + content:str = resp.content.decode(resp.charset) + + self.assertInHTML( + f"""""", + content, + ) + + + def test_video_view_renders_default_track_properly(self): + + factories.create( + models.Track, + video=self.video, + lang='en', + default=True + ) + + resp:HttpResponse = self.client.get(reverse('video', args=['vid-1'])) + + self.assertEqual(resp.status_code, 200) + + content:str = resp.content.decode(resp.charset) + + self.assertInHTML( + """""", + content, + ) + + def test_video_view_renders_multiple_tracks_properly_with_one_default(self): + + track_en = factories.create( + models.Track, + video=self.video, + lang='en', + default=True + ) + + track_nl = factories.create( + models.Track, + video=self.video, + lang='nl', + ) + + resp:HttpResponse = self.client.get(reverse('video', args=['vid-1'])) + + self.assertEqual(resp.status_code, 200) + + content:str = resp.content.decode(resp.charset) + + self.assertInHTML( + f"""""", + content, + ) + + def test_video_view_renders_track_label(self): + + factories.create( + models.Track, + video=self.video, + lang='en', + label='Some Label', + ) + + resp:HttpResponse = self.client.get(reverse('video', args=['vid-1'])) + + self.assertEqual(resp.status_code, 200) + + content:str = resp.content.decode(resp.charset) + + self.assertInHTML( + """""", + content, + ) + + + def test_video_view_renders_track_kind(self): + + factories.create( + models.Track, + video=self.video, + lang='en', + kind='captions', + ) + + resp:HttpResponse = self.client.get(reverse('video', args=['vid-1'])) + + self.assertEqual(resp.status_code, 200) + + content:str = resp.content.decode(resp.charset) + + self.assertInHTML( + """""", + content, + )