use crate::brain::rsi::resolve_rsi_provider;
use crate::config::types::Config;
fn config(json_str: &str) -> Config {
serde_json::from_str(json_str).unwrap()
}
#[test]
fn explicit_self_improvement_provider_wins_as_is() {
let cfg = config(r#"{ "agent": { "self_improvement_provider": "minimax" } }"#);
assert_eq!(resolve_rsi_provider(&cfg), "minimax");
}
#[test]
fn declared_session_default_beats_the_registry_walk() {
let cfg = config(
r#"{
"agent": { "default_provider": "claude_cli" },
"providers": {
"xiaomi": { "enabled": true, "api_key": "k" },
"claude_cli": { "enabled": true }
}
}"#,
);
assert_eq!(resolve_rsi_provider(&cfg), "claude_cli");
}
#[test]
fn unhealthy_declared_default_falls_through_to_the_chain() {
let cfg = config(
r#"{
"agent": { "default_provider": "opencode" },
"providers": {
"opencode": { "enabled": false },
"xiaomi": { "enabled": true, "api_key": "k" },
"fallback": { "enabled": true, "providers": ["xiaomi"] }
}
}"#,
);
assert_eq!(resolve_rsi_provider(&cfg), "xiaomi");
}
#[test]
fn the_first_healthy_fallback_entry_wins_in_chain_order() {
let cfg = config(
r#"{
"providers": {
"xiaomi": { "enabled": false },
"minimax": { "enabled": true, "api_key": "k" },
"anthropic": { "enabled": true, "api_key": "k" },
"fallback": {
"enabled": true,
"providers": ["xiaomi", "minimax", "anthropic"]
}
}
}"#,
);
assert_eq!(resolve_rsi_provider(&cfg), "minimax");
}
#[test]
fn keyless_keyed_providers_are_not_healthy() {
let cfg = config(
r#"{
"providers": {
"minimax": { "enabled": true },
"anthropic": { "enabled": true, "api_key": "k" },
"fallback": {
"enabled": true,
"providers": ["minimax", "anthropic"]
}
}
}"#,
);
assert_eq!(resolve_rsi_provider(&cfg), "anthropic");
}
#[test]
fn a_disabled_fallback_chain_is_skipped() {
let cfg = config(
r#"{
"providers": {
"minimax": { "enabled": true, "api_key": "k" },
"xiaomi": { "enabled": true, "api_key": "k" },
"fallback": { "enabled": false, "providers": ["minimax"] }
}
}"#,
);
assert_eq!(resolve_rsi_provider(&cfg), "xiaomi");
}
#[test]
fn registry_walk_remains_the_last_resort() {
let cfg = config(r#"{ "providers": { "xiaomi": { "enabled": true, "api_key": "k" } } }"#);
assert_eq!(resolve_rsi_provider(&cfg), "xiaomi");
}