dify/web/app/components/header/account-setting/key-validator/hooks.spec.ts

83 lines
2.2 KiB
TypeScript

import { act, renderHook } from '@testing-library/react'
import { ValidatedStatus } from './declarations'
import { useValidate } from './hooks'
describe('useValidate', () => {
beforeEach(() => {
vi.clearAllMocks()
vi.useFakeTimers()
})
afterEach(() => {
vi.useRealTimers()
})
it('should clear validation state when before returns false', async () => {
const { result } = renderHook(() => useValidate({ apiKey: 'value' }))
act(() => {
result.current[0]({ before: () => false })
})
await act(async () => {
await vi.advanceTimersByTimeAsync(1000)
})
expect(result.current[1]).toBe(false)
expect(result.current[2]).toEqual({})
})
it('should expose success status after a successful validation', async () => {
const run = vi.fn().mockResolvedValue({ status: ValidatedStatus.Success })
const { result } = renderHook(() => useValidate({ apiKey: 'value' }))
act(() => {
result.current[0]({
before: () => true,
run,
})
})
await act(async () => {
await vi.advanceTimersByTimeAsync(1000)
})
expect(result.current[1]).toBe(false)
expect(result.current[2]).toEqual({ status: ValidatedStatus.Success })
})
it('should expose error status and message when validation fails', async () => {
const run = vi.fn().mockResolvedValue({ status: ValidatedStatus.Error, message: 'bad-key' })
const { result } = renderHook(() => useValidate({ apiKey: 'value' }))
act(() => {
result.current[0]({
before: () => true,
run,
})
})
await act(async () => {
await vi.advanceTimersByTimeAsync(1000)
})
expect(result.current[1]).toBe(false)
expect(result.current[2]).toEqual({ status: ValidatedStatus.Error, message: 'bad-key' })
})
it('should keep validating state true when run is not provided', async () => {
const { result } = renderHook(() => useValidate({ apiKey: 'value' }))
act(() => {
result.current[0]({ before: () => true })
})
await act(async () => {
await vi.advanceTimersByTimeAsync(1000)
})
expect(result.current[1]).toBe(true)
expect(result.current[2]).toEqual({})
})
})