"""Testes do backup automático da sequência antes de aplicar um plano.""" import unittest from typing import Any from engine.editor.backup_de_sequencia import BackupDaSequencia from engine.integracoes.premiere.cliente_mcp import ClienteMCP from engine.integracoes.premiere.erros_mcp import ErroDeFerramentaMCP class _ClienteQueRegistra(ClienteMCP): """Dublê que registra as chamadas e devolve sucesso ou o erro configurado.""" def __init__(self, erro_a_levantar: Exception | None = None) -> None: self.chamadas: list[tuple[str, dict[str, Any]]] = [] self.erro_a_levantar = erro_a_levantar def conectar(self) -> None: """Não há conexão real neste dublê.""" def desconectar(self) -> None: """Não há conexão real neste dublê.""" def esta_conectado(self) -> bool: """Sempre conectado neste dublê.""" return True def chamar(self, nome_da_ferramenta: str, argumentos: dict[str, Any] | None = None) -> dict[str, Any]: self.chamadas.append((nome_da_ferramenta, argumentos or {})) if self.erro_a_levantar is not None: raise self.erro_a_levantar return {"success": True} class TesteBackupDaSequencia(unittest.TestCase): def test_duplica_a_sequencia_pelo_identificador(self): cliente = _ClienteQueRegistra() backup = BackupDaSequencia(cliente) conseguiu = backup.criar_backup("sequencia_falsa") self.assertTrue(conseguiu) self.assertEqual(cliente.chamadas, [("duplicate_sequence", {"sequence_id": "sequencia_falsa"})]) def test_falha_no_backup_nao_levanta_excecao(self): # Espelha o painel CEP: se o backup falhar, aplica o plano mesmo # assim (loga e avisa, não bloqueia) — quem chama decide o que # fazer com o retorno False, não uma exceção não tratada. cliente = _ClienteQueRegistra(erro_a_levantar=ErroDeFerramentaMCP("recusado")) backup = BackupDaSequencia(cliente) conseguiu = backup.criar_backup("sequencia_falsa") self.assertFalse(conseguiu) if __name__ == "__main__": unittest.main()