use super::*;
fn model(id: &str, owner: &str) -> RouterModel {
RouterModel {
id: id.to_string(),
owned_by: owner.to_string(),
}
}
fn credential(models: Vec<RouterModel>) -> RunCredential {
RunCredential {
token: "la_sk_test".to_string(),
available_models: models,
revocation: None,
}
}
#[test]
fn a_foreign_owner_is_not_substituted() {
let catalog = credential(vec![
model("codex-auto-review", "openai"),
model("gpt-5.5", "openai"),
]);
assert_eq!(catalog.select_model("anthropic"), None);
assert_eq!(catalog.advertised_owners(), vec!["openai"]);
}
#[test]
fn an_undeclared_owner_still_falls_back() {
let catalog = credential(vec![model("mystery-1", ""), model("mystery-2", "")]);
assert_eq!(catalog.select_model("anthropic"), Some("mystery-1"));
assert!(catalog.advertised_owners().is_empty());
}
#[test]
fn each_client_gets_a_model_of_its_own_owner() {
let catalog = credential(vec![
model("gpt-5.5", "openai"),
model("claude-haiku-4-5", "anthropic"),
]);
assert_eq!(catalog.select_model("anthropic"), Some("claude-haiku-4-5"));
assert_eq!(catalog.select_model("openai"), Some("gpt-5.5"));
assert_eq!(catalog.advertised_owners(), vec!["anthropic", "openai"]);
}
#[test]
fn an_unconstrained_client_accepts_any_model() {
let catalog = credential(vec![model("gpt-5.5", "openai")]);
assert_eq!(catalog.select_model(""), Some("gpt-5.5"));
}
#[test]
fn an_empty_catalog_selects_nothing() {
let catalog = credential(Vec::new());
assert_eq!(catalog.select_model("anthropic"), None);
assert_eq!(catalog.select_model(""), None);
}
#[test]
fn a_partially_declared_catalog_does_not_substitute() {
let catalog = credential(vec![model("gpt-5.5", "openai"), model("mystery", "")]);
assert_eq!(catalog.select_model("anthropic"), None);
}