chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
"""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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user