Spaces:
Paused
Paused
| import Foundation | |
| import Testing | |
| @testable import OpenClaw | |
| struct ExecApprovalHelpersTests { | |
| func parseDecisionTrimsAndRejectsInvalid() { | |
| #expect(ExecApprovalHelpers.parseDecision("allow-once") == .allowOnce) | |
| #expect(ExecApprovalHelpers.parseDecision(" allow-always ") == .allowAlways) | |
| #expect(ExecApprovalHelpers.parseDecision("deny") == .deny) | |
| #expect(ExecApprovalHelpers.parseDecision("") == nil) | |
| #expect(ExecApprovalHelpers.parseDecision("nope") == nil) | |
| } | |
| func allowlistPatternPrefersResolution() { | |
| let resolved = ExecCommandResolution( | |
| rawExecutable: "rg", | |
| resolvedPath: "/opt/homebrew/bin/rg", | |
| executableName: "rg", | |
| cwd: nil) | |
| #expect(ExecApprovalHelpers.allowlistPattern(command: ["rg"], resolution: resolved) == resolved.resolvedPath) | |
| let rawOnly = ExecCommandResolution( | |
| rawExecutable: "rg", | |
| resolvedPath: nil, | |
| executableName: "rg", | |
| cwd: nil) | |
| #expect(ExecApprovalHelpers.allowlistPattern(command: ["rg"], resolution: rawOnly) == "rg") | |
| #expect(ExecApprovalHelpers.allowlistPattern(command: ["rg"], resolution: nil) == "rg") | |
| #expect(ExecApprovalHelpers.allowlistPattern(command: [], resolution: nil) == nil) | |
| } | |
| func requiresAskMatchesPolicy() { | |
| let entry = ExecAllowlistEntry(pattern: "/bin/ls", lastUsedAt: nil, lastUsedCommand: nil, lastResolvedPath: nil) | |
| #expect(ExecApprovalHelpers.requiresAsk( | |
| ask: .always, | |
| security: .deny, | |
| allowlistMatch: nil, | |
| skillAllow: false)) | |
| #expect(ExecApprovalHelpers.requiresAsk( | |
| ask: .onMiss, | |
| security: .allowlist, | |
| allowlistMatch: nil, | |
| skillAllow: false)) | |
| #expect(!ExecApprovalHelpers.requiresAsk( | |
| ask: .onMiss, | |
| security: .allowlist, | |
| allowlistMatch: entry, | |
| skillAllow: false)) | |
| #expect(!ExecApprovalHelpers.requiresAsk( | |
| ask: .onMiss, | |
| security: .allowlist, | |
| allowlistMatch: nil, | |
| skillAllow: true)) | |
| #expect(!ExecApprovalHelpers.requiresAsk( | |
| ask: .off, | |
| security: .allowlist, | |
| allowlistMatch: nil, | |
| skillAllow: false)) | |
| } | |
| } | |