77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
|
|
import mcp_server.server as server
|
|
|
|
|
|
def test_normalize_progress_body_prefers_workplan_id_only() -> None:
|
|
body = server._normalize_progress_body({
|
|
"workplan_id": "wp-1",
|
|
"workstream_id": "wp-1",
|
|
"event_type": "note",
|
|
"summary": "test",
|
|
})
|
|
assert body == {
|
|
"workplan_id": "wp-1",
|
|
"event_type": "note",
|
|
"summary": "test",
|
|
}
|
|
|
|
legacy_only = server._normalize_progress_body({
|
|
"workstream_id": "wp-legacy",
|
|
"event_type": "note",
|
|
"summary": "legacy",
|
|
})
|
|
assert legacy_only["workplan_id"] == "wp-legacy"
|
|
assert "workstream_id" not in legacy_only
|
|
|
|
|
|
def _fake_get(path: str, params: dict | None = None):
|
|
if path == "/topics":
|
|
return [{"id": "topic-1", "domain_slug": "infotech", "title": "Infotech"}]
|
|
if path == "/state/summary":
|
|
return {
|
|
"open_workplans": [
|
|
{
|
|
"id": "wp-1",
|
|
"topic_id": "topic-1",
|
|
"title": "Goalless",
|
|
"repo_id": "repo-1",
|
|
}
|
|
]
|
|
}
|
|
if path == "/decisions":
|
|
return []
|
|
if path == "/progress":
|
|
return []
|
|
if path == "/repos":
|
|
return [{"id": "repo-1", "slug": "demo-repo", "domain_slug": "infotech"}]
|
|
if path == "/repo-goals":
|
|
return [{
|
|
"id": "goal-1",
|
|
"repo_id": "repo-1",
|
|
"repo_slug": "demo-repo",
|
|
"title": "Ship it",
|
|
"description": "d",
|
|
"priority": "high",
|
|
}]
|
|
if path == "/capability-catalog/":
|
|
return []
|
|
return []
|
|
|
|
|
|
def test_get_domain_summary_goal_guidance_is_workplan_first(monkeypatch) -> None:
|
|
calls = []
|
|
monkeypatch.setattr(
|
|
server,
|
|
"_get",
|
|
lambda path, params=None: calls.append((path, params)) or _fake_get(path, params),
|
|
)
|
|
payload = json.loads(server.get_domain_summary("infotech"))
|
|
assert "workplans" in payload
|
|
assert payload["workstreams"] == payload["workplans"]
|
|
action = payload["goal_guidance"]["needs_workplan"][0]["action"]
|
|
assert "workplan" in action.lower()
|
|
assert "workstream is linked" not in action.lower()
|
|
assert [path for path, _ in calls].count("/repo-goals") == 1
|