61 lines
2.3 KiB
Swift
61 lines
2.3 KiB
Swift
import Foundation
|
|
import Testing
|
|
@testable import Clawdbot
|
|
|
|
@Suite struct ExecApprovalHelpersTests {
|
|
@Test 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)
|
|
}
|
|
|
|
@Test 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)
|
|
}
|
|
|
|
@Test 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))
|
|
}
|
|
}
|