测试(AGC模型): 补齐裸目录响应兼容用例

- 新增 legacy_raw_catalog_payload_defaults_optional_fields:覆盖无 ok 信封、缺少 agentMode/protocol/unavailableModels 的旧裸目录响应
- 断言缺省按 Codex + OpenAI Responses + 空不可用桶兜底,锁定既有兼容行为
This commit is contained in:
2026-10-05 17:28:38 +08:00
parent bc3e36ff33
commit cebffb9dad
@@ -290,6 +290,32 @@ mod tests {
);
}
#[test]
fn legacy_raw_catalog_payload_defaults_optional_fields() {
// 旧 dev 代理 / 本地 fixture 直接返回裸目录(没有 `ok` 信封),且缺少
// `agentMode` / `protocol` / `unavailableModels`:必须仍能解析,并按 Codex +
// OpenAI Responses + 空不可用桶兼容。
let body = serde_json::json!({
"defaultModelId": "quality",
"models": [{ "id": "quality", "displayName": "高质量" }],
"revision": 9
})
.to_string();
let catalog = parse_catalog_payload(body.as_bytes()).expect("raw catalog should parse");
assert_eq!(catalog.default_model_id, "quality");
assert_eq!(catalog.revision, 9);
assert!(catalog.unavailable_models.is_empty());
assert_eq!(
catalog.models[0].agent_mode,
shared_contracts::llm::AgcAgentMode::Codex
);
assert_eq!(
catalog.models[0].protocol,
shared_contracts::llm::AgcModelProtocol::OpenAiResponses
);
}
#[tokio::test]
async fn official_catalog_fails_closed_on_http_error_without_accepting_error_as_data() {
let listener = TcpListener::bind("127.0.0.1:0").expect("bind fixture");