feat(frontend): 支持直接配置模型API密钥

This commit is contained in:
2026-08-30 10:57:05 +08:00
parent 0836807aa2
commit 352975d753
4 changed files with 73 additions and 11 deletions
+16 -2
View File
@@ -8,6 +8,8 @@ vi.mock('@/services/providerService', () => ({
mockModels: {},
listProviders: vi.fn(),
listProviderPresets: vi.fn(),
getCredentialStatus: vi.fn(),
putCredential: vi.fn(),
listModels: vi.fn(),
createProvider: vi.fn(),
updateProvider: vi.fn(),
@@ -16,7 +18,7 @@ vi.mock('@/services/providerService', () => ({
}))
import { useProviderStore } from './provider'
import { listModels, listProviderPresets, listProviders } from '@/services/providerService'
import { getCredentialStatus, listModels, listProviderPresets, listProviders, putCredential } from '@/services/providerService'
import { ApiErrorClass } from '@/services/apiClient'
const providers: ProviderConfig[] = [
@@ -49,6 +51,8 @@ beforeEach(() => {
vi.clearAllMocks()
vi.mocked(listProviders).mockResolvedValue(providers)
vi.mocked(listProviderPresets).mockResolvedValue(presets)
vi.mocked(getCredentialStatus).mockResolvedValue(false)
vi.mocked(putCredential).mockResolvedValue(undefined)
})
describe('provider store model discovery', () => {
@@ -89,6 +93,16 @@ describe('provider store model discovery', () => {
await expect(store.loadModels('openai')).rejects.toThrow('Credential is unavailable')
expect(store.modelErrorsByProvider.openai).toContain('DEEPSEEK_API_KEY')
expect(store.modelErrorsByProvider.openai).toContain('填写并保存')
})
it('sends an API key to the credential endpoint without storing it in Pinia', async () => {
const store = useProviderStore()
await store.saveCredential('deepseek', 'sk-test-sensitive-value')
expect(putCredential).toHaveBeenCalledWith('deepseek', 'sk-test-sensitive-value')
expect(store.credentialConfiguredById.deepseek).toBe(true)
expect(JSON.stringify(store.$state)).not.toContain('sk-test-sensitive-value')
})
})