"""Tests for the MCP server tool functions.""" from __future__ import annotations from wikikb import config, scraper, search, server def test_wiki_search_maps_results(monkeypatch) -> None: monkeypatch.setattr( server, "search", lambda _q, k, variant: [search.Result("T", "u", "mediawiki", "kcd2", "S", "body", 1.0)], ) assert server.wiki_search("q", k=3) == [ { "title": "T", "source": "mediawiki", "variant": "kcd2", "section": "S", "url": "u", "text": "body", } ] def test_wiki_get_page_from_manifest(tmp_kb) -> None: (config.CORPUS_DIR / "Army.md").write_text("PAGE BODY", encoding="utf-8") scraper.save_manifest({"Army": {"filename": "Army.md"}}) assert "PAGE BODY" in server.wiki_get_page("Army") def test_wiki_get_page_sanitize_fallback(tmp_kb) -> None: (config.CORPUS_DIR / "Foo_Bar.md").write_text("FB", encoding="utf-8") assert "FB" in server.wiki_get_page("Foo Bar") # no manifest entry -> sanitized name def test_wiki_get_page_missing(tmp_kb) -> None: assert "No mirrored page" in server.wiki_get_page("Nope") def test_wiki_list_pages(tmp_kb) -> None: scraper.save_manifest({"Army": {}, "Archery": {}, "Barony": {}}) assert server.wiki_list_pages() == ["Archery", "Army", "Barony"] assert server.wiki_list_pages(prefix="ar") == ["Archery", "Army"] assert server.wiki_list_pages(limit=1) == ["Archery"] class _FakeServer: def __init__(self) -> None: self.registered: list[str] = [] def tool(self): def decorator(fn): self.registered.append(fn.__name__) return fn return decorator def test_build_server_registers_tools() -> None: fake = _FakeServer() assert server.build_server(fake) is fake assert fake.registered == ["wiki_search", "wiki_get_page", "wiki_list_pages"]