"""Testes da leitura de falas usada antes da aplicação de um plano.""" import tempfile import unittest from pathlib import Path from engine.editor import ErroDePlanoInvalido from engine.persistencia import LeitorDeTranscricaoDoPlano, abrir_banco class TesteLeitorDeTranscricaoDoPlano(unittest.TestCase): """Valida vínculo do plano e conversão de timeline para mídia original.""" def setUp(self) -> None: """Cria um banco isolado com um clipe deslocado na timeline.""" self._pasta_temporaria = tempfile.TemporaryDirectory() self.addCleanup(self._pasta_temporaria.cleanup) caminho_do_banco = Path(self._pasta_temporaria.name) / "analises.db" self.conexao = abrir_banco(caminho_do_banco) self.addCleanup(self.conexao.close) with self.conexao: self.conexao.execute( "INSERT INTO videos (id, nome, duracao) VALUES ('video-1', 'Vídeo', 40.0)" ) self.conexao.execute( """INSERT INTO faixas (id, video_id, nome, tipo, indice) VALUES ('audio-1', 'video-1', 'A1', 'audio', 0)""" ) self.conexao.execute( """INSERT INTO clipes (id, video_id, faixa_id, nome, inicio_na_timeline, fim_na_timeline, inicio_na_origem, fim_na_origem, arquivo, offline, metadados) VALUES ('clipe-1', 'video-1', 'audio-1', 'Clipe', 10.0, 30.0, 2.0, 22.0, '/video.mp4', 0, '{}')""" ) segmento = self.conexao.execute( """INSERT INTO segmentos_de_transcricao (video_id, clipe_id, inicio, fim, texto) VALUES ('video-1', 'clipe-1', 12.0, 14.0, 'Frase completa.')""" ) self.conexao.execute( """INSERT INTO palavras_de_transcricao (segmento_id, ordem, texto, inicio, fim) VALUES (?, 0, 'Frase', 12.0, 12.5)""", (segmento.lastrowid,), ) self.conexao.execute( """INSERT INTO planos_de_edicao (video_id, origem) VALUES ('video-1', '/video.mp4')""" ) def test_converte_tempos_para_a_origem_do_clipe(self) -> None: """Subtrai a posição da timeline e soma o início na mídia original.""" falas = LeitorDeTranscricaoDoPlano(self.conexao).carregar(1) self.assertEqual(falas[0].inicio, 4.0) self.assertEqual(falas[0].fim, 6.0) self.assertEqual(falas[0].palavras[0].inicio, 4.0) self.assertEqual(falas[0].palavras[0].fim, 4.5) def test_rejeita_plano_inexistente(self) -> None: """Evita validar uma transcrição que não pertence ao plano solicitado.""" with self.assertRaisesRegex(ErroDePlanoInvalido, "não existe"): LeitorDeTranscricaoDoPlano(self.conexao).carregar(999) if __name__ == "__main__": unittest.main()