backend/tests/test_cli_sync.py
Rama master · réplica de lectura del repositorio original.
from unittest.mock import MagicMock
from click.testing import CliRunner
from cli.commands.sync import sync
class TestSyncCommand:
def test_sync_success(self, tmp_path):
sub = tmp_path / "ep.ass"
sub.write_text("[Script Info]\n")
vid = tmp_path / "ep.mkv"
vid.write_bytes(b"\x1a\x45\xdf\xa3")
client = MagicMock()
client.post.return_value = {"status": "done", "shift_ms": 420}
result = CliRunner().invoke(
sync, ["--subtitle", str(sub), "--video", str(vid)], obj={"client": client}
)
assert result.exit_code == 0
client.post.assert_called_once_with(
"/tools/auto-sync",
json={"file_path": str(sub), "video_path": str(vid), "engine": "ffsubsync"},
)
assert "done" in result.output
def test_alass_engine(self, tmp_path):
sub = tmp_path / "ep.ass"
sub.write_text("[Script Info]\n")
vid = tmp_path / "ep.mkv"
vid.write_bytes(b"\x00")
client = MagicMock()
client.post.return_value = {"status": "done"}
CliRunner().invoke(
sync,
["--subtitle", str(sub), "--video", str(vid), "--engine", "alass"],
obj={"client": client},
)
assert client.post.call_args.kwargs["json"]["engine"] == "alass"
def test_missing_subtitle_exits(self, tmp_path):
vid = tmp_path / "ep.mkv"
vid.write_bytes(b"\x00")
result = CliRunner().invoke(
sync,
["--subtitle", "/nope.ass", "--video", str(vid)],
obj={"client": MagicMock()},
)
assert result.exit_code != 0
def test_api_error(self, tmp_path):
from cli.client import SublarrAPIError
sub = tmp_path / "ep.ass"
sub.write_text("[Script Info]\n")
vid = tmp_path / "ep.mkv"
vid.write_bytes(b"\x00")
client = MagicMock()
client.post.side_effect = SublarrAPIError("Engine not installed")
result = CliRunner().invoke(
sync, ["--subtitle", str(sub), "--video", str(vid)], obj={"client": client}
)
assert result.exit_code == 1
assert "Error" in result.output