test(registry): cover mixed terminal toolset doctor false negative

Regression for #54820: a desktop-only helper with a failing check_fn must
not mark the whole terminal toolset unavailable when terminal/process
still pass their per-tool gates.
This commit is contained in:
xxxigm 2026-06-29 17:32:33 +07:00 committed by kshitij
parent 6e84257717
commit efebe451db

View file

@ -544,3 +544,58 @@ class TestThreadSafety:
toolsets = result_holder["value"]
assert "gated" in toolsets
assert toolsets["gated"]["available"] is True
class TestToolsetAvailabilityAggregation:
def test_mixed_toolset_available_when_general_tool_passes(self):
"""Desktop-only helpers must not hide general-purpose tools from doctor."""
reg = ToolRegistry()
reg.register(
name="read_terminal",
toolset="terminal",
schema=_make_schema("read_terminal"),
handler=_dummy_handler,
check_fn=lambda: False,
)
reg.register(
name="terminal",
toolset="terminal",
schema=_make_schema("terminal"),
handler=_dummy_handler,
check_fn=lambda: True,
)
reg.register(
name="process",
toolset="terminal",
schema=_make_schema("process"),
handler=_dummy_handler,
)
available, unavailable = reg.check_tool_availability()
assert "terminal" in available
assert unavailable == []
assert reg.is_toolset_available("terminal")
assert reg.get_available_toolsets()["terminal"]["available"] is True
def test_mixed_toolset_unavailable_when_every_tool_is_gated(self):
reg = ToolRegistry()
reg.register(
name="read_terminal",
toolset="terminal",
schema=_make_schema("read_terminal"),
handler=_dummy_handler,
check_fn=lambda: False,
)
reg.register(
name="terminal",
toolset="terminal",
schema=_make_schema("terminal"),
handler=_dummy_handler,
check_fn=lambda: False,
)
available, unavailable = reg.check_tool_availability()
assert "terminal" not in available
assert any(item["name"] == "terminal" for item in unavailable)