2026-03-02 22:08:39 +08:00
|
|
|
|
import pytest
|
|
|
|
|
|
|
|
|
|
|
|
import src.core.api_format.metadata as metadata
|
|
|
|
|
|
from src.core.api_format.enums import ApiFamily, EndpointKind
|
|
|
|
|
|
from src.core.api_format.metadata import EndpointDefinition, get_default_body_rules_for_endpoint
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_get_default_body_rules_for_endpoint_returns_empty_for_invalid() -> None:
|
|
|
|
|
|
assert get_default_body_rules_for_endpoint("not-a-valid-signature") == []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_get_default_body_rules_for_endpoint_returns_empty_for_no_rules() -> None:
|
|
|
|
|
|
"""claude:chat 没有配置 default_body_rules,应返回空列表。"""
|
|
|
|
|
|
assert get_default_body_rules_for_endpoint("claude:chat") == []
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-03-06 15:40:11 +08:00
|
|
|
|
def test_get_default_body_rules_for_endpoint_returns_codex_cli_rules_only() -> None:
|
|
|
|
|
|
"""只有 codex + openai:cli 返回默认请求体规则。"""
|
|
|
|
|
|
cli_rules = get_default_body_rules_for_endpoint("openai:cli", provider_type="codex")
|
2026-03-02 22:08:39 +08:00
|
|
|
|
assert len(cli_rules) == 5
|
|
|
|
|
|
actions = [r["action"] for r in cli_rules]
|
|
|
|
|
|
assert actions == ["drop", "drop", "drop", "set", "set"]
|
|
|
|
|
|
assert cli_rules[0]["path"] == "max_output_tokens"
|
|
|
|
|
|
assert cli_rules[1]["path"] == "temperature"
|
|
|
|
|
|
assert cli_rules[2]["path"] == "top_p"
|
|
|
|
|
|
assert cli_rules[3] == {"action": "set", "path": "store", "value": False}
|
|
|
|
|
|
assert cli_rules[4]["path"] == "instructions"
|
|
|
|
|
|
assert cli_rules[4]["condition"]["op"] == "not_exists"
|
|
|
|
|
|
|
2026-03-10 10:40:50 +08:00
|
|
|
|
# openai:compact also has the same default body rules (defined in EndpointDefinition)
|
2026-03-06 15:40:11 +08:00
|
|
|
|
compact_rules = get_default_body_rules_for_endpoint("openai:compact", provider_type="codex")
|
2026-03-10 10:40:50 +08:00
|
|
|
|
assert len(compact_rules) == 5
|
2026-03-02 22:08:39 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_get_default_body_rules_for_endpoint_returns_deep_copy(
|
|
|
|
|
|
monkeypatch: pytest.MonkeyPatch,
|
|
|
|
|
|
) -> None:
|
|
|
|
|
|
definition = EndpointDefinition(
|
|
|
|
|
|
api_family=ApiFamily.OPENAI,
|
|
|
|
|
|
endpoint_kind=EndpointKind.CLI,
|
|
|
|
|
|
default_body_rules=(
|
|
|
|
|
|
{
|
|
|
|
|
|
"action": "set",
|
|
|
|
|
|
"path": "metadata",
|
|
|
|
|
|
"value": {"source": "default"},
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
monkeypatch.setattr(metadata, "resolve_endpoint_definition", lambda _value: definition)
|
|
|
|
|
|
|
|
|
|
|
|
rules = get_default_body_rules_for_endpoint("openai:cli")
|
|
|
|
|
|
assert rules == [
|
|
|
|
|
|
{
|
|
|
|
|
|
"action": "set",
|
|
|
|
|
|
"path": "metadata",
|
|
|
|
|
|
"value": {"source": "default"},
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
rules[0]["value"]["source"] = "changed"
|
|
|
|
|
|
assert definition.default_body_rules[0]["value"]["source"] == "default"
|