test(config): Add tests for model management and permission integration
This commit is contained in:
@@ -99,7 +99,7 @@ impl Settings {
|
||||
/// 2. Allowed tools
|
||||
/// 3. Mode-based defaults
|
||||
pub fn create_permission_manager(&self) -> PermissionManager {
|
||||
let mode = Mode::from_str(&self.mode).unwrap_or(Mode::Plan);
|
||||
let mode = self.mode.parse::<Mode>().ok().unwrap_or(Mode::Plan);
|
||||
let mut pm = PermissionManager::new(mode);
|
||||
|
||||
// Add disallowed tools first (deny rules take precedence)
|
||||
@@ -113,7 +113,7 @@ impl Settings {
|
||||
|
||||
/// Get the Mode enum from the mode string
|
||||
pub fn get_mode(&self) -> Mode {
|
||||
Mode::from_str(&self.mode).unwrap_or(Mode::Plan)
|
||||
self.mode.parse::<Mode>().ok().unwrap_or(Mode::Plan)
|
||||
}
|
||||
|
||||
/// Get the ProviderType enum from the provider string
|
||||
|
||||
@@ -229,6 +229,80 @@ fn effective_model_respects_explicit_model() {
|
||||
s.provider = "anthropic".to_string();
|
||||
s.model = "claude-opus-4-20250514".to_string();
|
||||
|
||||
// Should use explicit model, not provider default
|
||||
assert_eq!(s.get_effective_model(), "claude-opus-4-20250514");
|
||||
}
|
||||
// Should use explicit model, not provider default
|
||||
|
||||
assert_eq!(s.get_effective_model(), "claude-opus-4-20250514");
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#[test]
|
||||
|
||||
fn test_get_set_model_for_provider() {
|
||||
|
||||
let mut s = Settings::default();
|
||||
|
||||
|
||||
|
||||
// Default fallback
|
||||
|
||||
assert_eq!(s.get_model_for_provider(ProviderType::Ollama), "qwen3:8b");
|
||||
|
||||
assert_eq!(s.get_model_for_provider(ProviderType::Anthropic), "claude-sonnet-4-20250514");
|
||||
|
||||
|
||||
|
||||
// Set specific model
|
||||
|
||||
s.set_model_for_provider(ProviderType::Ollama, "llama3:70b");
|
||||
|
||||
assert_eq!(s.get_model_for_provider(ProviderType::Ollama), "llama3:70b");
|
||||
|
||||
|
||||
|
||||
// Other provider still uses default
|
||||
|
||||
assert_eq!(s.get_model_for_provider(ProviderType::Anthropic), "claude-sonnet-4-20250514");
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#[test]
|
||||
|
||||
fn test_permission_manager_integration() {
|
||||
|
||||
let mut s = Settings::default();
|
||||
|
||||
s.mode = "plan".to_string();
|
||||
|
||||
s.allowed_tools = vec!["bash:npm test*".to_string()];
|
||||
|
||||
s.disallowed_tools = vec!["bash:rm*".to_string()];
|
||||
|
||||
|
||||
|
||||
let pm = s.create_permission_manager();
|
||||
|
||||
|
||||
|
||||
// Allowed by list
|
||||
|
||||
assert_eq!(pm.check(Tool::Bash, Some("npm test")), PermissionDecision::Allow);
|
||||
|
||||
|
||||
|
||||
// Denied by list (takes precedence over mode default if matched)
|
||||
|
||||
assert_eq!(pm.check(Tool::Bash, Some("rm -rf /")), PermissionDecision::Deny);
|
||||
|
||||
|
||||
|
||||
// Mode default (Ask for bash in plan mode)
|
||||
|
||||
assert_eq!(pm.check(Tool::Bash, Some("ls -la")), PermissionDecision::Ask);
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user