mirror of
https://github.com/langgenius/dify.git
synced 2026-07-21 18:58:35 +08:00
63 lines
2.3 KiB
TypeScript
63 lines
2.3 KiB
TypeScript
import {
|
|
asyncRunSafe,
|
|
canFindTool,
|
|
correctModelProvider,
|
|
correctToolProvider,
|
|
fetchWithRetry,
|
|
getPurifyHref,
|
|
} from './index'
|
|
|
|
describe('asyncRunSafe', () => {
|
|
it('returns resolved values and rejected errors as tuples', async () => {
|
|
await expect(asyncRunSafe(Promise.resolve('ok'))).resolves.toEqual([null, 'ok'])
|
|
|
|
const error = new Error('failed')
|
|
await expect(asyncRunSafe(Promise.reject(error))).resolves.toEqual([error])
|
|
})
|
|
|
|
it('normalizes an empty rejection reason', async () => {
|
|
// oxlint-disable-next-line prefer-promise-reject-errors
|
|
const [error] = await asyncRunSafe(Promise.reject())
|
|
expect(error).toEqual(new Error('unknown error'))
|
|
})
|
|
})
|
|
|
|
describe('getPurifyHref', () => {
|
|
it('escapes unsafe HTML while preserving an empty input', () => {
|
|
expect(getPurifyHref('<script>alert("xss")</script>&')).toBe(
|
|
'<script>alert("xss")</script>&',
|
|
)
|
|
expect(getPurifyHref('')).toBe('')
|
|
})
|
|
})
|
|
|
|
describe('fetchWithRetry', () => {
|
|
it('returns the resolved value or the final rejection', async () => {
|
|
await expect(fetchWithRetry(Promise.resolve('ok'))).resolves.toEqual([null, 'ok'])
|
|
|
|
const error = new Error('failed')
|
|
await expect(fetchWithRetry(Promise.reject(error), 1)).resolves.toEqual([error])
|
|
})
|
|
})
|
|
|
|
describe('provider normalization', () => {
|
|
it('normalizes legacy model providers without changing qualified providers', () => {
|
|
expect(correctModelProvider('google')).toBe('langgenius/gemini/google')
|
|
expect(correctModelProvider('openai')).toBe('langgenius/openai/openai')
|
|
expect(correctModelProvider('company/model')).toBe('company/model')
|
|
})
|
|
|
|
it('normalizes legacy tool providers without changing catalog providers', () => {
|
|
expect(correctToolProvider('jina')).toBe('langgenius/jina_tool/jina')
|
|
expect(correctToolProvider('standard')).toBe('langgenius/standard/standard')
|
|
expect(correctToolProvider('catalog-provider', true)).toBe('catalog-provider')
|
|
})
|
|
|
|
it('matches legacy tool IDs against supported provider formats', () => {
|
|
expect(canFindTool('tool-id', 'tool-id')).toBe(true)
|
|
expect(canFindTool('langgenius/tool-id/tool-id', 'tool-id')).toBe(true)
|
|
expect(canFindTool('langgenius/tool-id_tool/tool-id', 'tool-id')).toBe(true)
|
|
expect(canFindTool('provider-a', 'tool-b')).toBe(false)
|
|
})
|
|
})
|