From b4a4a38fec1c34235016d871b2e8a87ae6dd13d6 Mon Sep 17 00:00:00 2001 From: vikingowl Date: Fri, 26 Dec 2025 18:21:30 +0100 Subject: [PATCH] test(config): Add tests for model management and permission integration --- crates/platform/config/src/lib.rs | 4 +- crates/platform/config/tests/precedence.rs | 80 +++++++++++++++++++++- 2 files changed, 79 insertions(+), 5 deletions(-) diff --git a/crates/platform/config/src/lib.rs b/crates/platform/config/src/lib.rs index cf041ce..8200abe 100644 --- a/crates/platform/config/src/lib.rs +++ b/crates/platform/config/src/lib.rs @@ -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::().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::().ok().unwrap_or(Mode::Plan) } /// Get the ProviderType enum from the provider string diff --git a/crates/platform/config/tests/precedence.rs b/crates/platform/config/tests/precedence.rs index 2e10ae4..f8e9ac1 100644 --- a/crates/platform/config/tests/precedence.rs +++ b/crates/platform/config/tests/precedence.rs @@ -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"); -} \ No newline at end of file + // 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); + + } + + \ No newline at end of file