use super::SEEDED_MODELS;
use crate::model_pick::grammar::{
DEFAULT_CONTEXT_WINDOW, GrammarError, MODELS_YAML, context_windows, declare_model,
};
#[test]
fn declare_model_inserts_after_the_models_key_not_at_eof() {
let text = format!("adapter: /usr/bin/bz\n{SEEDED_MODELS}");
let out = declare_model(&text, "gpt-5.6-sol").unwrap().unwrap();
let (head, _) = out.split_once(" gpt-5.6-sol:").unwrap();
assert!(head.ends_with("models:\n") || head.contains("models:\n #"));
assert!(out.contains("adapter: /usr/bin/bz"));
assert!(out.contains(" context_window: 400000"));
assert!(out.contains(" capabilities: [tool_use_native, streaming]"));
}
#[test]
fn declare_model_writes_the_id_and_the_one_fact_read_out_of_it() {
let out = declare_model(SEEDED_MODELS, "gpt-5.6-sol")
.unwrap()
.unwrap();
assert!(out.contains(&format!(
" gpt-5.6-sol:\n context_window: {DEFAULT_CONTEXT_WINDOW}"
)));
assert!(out.contains("declared default"), "{out}");
assert!(out.contains("context-fullness figure"), "{out}");
assert_eq!(
context_windows(&out).get("gpt-5.6-sol").copied(),
Some(u64::from(DEFAULT_CONTEXT_WINDOW))
);
let entry: Vec<&str> = out
.split_once(" gpt-5.6-sol:\n")
.unwrap()
.1
.lines()
.take_while(|l| l.starts_with(" "))
.collect();
assert_eq!(
entry,
[format!(" context_window: {DEFAULT_CONTEXT_WINDOW}")]
);
assert!(!out.contains("served"), "{out}");
assert!(!out.contains("list-models"), "{out}");
}
#[test]
fn a_declaration_that_exists_is_nothing_to_write() {
assert_eq!(declare_model(SEEDED_MODELS, "gpt-5.4"), Ok(None));
assert_eq!(
declare_model("models:\n m:\n model_id: m\n", "m"),
Ok(None)
);
}
#[test]
fn declare_model_creates_the_block_when_there_is_none() {
let out = declare_model("", "gpt-5.6-sol").unwrap().unwrap();
assert!(out.starts_with("models:\n"));
assert!(out.contains(" gpt-5.6-sol:"));
let kept = declare_model("adapter: /usr/bin/bz\n", "m")
.unwrap()
.unwrap();
assert!(kept.starts_with("adapter: /usr/bin/bz\nmodels:\n"));
}
#[test]
fn declare_model_declines_an_inline_models_key() {
let err = declare_model("models: {}\n", "gpt-5.6-sol").unwrap_err();
assert_eq!(
err,
GrammarError::Inline {
file: MODELS_YAML,
key: "models".into(),
}
);
assert!(err.to_string().contains("models.yaml"));
}