Files
2026-07-13 12:49:17 +08:00

98 lines
3.5 KiB
Python

"""Tests for manage_editor tool."""
import asyncio
import inspect
from types import SimpleNamespace
from unittest.mock import AsyncMock
import pytest
from services.tools.manage_editor import manage_editor
import services.tools.manage_editor as manage_editor_mod
from services.registry import get_registered_tools
# ── Fixture ──────────────────────────────────────────────────────────
@pytest.fixture
def mock_unity(monkeypatch):
captured: dict[str, object] = {}
async def fake_send(send_fn, unity_instance, tool_name, params):
captured["unity_instance"] = unity_instance
captured["tool_name"] = tool_name
captured["params"] = params
return {"success": True, "message": "ok"}
monkeypatch.setattr(
"services.tools.manage_editor.get_unity_instance_from_context",
AsyncMock(return_value="unity-instance-1"),
)
monkeypatch.setattr(
"services.tools.manage_editor.send_with_unity_instance",
fake_send,
)
return captured
# ── Undo/Redo ────────────────────────────────────────────────────────
def test_undo_forwards_to_unity(mock_unity):
result = asyncio.run(manage_editor(SimpleNamespace(), action="undo"))
assert result["success"] is True
assert mock_unity["params"]["action"] == "undo"
assert mock_unity["tool_name"] == "manage_editor"
def test_redo_forwards_to_unity(mock_unity):
result = asyncio.run(manage_editor(SimpleNamespace(), action="redo"))
assert result["success"] is True
assert mock_unity["params"]["action"] == "redo"
# ── All Unity-forwarded actions ──────────────────────────────────────
UNITY_FORWARDED_ACTIONS = [
"play", "pause", "stop", "set_active_tool",
"add_tag", "remove_tag", "add_layer", "remove_layer",
"deploy_package", "restore_package",
"undo", "redo",
]
@pytest.mark.parametrize("action_name", UNITY_FORWARDED_ACTIONS)
def test_every_action_forwards_to_unity(mock_unity, action_name):
result = asyncio.run(manage_editor(SimpleNamespace(), action=action_name))
assert result["success"] is True
assert mock_unity["params"]["action"] == action_name
# ── Python-only actions ──────────────────────────────────────────────
def test_telemetry_status_handled_python_side(mock_unity):
result = asyncio.run(manage_editor(SimpleNamespace(), action="telemetry_status"))
assert result["success"] is True
assert "telemetry_enabled" in result
assert "params" not in mock_unity
def test_telemetry_ping_handled_python_side(mock_unity):
result = asyncio.run(manage_editor(SimpleNamespace(), action="telemetry_ping"))
assert result["success"] is True
assert "params" not in mock_unity
# ── None params omitted ─────────────────────────────────────────────
def test_undo_omits_none_params(mock_unity):
result = asyncio.run(manage_editor(SimpleNamespace(), action="undo"))
assert result["success"] is True
params = mock_unity["params"]
assert "toolName" not in params
assert "tagName" not in params
assert "layerName" not in params