use config_agent::{load_settings, Settings}; use permissions::{Mode, PermissionDecision, Tool}; use std::{env, fs}; #[test] fn precedence_env_overrides_files() { let tmp = tempfile::tempdir().unwrap(); let project_file = tmp.path().join(".owlen.toml"); fs::write(&project_file, r#"model="local-model""#).unwrap(); unsafe { env::set_var("OWLEN_MODEL", "env-model"); } let s = load_settings(Some(tmp.path().to_str().unwrap())).unwrap(); assert_eq!(s.model, "env-model"); } #[test] fn default_mode_is_plan() { let s = Settings::default(); assert_eq!(s.mode, "plan"); } #[test] fn settings_create_permission_manager_with_plan_mode() { let s = Settings::default(); let mgr = s.create_permission_manager(); // Plan mode should allow read operations assert_eq!(mgr.check(Tool::Read, None), PermissionDecision::Allow); // Plan mode should ask for write operations assert_eq!(mgr.check(Tool::Write, None), PermissionDecision::Ask); } #[test] fn settings_parse_mode_from_config() { let tmp = tempfile::tempdir().unwrap(); let project_file = tmp.path().join(".owlen.toml"); fs::write(&project_file, r#"mode="code""#).unwrap(); let s = load_settings(Some(tmp.path().to_str().unwrap())).unwrap(); assert_eq!(s.mode, "code"); assert_eq!(s.get_mode(), Mode::Code); let mgr = s.create_permission_manager(); // Code mode should allow everything assert_eq!(mgr.check(Tool::Write, None), PermissionDecision::Allow); assert_eq!(mgr.check(Tool::Bash, None), PermissionDecision::Allow); }