sdlc-hub/tests/test_baseline.py
Andrey Epifancev 43c43ade81 Миграция v7: токены и статус по агентам модулей (#91)
tokens -> {client, agents: {модуль: токен}}, agent_status по агентам
(ключ agent, last_call_at), настройки агента и маршруты agent-scope по
модулю токена, min_agent_version переехал в модуль jira.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 00:45:44 +04:00

46 lines
1.8 KiB
Python

"""Эталоны внешнего поведения (golden): MCP-инструменты, маршруты API, настройки, схема базы.
Перестройка на модули обязана их сохранить. Запись эталонов: BASELINE_WRITE=1 uv run pytest tests/test_baseline.py."""
import asyncio
import json
import os
from pathlib import Path
from jira_hub.core import api, db, settings
from jira_hub.modules.jira import mcp as jira_mcp
FIXTURES = Path(__file__).parent / "fixtures" / "baseline"
def _check(name, snapshot):
path = FIXTURES / f"{name}.expected.json"
text = json.dumps(snapshot, ensure_ascii=False, indent=2, sort_keys=True) + "\n"
if os.environ.get("BASELINE_WRITE") == "1":
FIXTURES.mkdir(parents=True, exist_ok=True)
path.write_text(text, encoding="utf-8")
assert path.read_text(encoding="utf-8") == text
def test_mcp_tools():
tools = asyncio.run(jira_mcp.mcp.list_tools())
_check("mcp_tools", [{"name": t.name, "description": t.description, "inputSchema": t.inputSchema}
for t in tools])
def test_routes():
rows = [[method, pattern, scope, fn.__name__] for method, pattern, fn, scope in api.ROUTES]
_check("routes", sorted(rows, key=lambda r: (r[1], r[0])))
def test_settings():
_check("settings", {"defaults": settings.defaults(), "agent_keys": settings.agent_keys("jira"),
"protected": sorted(settings.PROTECTED)})
def test_schema(tmp_path):
conn = db.connect(tmp_path / "hub.sqlite")
rows = conn.execute("SELECT type, name, sql FROM sqlite_master WHERE name NOT LIKE 'sqlite_%' "
"ORDER BY type, name").fetchall()
version = db._schema_version(conn)
conn.close()
_check("schema", {"schema_version": version, "objects": [[r[0], r[1], r[2]] for r in rows]})