92 lines
3.5 KiB
Swift
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)
|
|
}
|
|
}
|