113 lines
4.1 KiB
Swift
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 == [])
|
|
}
|
|
}
|