112 lines · 4.1 KB · Swift
RawDownload
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 == [])    }}