feat: Alinhado o aplicador Python de plano de edição (aplicador_de
- Alinhado o aplicador Python de plano de edição (aplicador_de_plano_de_edicao.py) com o script apply-editorial-actions.mjs de referência: no-op de split restrito aos padrões reais do bridge, pausa entre chamadas ao MCP, tolerância de borda de corte usa a posição real em vez de rejeitar desvio; adicionado backup automático da sequência (duplicate_sequence) e documentado o comando python code/engine/aplicar_plano_de_edicao.py como via alternativa ao painel CEP. Resumo: - 18 arquivos alterados - 5 novos - 13 modificados - 0 removidos 13 files changed, 704 insertions(+), 133 deletions(-) Arquivos: - .jhonny/analises.db - CLAUDE.md - code/engine/aplicar_plano_de_edicao.py - code/engine/editor/__init__.py - code/engine/editor/aplicador_de_plano_de_edicao.py - code/engine/editor/escrita/escrita_no_editor.py - code/engine/integracoes/premiere/__init__.py - code/engine/integracoes/premiere/cliente_mcp.py - code/engine/testes/duplos_de_premiere.py - code/engine/testes/test_aplicador_de_plano_de_edicao.py - code/scripts/apply-editorial-actions.mjs - code/src/tools/discovery.ts - code/src/tools/timeline.ts - code/engine/editor/backup_de_sequencia.py - code/engine/integracoes/premiere/cliente_mcp_com_pausa.py - code/engine/testes/test_backup_de_sequencia.py - code/engine/testes/test_cliente_mcp_com_pausa.py - code/engine/testes/test_escrita_no_editor.py
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
"""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()
|
||||
Reference in New Issue
Block a user