"""Testes da leitura estrutural depois da aplicação do plano.""" import unittest from engine.dominio import Clipe, Faixa, IntervaloDeTempo, Timeline from engine.editor.modelos import AcaoDeEdicao, PlanoDeEdicao, TipoDeAcao from engine.editor.verificador_da_aplicacao import VerificadorDaAplicacao class TesteVerificadorDaAplicacao(unittest.TestCase): """Garante que sobras e lacunas na timeline sejam detectadas.""" def _timeline(self, fim_do_ultimo_clipe: float) -> Timeline: """Monta uma timeline simples com vídeo e áudio vinculados por intervalo.""" faixas = [] for tipo in ("video", "audio"): faixas.append(Faixa( f"{tipo}_0", tipo, tipo, 0, [Clipe( f"clipe_{tipo}", "fonte.mp4", IntervaloDeTempo(0.0, fim_do_ultimo_clipe), IntervaloDeTempo(0.0, fim_do_ultimo_clipe), )] )) return Timeline("sequencia", "Sequência", 100.0, faixas=faixas) def test_aprova_cobertura_exata_depois_do_corte(self): """Aprova quando os dois tipos de faixa preservam exatamente o esperado.""" antes = self._timeline(100.0) depois = Timeline("sequencia", "Sequência", 90.0, faixas=[ Faixa("video_0", "video", "video", 0, [ Clipe("v1", "fonte.mp4", IntervaloDeTempo(0, 10), IntervaloDeTempo(0, 10)), Clipe("v2", "fonte.mp4", IntervaloDeTempo(10, 90), IntervaloDeTempo(20, 100)), ]), Faixa("audio_0", "audio", "audio", 0, [ Clipe("a1", "fonte.mp4", IntervaloDeTempo(0, 10), IntervaloDeTempo(0, 10)), Clipe("a2", "fonte.mp4", IntervaloDeTempo(10, 90), IntervaloDeTempo(20, 100)), ]), ]) plano = PlanoDeEdicao("fonte.mp4", ( AcaoDeEdicao(TipoDeAcao.CORTE, 10, 20, "remover trecho"), )) resultado = VerificadorDaAplicacao().verificar(antes, depois, plano) self.assertTrue(resultado.aprovada) self.assertTrue(resultado.avisos) def test_reprova_quando_sobra_um_trecho_na_timeline(self): """Reprova quando o Premiere deixa uma sobra além do plano.""" antes = self._timeline(100.0) depois = Timeline("sequencia", "Sequência", 91.0, faixas=[ Faixa("video_0", "video", "video", 0, [ Clipe("v1", "fonte.mp4", IntervaloDeTempo(0, 10), IntervaloDeTempo(0, 10)), Clipe("v2", "fonte.mp4", IntervaloDeTempo(10, 91), IntervaloDeTempo(20, 101)), ]), Faixa("audio_0", "audio", "audio", 0, [ Clipe("a1", "fonte.mp4", IntervaloDeTempo(0, 10), IntervaloDeTempo(0, 10)), Clipe("a2", "fonte.mp4", IntervaloDeTempo(10, 91), IntervaloDeTempo(20, 101)), ]), ]) plano = PlanoDeEdicao("fonte.mp4", ( AcaoDeEdicao(TipoDeAcao.CORTE, 10, 20, "remover trecho"), )) resultado = VerificadorDaAplicacao().verificar(antes, depois, plano) self.assertFalse(resultado.aprovada) self.assertIn("esperado", resultado.mensagem) if __name__ == "__main__": unittest.main()