"""Tests for Chinese validation error translation.""" import pytest from server.api.schemas import SettingUpdatePayload from server.utils.validation_errors_zh import ( translate_loc_zh, translate_validation_msg, translate_validation_errors, ) def test_translate_exact_string_type(): assert translate_validation_msg("Input should be a valid string") == "必须是字符串" def test_translate_missing_type(): assert translate_validation_msg("", "missing") == "必填" def test_translate_min_length_pattern(): msg = "String should have at least 1 character" assert translate_validation_msg(msg) == "至少需要 1 个字符" def test_translate_validation_errors_list(): errors = [{"type": "string_type", "loc": ["body", "value"], "msg": "Input should be a valid string", "input": 1}] out = translate_validation_errors(errors) assert out[0]["msg"] == "必须是字符串" assert out[0]["loc"] == ["body", "value"] assert out[0]["loc_zh"] == "值" def test_translate_loc_zh_query_per_page(): assert translate_loc_zh(["query", "per_page"]) == "每页条数" def test_translate_per_page_le_via_ctx(): out = translate_validation_errors([ { "type": "less_than_equal", "loc": ["query", "per_page"], "msg": "Input should be less than or equal to 200", "ctx": {"le": 200}, }, ]) assert out[0]["msg"] == "不能大于 200" assert out[0]["loc_zh"] == "每页条数" def test_setting_update_payload_coerces_int(): payload = SettingUpdatePayload.model_validate({"value": 160}) assert payload.value == "160" def test_translate_list_too_long_ctx(): msg = translate_validation_msg( "List should have at most 50 items after validation, not 101", "too_long", {"field_type": "List", "max_length": 50, "actual_length": 101}, ) assert msg == "最多 50 项,当前 101 项" def test_translate_strips_non_json_ctx(): """Pydantic value_error ctx may contain Exception objects — must not leak into JSON.""" out = translate_validation_errors([ { "type": "value_error", "loc": ("body",), "msg": "Value error, query 或 history 至少提供一个", "input": {"query": None}, "ctx": {"error": ValueError("query 或 history 至少提供一个")}, }, ]) assert "ctx" not in out[0] assert out[0]["msg"] == "query 或 history 至少提供一个" def test_batch_agent_accepts_101_ids(): from server.api.schemas import BatchAgentAction payload = BatchAgentAction.model_validate({"server_ids": list(range(1, 102))}) assert len(payload.server_ids) == 101