"""
Tests for the find_gameobjects tool.
This tool provides paginated GameObject search, returning instance IDs only.
"""
import pytest
from .test_helpers import DummyContext
import services.tools.find_gameobjects as find_go_mod
@pytest.mark.asyncio
async def test_find_gameobjects_basic_search(monkeypatch):
"""Test basic search returns instance IDs."""
captured = {}
async def fake_send(cmd, params, **kwargs):
captured["cmd"] = cmd
captured["params"] = params
return {
"success": True,
"data": {
"instanceIDs": [12345, 67890],
"pageSize": 25,
"cursor": 0,
"totalCount": 2,
"hasMore": False,
},
}
monkeypatch.setattr(
find_go_mod,
"async_send_command_with_retry",
fake_send,
)
resp = await find_go_mod.find_gameobjects(
ctx=DummyContext(),
search_term="Player",
search_method="by_name",
)
assert resp.get("success") is True
assert captured["cmd"] == "find_gameobjects"
assert captured["params"]["searchTerm"] == "Player"
assert captured["params"]["searchMethod"] == "by_name"
@pytest.mark.asyncio
async def test_find_gameobjects_by_component(monkeypatch):
"""Test search by component type."""
captured = {}
async def fake_send(cmd, params, **kwargs):
captured["params"] = params
return {
"success": True,
"data": {
"instanceIDs": [111, 222, 333],
"pageSize": 25,
"cursor": 0,
"totalCount": 3,
"hasMore": False,
},
}
monkeypatch.setattr(
find_go_mod,
"async_send_command_with_retry",
fake_send,
)
resp = await find_go_mod.find_gameobjects(
ctx=DummyContext(),
search_term="Camera",
search_method="by_component",
)
assert resp.get("success") is True
assert captured["params"]["searchTerm"] == "Camera"
assert captured["params"]["searchMethod"] == "by_component"
@pytest.mark.asyncio
async def test_find_gameobjects_pagination_params(monkeypatch):
"""Test pagination parameters are passed correctly."""
captured = {}
async def fake_send(cmd, params, **kwargs):
captured["params"] = params
return {
"success": True,
"data": {
"instanceIDs": [444, 555],
"pageSize": 10,
"cursor": 20,
"totalCount": 50,
"hasMore": True,
"nextCursor": "30",
},
}
monkeypatch.setattr(
find_go_mod,
"async_send_command_with_retry",
fake_send,
)
resp = await find_go_mod.find_gameobjects(
ctx=DummyContext(),
search_term="Enemy",
search_method="by_tag",
page_size="10",
cursor="20",
)
assert resp.get("success") is True
p = captured["params"]
assert p["pageSize"] == 10
assert p["cursor"] == 20
@pytest.mark.asyncio
async def test_find_gameobjects_boolean_coercion(monkeypatch):
"""Test boolean string coercion for include_inactive."""
captured = {}
async def fake_send(cmd, params, **kwargs):
captured["params"] = params
return {"success": True, "data": {"instanceIDs": []}}
monkeypatch.setattr(
find_go_mod,
"async_send_command_with_retry",
fake_send,
)
resp = await find_go_mod.find_gameobjects(
ctx=DummyContext(),
search_term="HiddenObject",
search_method="by_name",
include_inactive="true",
)
assert resp.get("success") is True
p = captured["params"]
assert p["includeInactive"] is True
@pytest.mark.asyncio
async def test_find_gameobjects_by_layer(monkeypatch):
"""Test search by layer."""
captured = {}
async def fake_send(cmd, params, **kwargs):
captured["params"] = params
return {"success": True, "data": {"instanceIDs": [999]}}
monkeypatch.setattr(
find_go_mod,
"async_send_command_with_retry",
fake_send,
)
resp = await find_go_mod.find_gameobjects(
ctx=DummyContext(),
search_term="UI",
search_method="by_layer",
)
assert resp.get("success") is True
assert captured["params"]["searchMethod"] == "by_layer"
assert captured["params"]["searchTerm"] == "UI"
@pytest.mark.asyncio
async def test_find_gameobjects_by_path(monkeypatch):
"""Test search by hierarchy path."""
captured = {}
async def fake_send(cmd, params, **kwargs):
captured["params"] = params
return {"success": True, "data": {"instanceIDs": [777]}}
monkeypatch.setattr(
find_go_mod,
"async_send_command_with_retry",
fake_send,
)
resp = await find_go_mod.find_gameobjects(
ctx=DummyContext(),
search_term="Canvas/Panel/Button",
search_method="by_path",
)
assert resp.get("success") is True
assert captured["params"]["searchMethod"] == "by_path"
assert captured["params"]["searchTerm"] == "Canvas/Panel/Button"