Hy3 / tests /test_tools.py
ericsqin's picture
add hy3
ad51766
Raw
History Blame Contribute Delete
2.1 kB
"""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": {}}, # missing name
{"name": "good", "parameters": {}}, # ok
"string-not-object", # not a dict
]
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"