"""Testes do ponto de entrada usado pelo painel CEP para o Scanner.""" import subprocess import sys from pathlib import Path import unittest from engine.dominio import Clipe, IntervaloDeTempo from engine.executar_scanner import serializar_clipe_para_relatorio class TesteDoPontoDeEntradaDoScanner(unittest.TestCase): """Garante que o Scanner possa ser iniciado pelo caminho usado no painel.""" def test_ponto_de_entrada_direto_carrega_o_pacote_engine(self): """Executa o arquivo diretamente sem falhar ao importar ``engine``.""" caminho_do_script = Path(__file__).resolve().parents[1] / "executar_scanner.py" resultado = subprocess.run( [sys.executable, str(caminho_do_script), "--help"], cwd=caminho_do_script.parent.parent, capture_output=True, text=True, check=False, ) self.assertEqual(resultado.returncode, 0, resultado.stderr) self.assertIn("usage:", resultado.stdout) self.assertNotIn("No module named 'engine'", resultado.stderr) def test_ponto_de_entrada_disponibiliza_extracao_de_audio_para_complementos(self): """Garante que o complemento de locutores encontre o extrator de áudio.""" caminho_do_script = Path(__file__).resolve().parents[1] / "executar_scanner.py" resultado = subprocess.run( [ sys.executable, "-c", "import executar_scanner; assert executar_scanner.ExtracaoDeAudio", ], cwd=caminho_do_script.parent, capture_output=True, text=True, check=False, ) self.assertEqual(resultado.returncode, 0, resultado.stderr) def test_relatorio_de_audio_preserva_caminho_e_intervalo_da_origem(self): """Mantém no artefato os dados necessários para aplicar o plano depois.""" clipe = Clipe( identificador="clipe-1", nome="0E6A8829.MP4", intervalo_na_timeline=IntervaloDeTempo(0.0, 100.0), intervalo_na_origem=IntervaloDeTempo(20.0, 120.0), arquivo="/Volumes/Midia/0E6A8829.MP4", ) dados = serializar_clipe_para_relatorio(clipe) self.assertEqual(dados["sourceFile"], "/Volumes/Midia/0E6A8829.MP4") self.assertEqual(dados["inPoint"], 20.0) self.assertEqual(dados["outPoint"], 120.0) if __name__ == "__main__": unittest.main()