mirror of
https://github.com/langgenius/dify.git
synced 2026-09-02 06:03:18 +08:00
76 lines
2.0 KiB
TypeScript
76 lines
2.0 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vite-plus/test'
|
|
|
|
const mocks = vi.hoisted(() => ({
|
|
fetch: vi.fn(),
|
|
redirect: vi.fn((url: string) => {
|
|
throw new Error(`NEXT_REDIRECT:${url}`)
|
|
}),
|
|
}))
|
|
|
|
vi.mock('@/next/navigation', () => ({
|
|
redirect: (url: string) => mocks.redirect(url),
|
|
}))
|
|
|
|
describe('PluginList', () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks()
|
|
vi.stubGlobal('fetch', mocks.fetch)
|
|
})
|
|
|
|
it('redirects a package install link to its category integration', async () => {
|
|
mocks.fetch.mockResolvedValue({
|
|
ok: true,
|
|
json: vi.fn().mockResolvedValue({
|
|
data: {
|
|
plugin: {
|
|
category: 'tool',
|
|
},
|
|
},
|
|
}),
|
|
})
|
|
const { default: PluginList } = await import('./page')
|
|
|
|
await expect(
|
|
PluginList({
|
|
searchParams: Promise.resolve({
|
|
'package-ids': '["langgenius/example-tool"]',
|
|
}),
|
|
}),
|
|
).rejects.toThrow('NEXT_REDIRECT')
|
|
|
|
expect(mocks.redirect).toHaveBeenCalledWith(
|
|
'/integrations/tools/built-in?package-ids=%5B%22langgenius%2Fexample-tool%22%5D',
|
|
)
|
|
})
|
|
|
|
it('redirects to integrations when category resolution fails', async () => {
|
|
mocks.fetch.mockResolvedValue({ ok: false })
|
|
const { default: PluginList } = await import('./page')
|
|
|
|
await expect(
|
|
PluginList({
|
|
searchParams: Promise.resolve({
|
|
'package-ids': '["langgenius/example-tool"]',
|
|
}),
|
|
}),
|
|
).rejects.toThrow('NEXT_REDIRECT')
|
|
|
|
expect(mocks.redirect).toHaveBeenCalledWith('/integrations')
|
|
})
|
|
|
|
it('redirects to integrations when category resolution request rejects', async () => {
|
|
mocks.fetch.mockRejectedValue(new Error('Marketplace unavailable'))
|
|
const { default: PluginList } = await import('./page')
|
|
|
|
await expect(
|
|
PluginList({
|
|
searchParams: Promise.resolve({
|
|
'package-ids': '["langgenius/example-tool"]',
|
|
}),
|
|
}),
|
|
).rejects.toThrow('NEXT_REDIRECT')
|
|
|
|
expect(mocks.redirect).toHaveBeenCalledWith('/integrations')
|
|
})
|
|
})
|