Add tests for codec orders

This commit is contained in:
2022-04-07 20:50:15 +02:00
parent 4cdbffe718
commit 6885feb980

View File

@@ -245,52 +245,6 @@ class VideoTestCase(UploadMixin, TestCase):
content,
)
def test_video_view_renders_transcoding_types_in_correct_order(self):
video = factories.create(
models.Video,
title='Vid 1',
slug='vid-1',
default_quality='480p',
)
factories.create(
models.Transcoding,
video=video,
quality='480p',
type='video/mp4; codecs="avc1.64001e,mp4a.40.2"',
url='http://480p.mp4',
)
factories.create(
models.Transcoding,
video=video,
quality='480p',
type='video/webm; codecs="vp9, opus"',
url='http://480p.vp9.webm',
)
factories.create(
models.Transcoding,
video=video,
quality='480p',
type='video/webm; codecs="vp8, vorbis"',
url='http://480p.vp8.webm',
)
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(
"""<video width="853" height="480" controls="controls">
<source src="http://480p.vp9.webm" type='video/webm; codecs="vp9, opus"' />
<source src="http://480p.vp8.webm" type='video/webm; codecs="vp8, vorbis"' />
<source src="http://480p.mp4" type='video/mp4; codecs="avc1.64001e,mp4a.40.2"' />
You need a browser that understands HTML5 video and supports h.264 or vp8 or vp9 codecs.
</video>""",
content,
)
class VideoWithTrackTestCase(UploadMixin, TestCase):
def setUp(self):
@@ -480,3 +434,228 @@ class VideoWithTrackTestCase(UploadMixin, TestCase):
</video>""",
content,
)
class VideoWithCodecOrderCookieTestCase(UploadMixin, TestCase):
""" Test the order of the codecs """
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/mp4; codecs="avc1.64001e,mp4a.40.2"',
url='http://480p.mp4',
)
factories.create(
models.Transcoding,
video=self.video,
quality='480p',
type='video/webm; codecs="vp9, opus"',
url='http://480p.vp9.webm',
)
factories.create(
models.Transcoding,
video=self.video,
quality='480p',
type='video/webm; codecs="vp8, vorbis"',
url='http://480p.vp8.webm',
)
def test_video_view_renders_transcoding_types_in_correct_order_without_cookie(self):
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(
"""<video width="853" height="480" controls="controls">
<source src="http://480p.vp9.webm" type='video/webm; codecs="vp9, opus"' />
<source src="http://480p.vp8.webm" type='video/webm; codecs="vp8, vorbis"' />
<source src="http://480p.mp4" type='video/mp4; codecs="avc1.64001e,mp4a.40.2"' />
You need a browser that understands HTML5 video and supports h.264 or vp8 or vp9 codecs.
</video>""",
content,
)
def test_video_view_renders_transcoding_types_in_correct_order_with_empty_cookie(self):
self.client.cookies['video_codecs_prio'] = ''
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(
"""<video width="853" height="480" controls="controls">
<source src="http://480p.vp9.webm" type='video/webm; codecs="vp9, opus"' />
<source src="http://480p.vp8.webm" type='video/webm; codecs="vp8, vorbis"' />
<source src="http://480p.mp4" type='video/mp4; codecs="avc1.64001e,mp4a.40.2"' />
You need a browser that understands HTML5 video and supports h.264 or vp8 or vp9 codecs.
</video>""",
content,
)
def test_video_view_renders_transcoding_types_in_correct_order_with_only_vp8_mentioned(self):
self.client.cookies['video_codecs_prio'] = 'vp8'
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(
"""<video width="853" height="480" controls="controls">
<source src="http://480p.vp8.webm" type='video/webm; codecs="vp8, vorbis"' />
<source src="http://480p.vp9.webm" type='video/webm; codecs="vp9, opus"' />
<source src="http://480p.mp4" type='video/mp4; codecs="avc1.64001e,mp4a.40.2"' />
You need a browser that understands HTML5 video and supports h.264 or vp8 or vp9 codecs.
</video>""",
content,
)
def test_video_view_renders_transcoding_types_in_correct_order_with_only_h264_mentioned(self):
self.client.cookies['video_codecs_prio'] = 'h.264'
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(
"""<video width="853" height="480" controls="controls">
<source src="http://480p.mp4" type='video/mp4; codecs="avc1.64001e,mp4a.40.2"' />
<source src="http://480p.vp9.webm" type='video/webm; codecs="vp9, opus"' />
<source src="http://480p.vp8.webm" type='video/webm; codecs="vp8, vorbis"' />
You need a browser that understands HTML5 video and supports h.264 or vp8 or vp9 codecs.
</video>""",
content,
)
def test_video_view_renders_transcoding_types_in_correct_order_with_vp8_and_h264_mentioned(self):
self.client.cookies['video_codecs_prio'] = 'vp8 h.264'
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(
"""<video width="853" height="480" controls="controls">
<source src="http://480p.vp8.webm" type='video/webm; codecs="vp8, vorbis"' />
<source src="http://480p.mp4" type='video/mp4; codecs="avc1.64001e,mp4a.40.2"' />
<source src="http://480p.vp9.webm" type='video/webm; codecs="vp9, opus"' />
You need a browser that understands HTML5 video and supports h.264 or vp8 or vp9 codecs.
</video>""",
content,
)
def test_video_view_renders_transcoding_types_in_correct_order_with_h264_and_vp8_mentioned(self):
self.client.cookies['video_codecs_prio'] = 'h.264 vp8'
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(
"""<video width="853" height="480" controls="controls">
<source src="http://480p.mp4" type='video/mp4; codecs="avc1.64001e,mp4a.40.2"' />
<source src="http://480p.vp8.webm" type='video/webm; codecs="vp8, vorbis"' />
<source src="http://480p.vp9.webm" type='video/webm; codecs="vp9, opus"' />
You need a browser that understands HTML5 video and supports h.264 or vp8 or vp9 codecs.
</video>""",
content,
)
def test_video_view_renders_transcoding_types_in_correct_order_with_h264_and_vp9_and_vp8_mentioned(self):
self.client.cookies['video_codecs_prio'] = 'h.264 vp9 vp8'
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(
"""<video width="853" height="480" controls="controls">
<source src="http://480p.mp4" type='video/mp4; codecs="avc1.64001e,mp4a.40.2"' />
<source src="http://480p.vp9.webm" type='video/webm; codecs="vp9, opus"' />
<source src="http://480p.vp8.webm" type='video/webm; codecs="vp8, vorbis"' />
You need a browser that understands HTML5 video and supports h.264 or vp8 or vp9 codecs.
</video>""",
content,
)
def test_video_view_renders_transcoding_types_in_correct_order_with_h264_and_vp8_and_vp9_mentioned(self):
self.client.cookies['video_codecs_prio'] = 'h.264 vp8 vp9'
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(
"""<video width="853" height="480" controls="controls">
<source src="http://480p.mp4" type='video/mp4; codecs="avc1.64001e,mp4a.40.2"' />
<source src="http://480p.vp8.webm" type='video/webm; codecs="vp8, vorbis"' />
<source src="http://480p.vp9.webm" type='video/webm; codecs="vp9, opus"' />
You need a browser that understands HTML5 video and supports h.264 or vp8 or vp9 codecs.
</video>""",
content,
)
def test_video_view_renders_transcoding_types_ignores_garbage_in_cookie(self):
self.client.cookies['video_codecs_prio'] = 'bwarpblergh crap bla'
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(
"""<video width="853" height="480" controls="controls">
<source src="http://480p.vp9.webm" type='video/webm; codecs="vp9, opus"' />
<source src="http://480p.vp8.webm" type='video/webm; codecs="vp8, vorbis"' />
<source src="http://480p.mp4" type='video/mp4; codecs="avc1.64001e,mp4a.40.2"' />
You need a browser that understands HTML5 video and supports h.264 or vp8 or vp9 codecs.
</video>""",
content,
)
def test_video_view_renders_transcoding_types_in_correct_order_with_h264_and_vp8_and_crap_and_vp9_mentioned(self):
self.client.cookies['video_codecs_prio'] = 'h.264 vp8 nonexistent-thing vp9'
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(
"""<video width="853" height="480" controls="controls">
<source src="http://480p.mp4" type='video/mp4; codecs="avc1.64001e,mp4a.40.2"' />
<source src="http://480p.vp8.webm" type='video/webm; codecs="vp8, vorbis"' />
<source src="http://480p.vp9.webm" type='video/webm; codecs="vp9, opus"' />
You need a browser that understands HTML5 video and supports h.264 or vp8 or vp9 codecs.
</video>""",
content,
)