Files
2026-07-13 12:22:33 +08:00

168 lines
5.7 KiB
Swift

import CodexBarCore
import Foundation
import Testing
@testable import CodexBarCLI
struct CLIDiagnoseCommandTests {
@Test
func `diagnose help describes generic JSON export`() {
let help = CodexBarCLI.diagnoseHelp(version: "0.0.0")
#expect(help.contains("codexbar diagnose --provider <name|all> --format json"))
#expect(help.contains("codexbar diagnose --provider all --format json"))
#expect(help.contains("--redact"))
#expect(help.contains("--output <path>"))
#expect(help.contains("safe JSON export"))
#expect(help.contains("raw API tokens"))
}
@Test
func `diagnose output writer creates parent directories`() throws {
let root = FileManager.default.temporaryDirectory
.appendingPathComponent("CodexBarDiagnoseTests-\(UUID().uuidString)")
defer { try? FileManager.default.removeItem(at: root) }
let output = root.appendingPathComponent("nested/diagnostic.json")
try CodexBarCLI.writeDiagnosticExport(#"{"provider":"minimax"}"#, to: output.path)
let contents = try String(contentsOf: output, encoding: .utf8)
#expect(contents == #"{"provider":"minimax"}"#)
}
private func makeSettingsWithMiniMaxCookie(_ manualCookieHeader: String) -> ProviderSettingsSnapshot {
ProviderSettingsSnapshot(
debugMenuEnabled: false,
debugKeepCLISessionsAlive: false,
codex: nil,
claude: nil,
cursor: nil,
opencode: nil,
opencodego: nil,
alibaba: nil,
factory: nil,
minimax: ProviderSettingsSnapshot.MiniMaxProviderSettings(
cookieSource: .manual,
manualCookieHeader: manualCookieHeader,
apiRegion: .global),
manus: nil,
zai: nil,
copilot: nil,
kilo: nil,
kimi: nil,
augment: nil,
amp: nil,
ollama: nil)
}
@Test
func `diagnose auth mode uses settings-backed MiniMax manual cookie when env token is absent`() {
let settings = self.makeSettingsWithMiniMaxCookie("Cookie: session_id=demo-cookie")
let authMode = CodexBarCLI._resolveMiniMaxAuthModeForTesting(
environment: [:],
settings: settings)
#expect(authMode == .cookie)
}
@Test
func `diagnose auth mode keeps apiToken precedence over settings cookie`() {
let settings = self.makeSettingsWithMiniMaxCookie("Cookie: session_id=demo-cookie")
let authMode = CodexBarCLI._resolveMiniMaxAuthModeForTesting(
environment: [MiniMaxAPISettingsReader.apiTokenKey: "sk-api-demo-token"],
settings: settings)
#expect(authMode == .apiToken)
}
@Test
func `generic diagnose auth summary detects provider config`() {
let summary = CodexBarCLI._diagnosticAuthSummaryForTesting(
provider: .openai,
account: nil,
config: ProviderConfig(id: .openai, apiKey: "sk-test"),
environment: [:],
settings: nil)
#expect(summary.configured)
#expect(summary.modes == ["api"])
}
@Test
func `generic diagnose auth summary detects provider environment credentials`() {
let summary = CodexBarCLI._diagnosticAuthSummaryForTesting(
provider: .openai,
account: nil,
config: nil,
environment: [OpenAIAPISettingsReader.apiKeyEnvironmentKey: "sk-test"],
settings: nil)
#expect(summary.configured)
#expect(summary.modes == ["api"])
}
@Test
func `generic diagnose auth summary detects Chutes environment credentials`() {
let summary = CodexBarCLI._diagnosticAuthSummaryForTesting(
provider: .chutes,
account: nil,
config: nil,
environment: [ChutesSettingsReader.apiKeyEnvironmentKey: "chutes-test"],
settings: nil)
#expect(summary.configured)
#expect(summary.modes == ["api"])
}
@Test
func `generic diagnose auth summary detects CrossModel environment credentials`() {
let summary = CodexBarCLI._diagnosticAuthSummaryForTesting(
provider: .crossmodel,
account: nil,
config: nil,
environment: [CrossModelSettingsReader.envKey: "cm-test"],
settings: nil)
#expect(summary.configured)
#expect(summary.modes == ["api"])
}
@Test
func `generic diagnose auth summary requires complete Bedrock credentials`() {
let partial = CodexBarCLI._diagnosticAuthSummaryForTesting(
provider: .bedrock,
account: nil,
config: ProviderConfig(id: .bedrock, apiKey: "access-only"),
environment: [BedrockSettingsReader.accessKeyIDKey: "access-only"],
settings: nil)
#expect(!partial.configured)
#expect(partial.modes.isEmpty)
let complete = CodexBarCLI._diagnosticAuthSummaryForTesting(
provider: .bedrock,
account: nil,
config: nil,
environment: [
BedrockSettingsReader.accessKeyIDKey: "access",
BedrockSettingsReader.secretAccessKeyKey: "secret",
],
settings: nil)
#expect(complete.configured)
#expect(complete.modes == ["api"])
}
@Test
func `generic diagnose auth summary does not assume ambient credentials`() {
let summary = CodexBarCLI._diagnosticAuthSummaryForTesting(
provider: .codex,
account: nil,
config: nil,
environment: [:],
settings: nil)
#expect(!summary.configured)
#expect(summary.modes.isEmpty)
}
}