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

92 lines
3.5 KiB
Swift

import CodexBarCore
import Foundation
import Testing
struct ProviderEnvironmentResolverTests {
@Test
func `selected API account overrides saved and ambient credentials`() {
let account = Self.account(token: "account-token")
let environment = ProviderEnvironmentResolver.resolve(
base: [ZaiSettingsReader.apiTokenKey: "ambient-token"],
provider: .zai,
config: ProviderConfig(id: .zai, apiKey: "saved-token"),
selectedAccount: account)
#expect(environment[ZaiSettingsReader.apiTokenKey] == "account-token")
}
@Test
func `OpenAI account removes project scoping from saved config`() {
let account = Self.account(token: "sk-admin-account")
let environment = ProviderEnvironmentResolver.resolve(
base: [
OpenAIAPISettingsReader.adminAPIKeyEnvironmentKey: "ambient-token",
OpenAIAPISettingsReader.projectIDEnvironmentKey: "ambient-project",
],
provider: .openai,
config: ProviderConfig(
id: .openai,
apiKey: "saved-token",
workspaceID: "saved-project"),
selectedAccount: account)
#expect(environment[OpenAIAPISettingsReader.adminAPIKeyEnvironmentKey] == "sk-admin-account")
#expect(environment[OpenAIAPISettingsReader.projectIDEnvironmentKey] == nil)
}
@Test
func `Claude session account removes API and OAuth credentials`() {
let environment = ProviderEnvironmentResolver.resolve(
base: [
ClaudeAdminAPISettingsReader.alternateAdminAPIKeyEnvironmentKey: "ambient-admin",
ClaudeOAuthCredentialsStore.environmentTokenKey: "ambient-oauth",
],
provider: .claude,
config: ProviderConfig(id: .claude, apiKey: "saved-admin"),
selectedAccount: Self.account(token: "sk-ant-session-account"))
for key in ClaudeAdminAPISettingsReader.apiKeyEnvironmentKeys {
#expect(environment[key] == nil)
}
#expect(environment[ClaudeOAuthCredentialsStore.environmentTokenKey] == nil)
}
@Test
func `Claude OAuth account replaces incompatible credentials`() {
let environment = ProviderEnvironmentResolver.resolve(
base: [
ClaudeAdminAPISettingsReader.alternateAdminAPIKeyEnvironmentKey: "ambient-admin",
ClaudeOAuthCredentialsStore.environmentTokenKey: "ambient-oauth",
],
provider: .claude,
config: ProviderConfig(id: .claude, apiKey: "saved-admin"),
selectedAccount: Self.account(token: "Bearer sk-ant-oat-account"))
for key in ClaudeAdminAPISettingsReader.apiKeyEnvironmentKeys {
#expect(environment[key] == nil)
}
#expect(environment[ClaudeOAuthCredentialsStore.environmentTokenKey] == "sk-ant-oat-account")
}
@Test
func `cookie account leaves unrelated provider environment intact`() {
let base = ["FOO": "bar"]
let environment = ProviderEnvironmentResolver.resolve(
base: base,
provider: .cursor,
config: ProviderConfig(id: .cursor),
selectedAccount: Self.account(token: "session=account"))
#expect(environment == base)
}
private static func account(token: String) -> ProviderTokenAccount {
ProviderTokenAccount(
id: UUID(),
label: "Test",
token: token,
addedAt: 0,
lastUsed: nil)
}
}