Files
steipete--codexbar/Tests/CodexBarTests/KeychainPromptCoordinatorTests.swift
2026-07-13 12:22:33 +08:00

69 lines
2.7 KiB
Swift

import CodexBarCore
import Testing
@testable import CodexBar
struct KeychainPromptCoordinatorTests {
@Test
func `detects raw SwiftPM debug executable`() {
#expect(KeychainPromptCoordinator.isUnbundledCodexBarExecutable(
"/Users/me/CodexBar/.build/arm64-apple-macosx/debug/CodexBar"))
#expect(KeychainPromptCoordinator.isUnbundledCodexBarExecutable(
"/Users/me/CodexBar/.build/debug/CodexBar"))
}
@Test
func `detects raw SwiftPM release executable`() {
#expect(KeychainPromptCoordinator.isUnbundledCodexBarExecutable(
"/Users/me/CodexBar/.build/arm64-apple-macosx/release/CodexBar"))
}
@Test
func `detects custom SwiftPM scratch path`() {
#expect(KeychainPromptCoordinator.isUnbundledCodexBarExecutable(
"/tmp/codexbar-build/arm64-apple-macosx/debug/CodexBar"))
}
@Test
func `keeps packaged app keychain behavior`() {
#expect(!KeychainPromptCoordinator.isUnbundledCodexBarExecutable(
"/Applications/CodexBar.app/Contents/MacOS/CodexBar"))
#expect(!KeychainPromptCoordinator.isUnbundledCodexBarExecutable(
"/Users/me/CodexBar/.build/package/CodexBar.app/Contents/MacOS/CodexBar"))
}
@Test
func `ignores unrelated executable paths`() {
#expect(!KeychainPromptCoordinator.isUnbundledCodexBarExecutable(
"/Users/me/CodexBar/.build/debug/CodexBarCLI"))
#expect(!KeychainPromptCoordinator.isUnbundledCodexBarExecutable(""))
#expect(!KeychainPromptCoordinator.isUnbundledCodexBarExecutable("CodexBar"))
}
@Test
func `browser cookie alert explains password handling and opt out`() {
let model = KeychainPromptCoordinator.browserCookieAlertModel(label: "Chrome Safe Storage")
#expect(model.title == "Keychain Access Required")
#expect(model.message.contains("Chrome Safe Storage"))
#expect(model.message.contains("macOS—not CodexBar—handles any Mac login password entry"))
#expect(model.message.contains("Settings → Advanced"))
#expect(model.primaryButtonTitle == "OK")
#expect(model.learnMoreButtonTitle == "Learn More…")
#expect(model.documentationURL.hasSuffix("/docs/keychain-prompts.md"))
}
@Test
func `provider alert preserves the requested keychain purpose`() {
let context = KeychainPromptContext(
kind: .claudeOAuth,
service: "Claude Code-credentials",
account: nil)
let model = KeychainPromptCoordinator.alertModel(for: context)
#expect(model.message.contains("Claude Code OAuth token"))
#expect(model.message.contains("fetch your Claude usage"))
#expect(model.learnMoreButtonTitle == "Learn More…")
}
}