use super::config::Harness;
fn harness(extra: &str) -> anyhow::Result<Harness> {
Ok(toml::from_str(&format!(
"id='codex'\nprogram='/bin/true'\nargs=[]\n{extra}"
))?)
}
#[test]
fn every_bound_is_positive_and_defaults_are_explicit() -> anyhow::Result<()> {
let configured = harness("")?;
configured.validate()?;
assert_eq!(configured.prompt_queue, 32);
assert_eq!(configured.content_bytes, 65536);
assert_eq!(configured.pending_permissions, 1024);
for field in [
"prompt_queue",
"content_bytes",
"acp_frame_bytes",
"pending_permissions",
"write_queue",
"read_queue",
"stream_queue",
"issuer_response_bytes",
] {
assert!(harness(&format!("{field}=0"))?.validate().is_err());
}
Ok(())
}
#[test]
fn no_configuration_can_add_an_approval_policy() {
for field in [
"auto_approve=true",
"permission_policy='approve'",
"permission='allow-once'",
"permission='deny'",
"id='cdx'",
] {
assert!(harness(field).is_err());
}
}
#[test]
fn relative_workspaces_and_empty_resume_ids_are_refused() -> anyhow::Result<()> {
assert!(harness("cwd='relative'")?.validate().is_err());
assert!(harness("session='' ")?.validate().is_err());
Ok(())
}
#[test]
fn a_listen_table_cannot_silently_widen_or_override_the_host() -> anyhow::Result<()> {
for text in [
"subjects=['other.inbox']",
"subjects=['agents.a.inbox','agents.a.inbox']",
"listen_bound=0",
"content_bytes=0",
] {
let table: toml::Value = toml::from_str(text)?;
assert!(super::config::validate_listen(Some(&table), "a", 65536).is_err());
}
let table: toml::Value = toml::from_str("subjects=['agents.a.inbox']")?;
super::config::validate_listen(Some(&table), "a", 65536)?;
Ok(())
}
#[test]
fn the_published_agent_seat_example_loads() -> anyhow::Result<()> {
let examples: serde_json::Value =
serde_json::from_str(include_str!("../../../../docs/site/_data/examples.json"))?;
let code = examples["agent-seat-config"]["code"]
.as_str()
.ok_or_else(|| anyhow::anyhow!("examples.json has no agent-seat-config"))?;
let dir = tempfile::tempdir()?;
let path = dir.path().join("agent-seat.toml");
std::fs::write(&path, code)?;
super::config::Seat::load(&path)?;
Ok(())
}