use crate::config::ProviderConfigs;
use crate::config::xiaomi_provider_defaults;
#[test]
fn missing_xiaomi_section_deserializes_to_canonical_defaults() {
let cfgs: ProviderConfigs = toml::from_str("").expect("empty providers should parse");
let xiaomi = cfgs.xiaomi.expect("xiaomi must default to Some, not None");
assert!(xiaomi.enabled, "the default section is enabled");
assert_eq!(xiaomi.default_model.as_deref(), Some("mimo-v2.5-pro"));
assert!(
xiaomi.api_key.is_none(),
"defaults carry no key — the user supplies one from platform.xiaomimimo.com"
);
assert!(
xiaomi.base_url.is_none(),
"base_url stays None so the factory uses the default xiaomimimo endpoint"
);
assert_eq!(xiaomi.models, xiaomi_provider_defaults().models);
assert_eq!(xiaomi.vision_model.as_deref(), Some("mimo-v2.5-pro"));
assert_eq!(
xiaomi.context_window,
Some(200_000),
"Xiaomi must default to a 200k context window"
);
}
#[test]
fn present_xiaomi_section_is_left_untouched() {
let toml =
"[xiaomi]\nenabled = true\ndefault_model = \"mimo-v2-flash\"\napi_key = \"user-key\"\n";
let cfgs: ProviderConfigs = toml::from_str(toml).expect("parse");
let xiaomi = cfgs.xiaomi.expect("present");
assert_eq!(xiaomi.default_model.as_deref(), Some("mimo-v2-flash"));
assert_eq!(xiaomi.api_key.as_deref(), Some("user-key"));
assert!(
xiaomi.models.is_empty(),
"default model list must NOT be grafted onto an explicit section"
);
}
#[test]
fn programmatic_default_keeps_xiaomi_none() {
assert!(ProviderConfigs::default().xiaomi.is_none());
}