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

113 lines
4.1 KiB
Swift

import CodexBarCore
import Foundation
import Testing
@testable import CodexBarCLI
struct CLIProviderSelectionTests {
@Test
func `help includes gemini and all`() {
let usage = CodexBarCLI.usageHelp(version: "0.0.0")
let root = CodexBarCLI.rootHelp(version: "0.0.0")
let expectedProviders = [
"--provider codex|",
"|claude|",
"|factory|",
"|zai|",
"|cursor|",
"|gemini|",
"|antigravity|",
"|copilot|",
"|synthetic|",
"|kiro|",
"|warp|",
"|ollama|",
"|both|",
"|all]",
]
for provider in expectedProviders {
#expect(usage.contains(provider))
#expect(root.contains(provider))
}
#expect(usage.contains("--json"))
#expect(root.contains("--json"))
#expect(usage.contains("--json-only"))
#expect(root.contains("--json-only"))
#expect(usage.contains("--json-output"))
#expect(root.contains("--json-output"))
#expect(usage.contains("--log-level"))
#expect(root.contains("--log-level"))
#expect(usage.contains("--verbose"))
#expect(root.contains("--verbose"))
#expect(usage.contains("codexbar usage --provider gemini"))
#expect(usage.contains("codexbar usage --format json --provider all --pretty"))
#expect(root.contains("codexbar --provider gemini"))
}
@Test
func `help mentions source flag`() {
let usage = CodexBarCLI.usageHelp(version: "0.0.0")
let root = CodexBarCLI.rootHelp(version: "0.0.0")
func tokens(_ text: String) -> [String] {
let split = CharacterSet.whitespacesAndNewlines.union(CharacterSet(charactersIn: "[]|,"))
return text.components(separatedBy: split).filter { !$0.isEmpty }
}
#expect(usage.contains("--source"))
#expect(root.contains("--source"))
#expect(usage.contains("--web-timeout"))
#expect(usage.contains("--web-debug-dump-html"))
#expect(!tokens(usage).contains("--web"))
#expect(!tokens(root).contains("--web"))
#expect(!tokens(usage).contains("--claude-source"))
#expect(!tokens(root).contains("--claude-source"))
}
@Test
func `provider selection respects override`() {
let selection = CodexBarCLI.providerSelection(rawOverride: "gemini", enabled: [.codex, .claude])
#expect(selection.asList == [.gemini])
}
@Test
func `provider selection uses enabled providers when three or more are enabled`() {
let selection = CodexBarCLI.providerSelection(
rawOverride: nil,
enabled: [.codex, .claude, .zai, .cursor, .gemini, .antigravity, .factory, .copilot])
#expect(selection.asList == [.codex, .claude, .zai, .cursor, .gemini, .antigravity, .factory, .copilot])
}
@Test
func `provider selection does not expand three enabled providers to all providers`() {
let enabled: [UsageProvider] = [.codex, .claude, .copilot]
let selection = CodexBarCLI.providerSelection(rawOverride: nil, enabled: enabled)
#expect(selection.asList == enabled)
#expect(!selection.asList.contains(.gemini))
}
@Test
func `provider selection uses both for codex and claude`() {
let selection = CodexBarCLI.providerSelection(rawOverride: nil, enabled: [.codex, .claude])
#expect(selection.asList == [.codex, .claude])
}
@Test
func `provider selection uses custom for codex and gemini`() {
let enabled: [UsageProvider] = [.codex, .gemini]
let selection = CodexBarCLI.providerSelection(rawOverride: nil, enabled: enabled)
#expect(selection.asList == enabled)
}
@Test
func `provider selection accepts kiro alias`() {
let selection = CodexBarCLI.providerSelection(rawOverride: "kiro-cli", enabled: [.codex])
#expect(selection.asList == [.kiro])
}
@Test
func `provider selection honors empty enabled set`() {
let selection = CodexBarCLI.providerSelection(rawOverride: nil, enabled: [])
#expect(selection.asList == [])
}
}