"""Parallel model 参数支持测试。
需求:
- parallel 模式下 model 支持 str 或 list[str]
"""
from __future__ import annotations
import pytest
from cli_agent_mcp.handlers.parallel import ParallelHandler
from cli_agent_mcp.tool_schema import create_tool_schema
def test_parallel_schema_model_supports_str_or_list() -> None:
schema = create_tool_schema("codex", is_parallel=True)
model_prop = schema["properties"]["model"]
assert model_prop["type"] == ["string", "array"]
assert model_prop["items"] == {"type": "string"}
@pytest.mark.parametrize(
"model_value",
[
"claude-3-opus",
["claude-3-opus"],
["claude-3-opus", "claude-3-sonnet"],
],
)
def test_parallel_handler_accepts_str_or_list_model(model_value) -> None:
handler = ParallelHandler("codex")
args = {
"parallel_prompts": ["p1", "p2"],
"parallel_task_notes": ["n1", "n2"],
"handoff_file": ".agent-handoff/out.md",
"model": model_value,
}
assert handler.validate(args) is None
def test_parallel_handler_rejects_mismatched_model_list_length() -> None:
handler = ParallelHandler("codex")
args = {
"parallel_prompts": ["p1", "p2", "p3"],
"parallel_task_notes": ["n1", "n2", "n3"],
"handoff_file": ".agent-handoff/out.md",
"model": ["m1", "m2"],
}
assert "model array length" in (handler.validate(args) or "")
@pytest.mark.parametrize("model_value", [123, {"model": "x"}, [1, 2]])
def test_parallel_handler_rejects_invalid_model_types(model_value) -> None:
handler = ParallelHandler("codex")
args = {
"parallel_prompts": ["p1"],
"parallel_task_notes": ["n1"],
"handoff_file": ".agent-handoff/out.md",
"model": model_value,
}
assert handler.validate(args) is not None