CCAI-Demo / backend /tests /test_json_calls.py
NeonClary
Build CCAI Vibe Demo on top of LLMChats3 baseline
0bb4dfa
Raw
History Blame Contribute Delete
1.32 kB
from app.services.json_calls import parse_json_response
def test_plain_json_object():
assert parse_json_response('{"a": 1}') == {"a": 1}
def test_plain_json_array():
assert parse_json_response('[1, 2, 3]') == [1, 2, 3]
def test_markdown_fence():
raw = "```json\n{\"a\": 1}\n```"
assert parse_json_response(raw) == {"a": 1}
def test_markdown_fence_no_lang():
raw = "```\n{\"a\": 1}\n```"
assert parse_json_response(raw) == {"a": 1}
def test_prose_then_json():
raw = "Sure, here's the result:\n\n{\"a\": 1, \"b\": [2,3]}"
assert parse_json_response(raw) == {"a": 1, "b": [2, 3]}
def test_json_then_prose():
raw = "{\"a\": 1}\nThe end."
assert parse_json_response(raw) == {"a": 1}
def test_nested_braces_ok():
raw = "Look:\n{\"outer\": {\"inner\": [1, {\"k\": \"v\"}]}}"
assert parse_json_response(raw) == {"outer": {"inner": [1, {"k": "v"}]}}
def test_string_with_braces_doesnt_confuse_balancer():
raw = '{"text": "this has } and { in it", "ok": true}'
assert parse_json_response(raw) == {"text": "this has } and { in it", "ok": True}
def test_unparseable_returns_none():
assert parse_json_response("not json at all") is None
def test_empty_returns_none():
assert parse_json_response("") is None
assert parse_json_response(None) is None