import CodexBarCoreimport Foundationimport 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 == []) }}
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 == [])
}
}