| """Unit tests for tools.parse_functions_json / build_tools_list.""" |
|
|
| import json |
|
|
| from tools import build_tools_list, parse_functions_json |
|
|
|
|
| def test_parse_empty_inputs(): |
| assert parse_functions_json(None) == [] |
| assert parse_functions_json("") == [] |
| assert parse_functions_json(" ") == [] |
|
|
|
|
| def test_parse_invalid_json(): |
| assert parse_functions_json("not json") == [] |
|
|
|
|
| def test_parse_dict_normalized_to_list(): |
| payload = {"name": "ping", "parameters": {"type": "object"}} |
| result = parse_functions_json(json.dumps(payload)) |
| assert len(result) == 1 |
| assert result[0]["name"] == "ping" |
|
|
|
|
| def test_parse_typed_function_format(): |
| payload = [{ |
| "type": "function", |
| "function": { |
| "name": "get_weather", |
| "description": "weather", |
| "parameters": {"type": "object", "properties": {}}, |
| }, |
| }] |
| result = parse_functions_json(json.dumps(payload)) |
| assert result == [payload[0]["function"]] |
|
|
|
|
| def test_parse_skips_invalid_entries(): |
| payload = [ |
| {"type": "function", "function": {}}, |
| {"name": "good", "parameters": {}}, |
| "string-not-object", |
| ] |
| result = parse_functions_json(json.dumps(payload)) |
| assert [fn["name"] for fn in result] == ["good"] |
|
|
|
|
| def test_build_tools_list_returns_none_when_empty(): |
| assert build_tools_list("") is None |
| assert build_tools_list("[]") is None |
|
|
|
|
| def test_build_tools_list_wraps_in_function_envelope(): |
| payload = [{"name": "ping", "parameters": {"type": "object"}}] |
| tools = build_tools_list(json.dumps(payload)) |
| assert tools is not None |
| assert tools[0]["type"] == "function" |
| assert tools[0]["function"]["name"] == "ping" |
|
|
|
|
| def test_build_tools_list_parses_string_parameters(): |
| payload = [{ |
| "name": "ping", |
| "parameters": json.dumps({"type": "object", "properties": {}}), |
| }] |
| tools = build_tools_list(json.dumps(payload)) |
| assert tools is not None |
| assert tools[0]["function"]["parameters"]["type"] == "object" |
|
|