mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-10-07 03:00:29 +00:00
92 lines
2.4 KiB
Rust
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"));
|
|
}
|