feat: release OpsXShell 2.1.0 native Tauri edition
This commit is contained in:
1 parent
e9a0d21758
commit
a3dba0c6ed
311 files changed
+31748
-14897
No files matched your search
@@ -0,0 +1,61 @@
|
||||
import { fireEvent, render, screen, waitFor } from '@testing-library/react'
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import AiProviderSettings from '../../src/components/settings/AiProviderSettings'
|
||||
import { useAiProviderStore } from '../../src/stores/aiProviderStore'
|
||||
import { mockDesktopApi } from '../setup'
|
||||
|
||||
describe('AI provider settings', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
useAiProviderStore.setState({
|
||||
providers: [],
|
||||
activeProviderId: '',
|
||||
isLoaded: true,
|
||||
catalogProviders: [],
|
||||
catalogUpdatedAt: null,
|
||||
})
|
||||
vi.mocked(mockDesktopApi.aiTestProvider).mockResolvedValue({
|
||||
success: true,
|
||||
status: 200,
|
||||
model: 'deepseek-chat',
|
||||
latencyMs: 92,
|
||||
answer: 'OK',
|
||||
})
|
||||
})
|
||||
|
||||
it('keeps a new provider transient until a real connection test passes', async () => {
|
||||
render(<AiProviderSettings />)
|
||||
fireEvent.click(screen.getByRole('button', { name: '添加' }))
|
||||
|
||||
expect(useAiProviderStore.getState().providers).toHaveLength(0)
|
||||
expect(mockDesktopApi.settingsSet).not.toHaveBeenCalled()
|
||||
const save = screen.getByRole('button', { name: '保存' })
|
||||
expect(save).toBeDisabled()
|
||||
|
||||
fireEvent.change(screen.getByLabelText('API Key'), { target: { value: 'sk-test-only' } })
|
||||
fireEvent.click(screen.getByRole('button', { name: '测试连接' }))
|
||||
|
||||
await waitFor(() => expect(mockDesktopApi.aiTestProvider).toHaveBeenCalled())
|
||||
expect(mockDesktopApi.aiProviderSaveKey).not.toHaveBeenCalled()
|
||||
expect(await screen.findByText(/测试成功 · HTTP 200/)).toBeVisible()
|
||||
expect(save).toBeEnabled()
|
||||
|
||||
fireEvent.click(save)
|
||||
await waitFor(() => expect(useAiProviderStore.getState().providers).toHaveLength(1))
|
||||
expect(mockDesktopApi.aiProviderSaveKey).toHaveBeenCalledWith(expect.any(String), 'sk-test-only')
|
||||
expect(JSON.stringify(vi.mocked(mockDesktopApi.settingsSet).mock.calls)).not.toContain('sk-test-only')
|
||||
})
|
||||
|
||||
it('invalidates a successful test whenever a connection field changes', async () => {
|
||||
render(<AiProviderSettings />)
|
||||
fireEvent.click(screen.getByRole('button', { name: '添加' }))
|
||||
fireEvent.change(screen.getByLabelText('API Key'), { target: { value: 'sk-test-only' } })
|
||||
fireEvent.click(screen.getByRole('button', { name: '测试连接' }))
|
||||
const save = screen.getByRole('button', { name: '保存' })
|
||||
await waitFor(() => expect(save).toBeEnabled())
|
||||
|
||||
fireEvent.change(screen.getByLabelText('Endpoint'), { target: { value: 'https://proxy.example.com/v1' } })
|
||||
expect(save).toBeDisabled()
|
||||
expect(screen.getByText('连接字段已变更,请重新测试')).toBeVisible()
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user