Files
dify/web/app/components/plugins/__tests__/plugin-routes.spec.ts
Jingyi f816ae2e95 fix: handle integration marketplace install callbacks (#38236)
Co-authored-by: hjlarry <hjlarry@163.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-07-01 03:14:40 +00:00

121 lines
5.4 KiB
TypeScript

import { getFirstPackageIdFromSearchParams, getInstallRedirectPathByPluginCategory, getInstallRedirectPathFromSearchParams, getLegacyPluginRedirectPath, shouldResolveInstallCategoryRedirect } from '../plugin-routes'
describe('plugin routes', () => {
it.each([
[{}, '/integrations'],
[{ tab: 'plugins' }, '/integrations'],
[{ tab: ['plugins', 'discover'] }, '/integrations'],
])('redirects installed plugin URLs for search params %j', (searchParams, expected) => {
expect(getLegacyPluginRedirectPath(searchParams)).toBe(expected)
})
it.each([
[{ tab: 'trigger' }, '/integrations/trigger'],
[{ tab: 'agent-strategy' }, '/integrations/agent-strategy'],
[{ tab: 'extension' }, '/integrations/extension'],
[
{ 'tab': 'trigger', 'package-ids': '["langgenius/telegram_trigger"]', 'source': 'https://marketplace.dify.ai' },
'/integrations/trigger?package-ids=%5B%22langgenius%2Ftelegram_trigger%22%5D',
],
])('redirects legacy plugin category URLs for search params %j', (searchParams, expected) => {
expect(getLegacyPluginRedirectPath(searchParams)).toBe(expected)
})
it.each([
{ 'package-ids': '["langgenius/telegram_trigger"]' },
{ 'tab': 'plugins', 'package-ids': '["langgenius/telegram_trigger"]' },
{ 'bundle-info': '{"org":"langgenius","name":"bundle","version":"1.0.0"}' },
])('keeps install deep links on the legacy plugin page for search params %j', (searchParams) => {
expect(getLegacyPluginRedirectPath(searchParams)).toBeUndefined()
})
it('parses the first package id from marketplace install search params', () => {
expect(getFirstPackageIdFromSearchParams({
'package-ids': '["junjiem/mcp_see_agent:0.2.4@82caf96890992e9dec2c43c3fac82bfce8bd18a41de7c2b6948151b2d7f7b7a2"]',
})).toBe('junjiem/mcp_see_agent:0.2.4@82caf96890992e9dec2c43c3fac82bfce8bd18a41de7c2b6948151b2d7f7b7a2')
})
it.each([
[{ 'package-ids': '["junjiem/mcp_see_agent"]' }, true],
[{ 'tab': 'plugins', 'package-ids': '["junjiem/mcp_see_agent"]' }, true],
[{ 'tab': 'trigger', 'package-ids': '["langgenius/telegram_trigger"]' }, false],
[{ 'bundle-info': '{"org":"langgenius","name":"bundle","version":"1.0.0"}' }, false],
])('detects package install deep links that need category resolution for search params %j', (searchParams, expected) => {
expect(shouldResolveInstallCategoryRedirect(searchParams)).toBe(expected)
})
it.each([
[
'model',
{ 'package-ids': '["langgenius/openai"]' },
'/integrations/model-provider?package-ids=%5B%22langgenius%2Fopenai%22%5D',
],
[
'agent-strategy',
{ 'package-ids': '["junjiem/mcp_see_agent"]' },
'/integrations/agent-strategy?package-ids=%5B%22junjiem%2Fmcp_see_agent%22%5D',
],
[
'trigger',
{ 'tab': 'plugins', 'package-ids': '["langgenius/telegram_trigger"]', 'source': 'https://marketplace.dify.ai' },
'/integrations/trigger?package-ids=%5B%22langgenius%2Ftelegram_trigger%22%5D',
],
[
'datasource',
{ 'package-ids': '["langgenius/notion_datasource"]' },
'/integrations/data-source?package-ids=%5B%22langgenius%2Fnotion_datasource%22%5D',
],
])('builds install redirect paths from marketplace plugin category %s', (category, searchParams, expected) => {
expect(getInstallRedirectPathByPluginCategory(category, searchParams)).toBe(expected)
})
it.each([
[
{ 'category': 'agent-strategy', 'package-ids': '["junjiem/mcp_see_agent"]', 'source': 'https://marketplace.dify.ai' },
'/integrations/agent-strategy?package-ids=%5B%22junjiem%2Fmcp_see_agent%22%5D',
],
[
{ 'tab': 'trigger', 'package-ids': '["langgenius/telegram_trigger"]', 'source': 'https://marketplace.dify.ai' },
'/integrations/trigger?package-ids=%5B%22langgenius%2Ftelegram_trigger%22%5D',
],
[
{ 'category': 'model', 'package-ids': '["langgenius/openai"]', 'source': 'https://marketplace.dify.ai' },
'/integrations/model-provider?package-ids=%5B%22langgenius%2Fopenai%22%5D',
],
[
{ 'category': 'datasource', 'package-ids': '["langgenius/notion_datasource"]', 'source': 'https://marketplace.dify.ai' },
'/integrations/data-source?package-ids=%5B%22langgenius%2Fnotion_datasource%22%5D',
],
[
{ 'category': 'bundle', 'package-ids': '["langgenius/bundle"]' },
undefined,
],
[
{ category: 'agent-strategy' },
undefined,
],
])('builds install redirect paths directly from install search params %j', (searchParams, expected) => {
expect(getInstallRedirectPathFromSearchParams(searchParams)).toBe(expected)
})
it.each([
[{ tab: 'discover' }, '/marketplace'],
[{ tab: 'discover', category: 'extension' }, '/marketplace?category=extension'],
[{ tab: 'discover', q: 'slack', tags: ['a', 'b'] }, '/marketplace?q=slack&tags=a&tags=b'],
[{ tab: 'all' }, '/marketplace?category=all'],
[{ tab: 'tool' }, '/marketplace?category=tool'],
[{ tab: 'model' }, '/marketplace?category=model'],
[{ tab: 'datasource' }, '/marketplace?category=datasource'],
[{ tab: 'bundle' }, '/marketplace?category=bundle'],
])('redirects marketplace plugin URLs for search params %j', (searchParams, expected) => {
expect(getLegacyPluginRedirectPath(searchParams)).toBe(expected)
})
it.each([
{ tab: 'unsupported' },
{ tab: 'toString' },
])('does not redirect unsupported plugin URLs for search params %j', (searchParams) => {
expect(getLegacyPluginRedirectPath(searchParams)).toBeUndefined()
})
})