cai/tests/continuous_ops/test_model_parse_json_extra...

39 lines
1.3 KiB
Python

"""Regression: mission planner responses are often markdown-fenced JSON."""
from __future__ import annotations
from cai.continuous_ops.model_parse import _extract_json_object, _strip_markdown_json_fence
def test_strip_markdown_json_fence() -> None:
raw = '```json\n{"tasks": ["a"], "tasks_markdown": "- a"}\n```'
assert '"tasks"' in _strip_markdown_json_fence(raw)
def test_extract_json_plain() -> None:
assert _extract_json_object('{"tick_seconds": 30, "tasks": ["x"]}') == {
"tick_seconds": 30,
"tasks": ["x"],
}
def test_extract_json_fenced() -> None:
body = '```json\n{\n "tasks": ["check disk", "check load"],\n "tasks_markdown": "- a\\n- b"\n}\n```'
data = _extract_json_object(body)
assert data is not None
assert data["tasks"] == ["check disk", "check load"]
def test_extract_json_preamble() -> None:
body = 'Here is the plan:\n```json\n{"tasks": ["t1"], "tasks_markdown": "- t1"}\n```\nHope this helps.'
data = _extract_json_object(body)
assert data is not None
assert data["tasks"] == ["t1"]
def test_extract_json_trailing_after_brace() -> None:
body = '{"tasks": ["only"]}\n\n(Some notes)'
data = _extract_json_object(body)
assert data is not None
assert data["tasks"] == ["only"]