fabro/lib/crates/fabro-config/tests/resolve_cli.rs
Bryan Helmkamp 5eeacd7864 fmt
2026-04-11 11:27:46 -04:00

92 lines
2.4 KiB
Rust

use fabro_config::{parse_settings_layer, resolve_cli_from_file};
use fabro_types::settings::cli::{CliTargetSettings, OutputFormat, OutputVerbosity};
use fabro_types::settings::run::AgentPermissions;
use fabro_types::settings::{InterpString, SettingsLayer};
#[test]
fn resolves_cli_defaults_from_empty_settings() {
let settings = SettingsLayer::default();
let cli = resolve_cli_from_file(&settings).expect("empty settings should resolve");
assert!(cli.target.is_none());
assert_eq!(cli.output.format, OutputFormat::Text);
assert_eq!(cli.output.verbosity, OutputVerbosity::Normal);
assert!(!cli.exec.prevent_idle_sleep);
assert!(cli.updates.check);
assert!(cli.logging.level.is_none());
}
#[test]
fn resolves_cli_target_exec_and_output_settings() {
let settings: SettingsLayer = parse_settings_layer(
r#"
_version = 1
[cli.target]
type = "http"
url = "https://config.example.com"
[cli.target.tls]
cert = "cert.pem"
key = "key.pem"
ca = "ca.pem"
[cli.exec]
prevent_idle_sleep = true
[cli.exec.model]
provider = "openai"
name = "gpt-5"
[cli.exec.agent]
permissions = "read-only"
[cli.exec.agent.mcps.fs]
type = "stdio"
command = ["echo", "cli"]
[cli.output]
format = "json"
verbosity = "verbose"
[cli.updates]
check = false
[cli.logging]
level = "debug"
"#,
)
.expect("fixture should parse");
let cli = resolve_cli_from_file(&settings).expect("cli settings should resolve");
let CliTargetSettings::Http { url, tls } = cli.target.expect("target") else {
panic!("expected http target");
};
assert_eq!(url.as_source(), "https://config.example.com");
let tls = tls.expect("tls");
assert_eq!(tls.cert.as_source(), "cert.pem");
assert_eq!(tls.key.as_source(), "key.pem");
assert_eq!(tls.ca.as_source(), "ca.pem");
assert!(cli.exec.prevent_idle_sleep);
assert_eq!(
cli.exec
.model
.provider
.as_ref()
.map(InterpString::as_source),
Some("openai".to_string())
);
assert_eq!(
cli.exec.model.name.as_ref().map(InterpString::as_source),
Some("gpt-5".to_string())
);
assert_eq!(cli.exec.agent.permissions, Some(AgentPermissions::ReadOnly));
assert_eq!(cli.exec.agent.mcps["fs"].name, "fs");
assert_eq!(cli.output.format, OutputFormat::Json);
assert_eq!(cli.output.verbosity, OutputVerbosity::Verbose);
assert!(!cli.updates.check);
assert_eq!(cli.logging.level.as_deref(), Some("debug"));
}