Files

75 lines
3.0 KiB
Swift

#if os(Linux)
import Foundation
import Testing
@testable import CodexBarCLI
@testable import CodexBarCore
struct MiniMaxLinuxTests {
@Test
func `coding plan API key does not require macOS web support`() {
// A coding-plan key resolves to the plain HTTPS + Bearer API strategy, so it must be
// usable off macOS (matches the Factory/Kimi credential exemptions).
#expect(!CodexBarCLI.sourceModeRequiresWebSupport(
.auto,
provider: .minimax,
environment: [MiniMaxAPISettingsReader.codingPlanAPITokenKey: "sk-cp-test"]))
}
@Test
func `standard API key still requires web support because Auto resolves to the coding plan page`() {
// `MiniMaxAPIFetchStrategy` refuses standard `sk-api-` keys, so Auto falls back to the
// Coding Plan web strategy. Exempting it here would only produce `noAvailableStrategy`.
#expect(CodexBarCLI.sourceModeRequiresWebSupport(
.auto,
provider: .minimax,
environment: [MiniMaxAPISettingsReader.apiTokenKey: "sk-api-test"]))
}
@Test
func `auto without an API key still requires web support off macOS`() {
// Without a credential the only remaining Auto path is the web/cookie one, which
// genuinely needs macOS — the gate must still fire.
#expect(CodexBarCLI.sourceModeRequiresWebSupport(
.auto,
provider: .minimax,
environment: [:]))
}
@Test
func `explicit web source still requires web support even with an API key`() {
// The exemption is scoped to Auto; asking for the web source explicitly must not
// be silently redirected to the API path.
#expect(CodexBarCLI.sourceModeRequiresWebSupport(
.web,
provider: .minimax,
environment: [MiniMaxAPISettingsReader.codingPlanAPITokenKey: "sk-cp-test"]))
}
@Test
func `exempted coding plan key actually resolves a linux capable strategy`() async {
// Gate agreement is not enough: the Auto plan must contain a strategy that can run
// without the macOS web path, otherwise the exemption ends in `noAvailableStrategy`.
let env = [MiniMaxAPISettingsReader.codingPlanAPITokenKey: "sk-cp-test"]
let browserDetection = BrowserDetection(cacheTTL: 0)
let context = ProviderFetchContext(
runtime: .cli,
sourceMode: .auto,
includeCredits: false,
webTimeout: 1,
webDebugDumpHTML: false,
verbose: false,
env: env,
settings: ProviderSettingsSnapshot.make(),
fetcher: UsageFetcher(environment: env),
claudeFetcher: ClaudeUsageFetcher(browserDetection: browserDetection),
browserDetection: browserDetection)
let strategies = await ProviderDescriptorRegistry
.descriptor(for: .minimax)
.fetchPlan
.pipeline
.resolveStrategies(context)
#expect(strategies.contains { $0.id == "minimax.api" })
}
}
#endif