dify/web/app/(commonLayout)/datasets/new/__tests__/layout.spec.tsx
yyh 66a545fc6d
refactor: centralize deployment edition in system features (#39454)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: GareArc <garethcxy@dify.ai>
2026-07-24 07:15:02 +00:00

72 lines
2.2 KiB
TypeScript

import type { ReactElement, ReactNode } from 'react'
import { render, screen } from '@testing-library/react'
const mocks = vi.hoisted(() => ({
ensureQueryData: vi.fn(),
redirect: vi.fn((_href: string) => {
throw new Error('NEXT_REDIRECT')
}),
systemFeaturesQueryOptions: { queryKey: ['console', 'system-features'] },
}))
vi.mock('@/context/query-client-server', () => ({
getQueryClientServer: () => ({
ensureQueryData: mocks.ensureQueryData,
}),
}))
vi.mock('@/service/server', () => ({
serverConsoleQuery: {
systemFeatures: {
get: {
queryOptions: () => mocks.systemFeaturesQueryOptions,
},
},
},
}))
vi.mock('@/next/navigation', () => ({
redirect: (href: string) => mocks.redirect(href),
}))
async function renderLayout(children: ReactNode) {
const { default: Layout } = await import('../layout')
const element = await Layout({ children })
render(element as ReactElement)
}
describe('NewKnowledgeLayout', () => {
beforeEach(() => {
vi.clearAllMocks()
mocks.ensureQueryData.mockResolvedValue({ knowledge_fs_enabled: true })
})
it('renders new knowledge routes when KnowledgeFS is enabled', async () => {
await renderLayout(<div>New knowledge content</div>)
expect(mocks.ensureQueryData).toHaveBeenCalledWith(mocks.systemFeaturesQueryOptions)
expect(screen.getByText('New knowledge content')).toBeInTheDocument()
expect(mocks.redirect).not.toHaveBeenCalled()
})
it('redirects to datasets when KnowledgeFS is disabled', async () => {
mocks.ensureQueryData.mockResolvedValue({ knowledge_fs_enabled: false })
const { default: Layout } = await import('../layout')
await expect(Layout({ children: <div>New knowledge content</div> })).rejects.toThrow(
'NEXT_REDIRECT',
)
expect(mocks.redirect).toHaveBeenCalledWith('/datasets')
})
it('preserves System Features failures', async () => {
const error = new Error('System Features unavailable')
mocks.ensureQueryData.mockRejectedValue(error)
const { default: Layout } = await import('../layout')
await expect(Layout({ children: <div>New knowledge content</div> })).rejects.toBe(error)
expect(mocks.redirect).not.toHaveBeenCalled()
})
})