Files
hive/tools/tests/test_shell_tools_search.py
T
2026-04-30 19:51:44 -07:00

59 lines
1.8 KiB
Python

"""shell_rg + shell_find — basic functionality, structured output."""
from __future__ import annotations
import shutil
import pytest
@pytest.fixture
def search_tools(mcp):
from shell_tools.search.tools import register_search_tools
register_search_tools(mcp)
return {
"rg": mcp._tool_manager._tools["shell_rg"].fn,
"find": mcp._tool_manager._tools["shell_find"].fn,
}
@pytest.mark.skipif(not shutil.which("rg"), reason="ripgrep not installed")
def test_rg_finds_pattern(search_tools, tmp_path):
(tmp_path / "a.txt").write_text("hello\nworld\nfoo\n")
(tmp_path / "b.txt").write_text("bar\nworld\n")
result = search_tools["rg"](pattern="world", path=str(tmp_path))
assert result["total"] >= 2
paths = {m["path"] for m in result["matches"]}
assert any("a.txt" in p for p in paths)
@pytest.mark.skipif(not shutil.which("rg"), reason="ripgrep not installed")
def test_rg_no_matches(search_tools, tmp_path):
(tmp_path / "a.txt").write_text("hello\n")
result = search_tools["rg"](pattern="zzz_no_match_zzz", path=str(tmp_path))
assert result["total"] == 0
assert result["matches"] == []
def test_find_by_name(search_tools, tmp_path):
(tmp_path / "alpha.log").write_text("a")
(tmp_path / "beta.log").write_text("b")
(tmp_path / "ignore.txt").write_text("c")
result = search_tools["find"](path=str(tmp_path), name="*.log")
assert result["count"] == 2
assert all(p.endswith(".log") for p in result["paths"])
def test_find_by_type_dir(search_tools, tmp_path):
(tmp_path / "sub").mkdir()
(tmp_path / "file.txt").write_text("x")
result = search_tools["find"](path=str(tmp_path), type_filter="d")
paths = result["paths"]
# tmp_path itself + sub
assert any(p.endswith("sub") for p in paths)
assert not any(p.endswith("file.txt") for p in paths)