From 216abbe0233faef79f6b4eaee5e15d902529de4c Mon Sep 17 00:00:00 2001 From: Chris Howell Date: Thu, 9 Jul 2020 20:14:36 -0700 Subject: [PATCH] Add unittests for formatters.py --- .../test/test_formatters.py | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 youtube_transcript_api/test/test_formatters.py diff --git a/youtube_transcript_api/test/test_formatters.py b/youtube_transcript_api/test/test_formatters.py new file mode 100644 index 0000000..df56a6d --- /dev/null +++ b/youtube_transcript_api/test/test_formatters.py @@ -0,0 +1,99 @@ +from unittest import TestCase +from mock import MagicMock +import json + +from youtube_transcript_api.formatters import ( + JSONTranscriptFormatter, + parse_timecode, + SRTTranscriptFormatter, + TextTranscriptFormatter, + TranscriptFormatter, + TranscriptFormatterFactory +) + + +class TestTranscriptFormatters(TestCase): + @classmethod + def setUpClass(cls): + cls.transcript = [ + { + 'text': 'Hey, this is just a test', + 'start': 0.0, + 'duration': 1.54 + }, + { + 'text': 'this is not the original transcript', + 'start': 1.54, + 'duration': 4.16 + }, + { + 'text': 'just something shorter, I made up for testing', + 'start': 5.7, + 'duration': 3.239 + } + ] + + def test_base_formatter_combine(self): + expecting = ''.join([str(line) for line in self.transcript]) + + self.assertEqual( + TranscriptFormatter.combine(self.transcript), + expecting + ) + + def test_base_format_not_implemented(self): + with self.assertRaises(NotImplementedError): + TranscriptFormatter.format(self.transcript) + + def test_text_formatter_format(self): + text = '\n'.join([line.get('text') for line in self.transcript]) + text_fmt = TextTranscriptFormatter.format(self.transcript) + self.assertIn(text + '\n', text_fmt) + + def test_srt_formatter_format(self): + start = self.transcript[0].get('start') + duration = self.transcript[0].get('duration') + srt_fmt = SRTTranscriptFormatter.format(self.transcript) + self.assertIn('{start} --> {end}'.format( + start=parse_timecode(start), + end=parse_timecode(start+duration) + ), srt_fmt) + + def test_json_formatter_format(self): + json_fmt = JSONTranscriptFormatter.format(self.transcript) + self.assertIsInstance(json.dumps(json_fmt), str) + + def test_invalid_parse_timecode(self): + start_time = 'not_float' + + with self.assertRaises(ValueError): + parse_timecode(start_time) + + def test_valid_parse_timecode(self): + start_time = 0.0 + end_time = 5.20 + + self.assertEqual( + parse_timecode(start_time), + '00:00:00,000' + ) + + self.assertEqual( + parse_timecode(end_time), + '00:00:05,200' + ) + + def test_formatter_factory_valid_single_add(self): + factory = TranscriptFormatterFactory() + factory.add_formatter('json', JSONTranscriptFormatter) + + self.assertDictEqual( + getattr(factory, '_formatters'), + {'json': JSONTranscriptFormatter} + ) + + def test_formatter_factory_invalid_single_add(self): + factory = TranscriptFormatterFactory() + + with self.assertRaises(TypeError): + factory.add_formatter('magic', MagicMock)