mirror of
https://github.com/langgenius/dify.git
synced 2026-03-24 04:09:45 +08:00
93 lines
2.8 KiB
TypeScript
93 lines
2.8 KiB
TypeScript
import type { DataSet } from '@/models/datasets'
|
|
import { knowledgeAction } from '../knowledge'
|
|
|
|
vi.mock('@/service/datasets', () => ({
|
|
fetchDatasets: vi.fn(),
|
|
}))
|
|
|
|
vi.mock('@/utils/classnames', () => ({
|
|
cn: (...args: string[]) => args.filter(Boolean).join(' '),
|
|
}))
|
|
|
|
describe('knowledgeAction', () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks()
|
|
})
|
|
|
|
it('has correct metadata', () => {
|
|
expect(knowledgeAction.key).toBe('@knowledge')
|
|
expect(knowledgeAction.shortcut).toBe('@kb')
|
|
})
|
|
|
|
it('returns parsed dataset results on success', async () => {
|
|
const { fetchDatasets } = await import('@/service/datasets')
|
|
vi.mocked(fetchDatasets).mockResolvedValue({
|
|
data: [
|
|
{ id: 'ds-1', name: 'My Knowledge', description: 'A KB', provider: 'vendor', embedding_available: true } as unknown as DataSet,
|
|
],
|
|
has_more: false,
|
|
limit: 10,
|
|
page: 1,
|
|
total: 1,
|
|
})
|
|
|
|
const results = await knowledgeAction.search('@knowledge query', 'query', 'en')
|
|
|
|
expect(fetchDatasets).toHaveBeenCalledWith({
|
|
url: '/datasets',
|
|
params: { page: 1, limit: 10, keyword: 'query' },
|
|
})
|
|
expect(results).toHaveLength(1)
|
|
expect(results[0]).toMatchObject({
|
|
id: 'ds-1',
|
|
title: 'My Knowledge',
|
|
type: 'knowledge',
|
|
})
|
|
})
|
|
|
|
it('generates correct path for external provider', async () => {
|
|
const { fetchDatasets } = await import('@/service/datasets')
|
|
vi.mocked(fetchDatasets).mockResolvedValue({
|
|
data: [
|
|
{ id: 'ds-ext', name: 'External', description: '', provider: 'external', embedding_available: true } as unknown as DataSet,
|
|
],
|
|
has_more: false,
|
|
limit: 10,
|
|
page: 1,
|
|
total: 1,
|
|
})
|
|
|
|
const results = await knowledgeAction.search('@knowledge', '', 'en')
|
|
|
|
expect(results[0].path).toBe('/datasets/ds-ext/hitTesting')
|
|
})
|
|
|
|
it('generates correct path for non-external provider', async () => {
|
|
const { fetchDatasets } = await import('@/service/datasets')
|
|
vi.mocked(fetchDatasets).mockResolvedValue({
|
|
data: [
|
|
{ id: 'ds-2', name: 'Internal', description: '', provider: 'vendor', embedding_available: true } as unknown as DataSet,
|
|
],
|
|
has_more: false,
|
|
limit: 10,
|
|
page: 1,
|
|
total: 1,
|
|
})
|
|
|
|
const results = await knowledgeAction.search('@knowledge', '', 'en')
|
|
|
|
expect(results[0].path).toBe('/datasets/ds-2/documents')
|
|
})
|
|
|
|
it('returns empty array on API failure', async () => {
|
|
const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
const { fetchDatasets } = await import('@/service/datasets')
|
|
vi.mocked(fetchDatasets).mockRejectedValue(new Error('fail'))
|
|
|
|
const results = await knowledgeAction.search('@knowledge', 'fail', 'en')
|
|
expect(results).toEqual([])
|
|
expect(warnSpy).toHaveBeenCalledWith('Knowledge search failed:', expect.any(Error))
|
|
warnSpy.mockRestore()
|
|
})
|
|
})
|