File size: 1,323 Bytes
0bb4dfa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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