mirror of https://github.com/langgenius/dify.git
Merge branch 'main' into deploy/dev
This commit is contained in:
commit
13346f2874
|
|
@ -54,7 +54,6 @@ class WorkflowToolProviderController(ToolProviderController):
|
|||
raise ValueError("app not found")
|
||||
|
||||
user = session.get(Account, db_provider.user_id) if db_provider.user_id else None
|
||||
|
||||
controller = WorkflowToolProviderController(
|
||||
entity=ToolProviderEntity(
|
||||
identity=ToolProviderIdentity(
|
||||
|
|
@ -67,7 +66,7 @@ class WorkflowToolProviderController(ToolProviderController):
|
|||
credentials_schema=[],
|
||||
plugin_id=None,
|
||||
),
|
||||
provider_id="",
|
||||
provider_id=db_provider.id,
|
||||
)
|
||||
|
||||
controller.tools = [
|
||||
|
|
|
|||
|
|
@ -64,7 +64,6 @@ vi.mock('i18next', () => ({
|
|||
|
||||
// Mock the useConfig hook
|
||||
vi.mock('@/app/components/workflow/nodes/iteration/use-config', () => ({
|
||||
__esModule: true,
|
||||
default: () => ({
|
||||
inputs: {
|
||||
is_parallel: true,
|
||||
|
|
|
|||
|
|
@ -132,7 +132,6 @@ vi.mock('@/hooks/use-knowledge', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/datasets/rename-modal', () => ({
|
||||
__esModule: true,
|
||||
default: ({
|
||||
show,
|
||||
onClose,
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ vi.mock('next/navigation', () => ({
|
|||
|
||||
// Mock classnames utility
|
||||
vi.mock('@/utils/classnames', () => ({
|
||||
__esModule: true,
|
||||
default: (...classes: any[]) => classes.filter(Boolean).join(' '),
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ vi.mock('@/context/provider-context', () => ({
|
|||
|
||||
const mockToastNotify = vi.fn()
|
||||
vi.mock('@/app/components/base/toast', () => ({
|
||||
__esModule: true,
|
||||
default: {
|
||||
notify: vi.fn(args => mockToastNotify(args)),
|
||||
},
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import { annotationBatchImport, checkAnnotationBatchImportProgress } from '@/ser
|
|||
import BatchModal, { ProcessStatus } from './index'
|
||||
|
||||
vi.mock('@/app/components/base/toast', () => ({
|
||||
__esModule: true,
|
||||
default: {
|
||||
notify: vi.fn(),
|
||||
},
|
||||
|
|
@ -24,14 +23,12 @@ vi.mock('@/context/provider-context', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('./csv-downloader', () => ({
|
||||
__esModule: true,
|
||||
default: () => <div data-testid="csv-downloader-stub" />,
|
||||
}))
|
||||
|
||||
let lastUploadedFile: File | undefined
|
||||
|
||||
vi.mock('./csv-uploader', () => ({
|
||||
__esModule: true,
|
||||
default: ({ file, updateFile }: { file?: File, updateFile: (file?: File) => void }) => (
|
||||
<div>
|
||||
<button
|
||||
|
|
@ -49,7 +46,6 @@ vi.mock('./csv-uploader', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/billing/annotation-full', () => ({
|
||||
__esModule: true,
|
||||
default: () => <div data-testid="annotation-full" />,
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ vi.mock('@/context/provider-context', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/hooks/use-timestamp', () => ({
|
||||
__esModule: true,
|
||||
default: () => ({
|
||||
formatTime: () => '2023-12-01 10:30:00',
|
||||
}),
|
||||
|
|
@ -35,7 +34,6 @@ vi.mock('@/hooks/use-timestamp', () => ({
|
|||
// Note: i18n is automatically mocked by Vitest via web/vitest.setup.ts
|
||||
|
||||
vi.mock('@/app/components/billing/annotation-full', () => ({
|
||||
__esModule: true,
|
||||
default: () => <div data-testid="annotation-full" />,
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -160,7 +160,6 @@ vi.mock('@/context/provider-context', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/billing/annotation-full', () => ({
|
||||
__esModule: true,
|
||||
default: () => <div data-testid="annotation-full" />,
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ import Annotation from './index'
|
|||
import { JobStatus } from './type'
|
||||
|
||||
vi.mock('@/app/components/base/toast', () => ({
|
||||
__esModule: true,
|
||||
default: { notify: vi.fn() },
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import List from './list'
|
|||
const mockFormatTime = vi.fn(() => 'formatted-time')
|
||||
|
||||
vi.mock('@/hooks/use-timestamp', () => ({
|
||||
__esModule: true,
|
||||
default: () => ({
|
||||
formatTime: mockFormatTime,
|
||||
}),
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import ViewAnnotationModal from './index'
|
|||
const mockFormatTime = vi.fn(() => 'formatted-time')
|
||||
|
||||
vi.mock('@/hooks/use-timestamp', () => ({
|
||||
__esModule: true,
|
||||
default: () => ({
|
||||
formatTime: mockFormatTime,
|
||||
}),
|
||||
|
|
@ -24,7 +23,6 @@ vi.mock('../edit-annotation-modal/edit-item', () => {
|
|||
Answer: 'answer',
|
||||
}
|
||||
return {
|
||||
__esModule: true,
|
||||
default: ({ type, content, onSave }: { type: string, content: string, onSave: (value: string) => void }) => (
|
||||
<div>
|
||||
<div data-testid={`content-${type}`}>{content}</div>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import * as React from 'react'
|
|||
import ConfirmAddVar from './index'
|
||||
|
||||
vi.mock('../../base/var-highlight', () => ({
|
||||
__esModule: true,
|
||||
default: ({ name }: { name: string }) => <span data-testid="var-highlight">{name}</span>,
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import * as React from 'react'
|
|||
import EditModal from './edit-modal'
|
||||
|
||||
vi.mock('@/app/components/base/modal', () => ({
|
||||
__esModule: true,
|
||||
default: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ vi.mock('@/context/i18n', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/app/configuration/base/operation-btn', () => ({
|
||||
__esModule: true,
|
||||
default: ({ onClick }: { onClick: () => void }) => (
|
||||
<button type="button" data-testid="edit-button" onClick={onClick}>
|
||||
edit
|
||||
|
|
@ -17,7 +16,6 @@ vi.mock('@/app/components/app/configuration/base/operation-btn', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/app/configuration/base/feature-panel', () => ({
|
||||
__esModule: true,
|
||||
default: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ const defaultPromptVariables: PromptVariable[] = [
|
|||
let mockSimplePromptInputProps: IPromptProps | null = null
|
||||
|
||||
vi.mock('./simple-prompt-input', () => ({
|
||||
__esModule: true,
|
||||
default: (props: IPromptProps) => {
|
||||
mockSimplePromptInputProps = props
|
||||
return (
|
||||
|
|
@ -67,7 +66,6 @@ type AdvancedMessageInputProps = {
|
|||
}
|
||||
|
||||
vi.mock('./advanced-prompt-input', () => ({
|
||||
__esModule: true,
|
||||
default: (props: AdvancedMessageInputProps) => {
|
||||
return (
|
||||
<div
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ vi.mock('react-i18next', () => ({
|
|||
|
||||
let latestAgentSettingProps: any
|
||||
vi.mock('./agent/agent-setting', () => ({
|
||||
__esModule: true,
|
||||
default: (props: any) => {
|
||||
latestAgentSettingProps = props
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -76,7 +76,6 @@ const ToolPickerMock = (props: ToolPickerProps) => (
|
|||
</div>
|
||||
)
|
||||
vi.mock('@/app/components/workflow/block-selector/tool-picker', () => ({
|
||||
__esModule: true,
|
||||
default: (props: ToolPickerProps) => <ToolPickerMock {...props} />,
|
||||
}))
|
||||
|
||||
|
|
@ -96,7 +95,6 @@ const SettingBuiltInToolMock = (props: SettingBuiltInToolProps) => {
|
|||
)
|
||||
}
|
||||
vi.mock('./setting-built-in-tool', () => ({
|
||||
__esModule: true,
|
||||
default: (props: SettingBuiltInToolProps) => <SettingBuiltInToolMock {...props} />,
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@ const FormMock = ({ value, onChange }: MockFormProps) => {
|
|||
)
|
||||
}
|
||||
vi.mock('@/app/components/header/account-setting/model-provider-page/model-modal/Form', () => ({
|
||||
__esModule: true,
|
||||
default: (props: MockFormProps) => <FormMock {...props} />,
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -17,13 +17,11 @@ vi.mock('use-context-selector', async (importOriginal) => {
|
|||
|
||||
const mockFormattingDispatcher = vi.fn()
|
||||
vi.mock('../debug/hooks', () => ({
|
||||
__esModule: true,
|
||||
useFormattingChangedDispatcher: () => mockFormattingDispatcher,
|
||||
}))
|
||||
|
||||
let latestConfigPromptProps: any
|
||||
vi.mock('@/app/components/app/configuration/config-prompt', () => ({
|
||||
__esModule: true,
|
||||
default: (props: any) => {
|
||||
latestConfigPromptProps = props
|
||||
return <div data-testid="config-prompt" />
|
||||
|
|
@ -32,7 +30,6 @@ vi.mock('@/app/components/app/configuration/config-prompt', () => ({
|
|||
|
||||
let latestConfigVarProps: any
|
||||
vi.mock('@/app/components/app/configuration/config-var', () => ({
|
||||
__esModule: true,
|
||||
default: (props: any) => {
|
||||
latestConfigVarProps = props
|
||||
return <div data-testid="config-var" />
|
||||
|
|
@ -40,33 +37,27 @@ vi.mock('@/app/components/app/configuration/config-var', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('../dataset-config', () => ({
|
||||
__esModule: true,
|
||||
default: () => <div data-testid="dataset-config" />,
|
||||
}))
|
||||
|
||||
vi.mock('./agent/agent-tools', () => ({
|
||||
__esModule: true,
|
||||
default: () => <div data-testid="agent-tools" />,
|
||||
}))
|
||||
|
||||
vi.mock('../config-vision', () => ({
|
||||
__esModule: true,
|
||||
default: () => <div data-testid="config-vision" />,
|
||||
}))
|
||||
|
||||
vi.mock('./config-document', () => ({
|
||||
__esModule: true,
|
||||
default: () => <div data-testid="config-document" />,
|
||||
}))
|
||||
|
||||
vi.mock('./config-audio', () => ({
|
||||
__esModule: true,
|
||||
default: () => <div data-testid="config-audio" />,
|
||||
}))
|
||||
|
||||
let latestHistoryPanelProps: any
|
||||
vi.mock('../config-prompt/conversation-history/history-panel', () => ({
|
||||
__esModule: true,
|
||||
default: (props: any) => {
|
||||
latestHistoryPanelProps = props
|
||||
return <div data-testid="history-panel" />
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import { RETRIEVE_METHOD } from '@/types/app'
|
|||
import Item from './index'
|
||||
|
||||
vi.mock('../settings-modal', () => ({
|
||||
__esModule: true,
|
||||
default: ({ onSave, onCancel, currentDataset }: any) => (
|
||||
<div>
|
||||
<div>Mock settings modal</div>
|
||||
|
|
@ -24,7 +23,6 @@ vi.mock('../settings-modal', () => ({
|
|||
vi.mock('@/hooks/use-breakpoints', async (importOriginal) => {
|
||||
const actual = await importOriginal<typeof import('@/hooks/use-breakpoints')>()
|
||||
return {
|
||||
__esModule: true,
|
||||
...actual,
|
||||
default: vi.fn(() => actual.MediaType.pc),
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,7 +80,6 @@ vi.mock('uuid', () => ({
|
|||
|
||||
// Mock child components
|
||||
vi.mock('./card-item', () => ({
|
||||
__esModule: true,
|
||||
default: ({ config, onRemove, onSave, editable }: any) => (
|
||||
<div data-testid={`card-item-${config.id}`}>
|
||||
<span>{config.name}</span>
|
||||
|
|
@ -91,7 +90,6 @@ vi.mock('./card-item', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('./params-config', () => ({
|
||||
__esModule: true,
|
||||
default: ({ disabled, selectedDatasets }: any) => (
|
||||
<button data-testid="params-config" disabled={disabled}>
|
||||
Params (
|
||||
|
|
@ -102,7 +100,6 @@ vi.mock('./params-config', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('./context-var', () => ({
|
||||
__esModule: true,
|
||||
default: ({ value, options, onChange }: any) => (
|
||||
<select data-testid="context-var" value={value} onChange={e => onChange(e.target.value)}>
|
||||
<option value="">Select context variable</option>
|
||||
|
|
@ -114,7 +111,6 @@ vi.mock('./context-var', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/workflow/nodes/knowledge-retrieval/components/metadata/metadata-filter', () => ({
|
||||
__esModule: true,
|
||||
default: ({
|
||||
metadataList,
|
||||
metadataFilterMode,
|
||||
|
|
@ -198,7 +194,6 @@ const mockConfigContext: any = {
|
|||
}
|
||||
|
||||
vi.mock('@/context/debug-configuration', () => ({
|
||||
__esModule: true,
|
||||
default: ({ children }: any) => (
|
||||
<div data-testid="config-context-provider">
|
||||
{children}
|
||||
|
|
|
|||
|
|
@ -30,13 +30,11 @@ vi.mock('@/app/components/header/account-setting/model-provider-page/model-selec
|
|||
)
|
||||
|
||||
return {
|
||||
__esModule: true,
|
||||
default: MockModelSelector,
|
||||
}
|
||||
})
|
||||
|
||||
vi.mock('@/app/components/header/account-setting/model-provider-page/model-parameter-modal', () => ({
|
||||
__esModule: true,
|
||||
default: () => <div data-testid="model-parameter-modal" />,
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -65,13 +65,11 @@ vi.mock('@/app/components/header/account-setting/model-provider-page/model-selec
|
|||
)
|
||||
|
||||
return {
|
||||
__esModule: true,
|
||||
default: MockModelSelector,
|
||||
}
|
||||
})
|
||||
|
||||
vi.mock('@/app/components/header/account-setting/model-provider-page/model-parameter-modal', () => ({
|
||||
__esModule: true,
|
||||
default: () => <div data-testid="model-parameter-modal" />,
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import { RETRIEVE_METHOD } from '@/types/app'
|
|||
import SelectDataSet from './index'
|
||||
|
||||
vi.mock('@/i18n-config/i18next-config', () => ({
|
||||
__esModule: true,
|
||||
default: {
|
||||
changeLanguage: vi.fn(),
|
||||
addResourceBundle: vi.fn(),
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@ vi.mock('ky', () => {
|
|||
})
|
||||
|
||||
vi.mock('@/app/components/datasets/create/step-two', () => ({
|
||||
__esModule: true,
|
||||
IndexingType: {
|
||||
QUALIFIED: 'high_quality',
|
||||
ECONOMICAL: 'economy',
|
||||
|
|
@ -45,7 +44,6 @@ vi.mock('@/service/datasets', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/service/use-common', async () => ({
|
||||
__esModule: true,
|
||||
...(await vi.importActual('@/service/use-common')),
|
||||
useMembers: vi.fn(),
|
||||
}))
|
||||
|
|
@ -86,7 +84,6 @@ vi.mock('@/context/provider-context', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/header/account-setting/model-provider-page/hooks', () => ({
|
||||
__esModule: true,
|
||||
useModelList: (...args: unknown[]) => mockUseModelList(...args),
|
||||
useModelListAndDefaultModel: (...args: unknown[]) => mockUseModelListAndDefaultModel(...args),
|
||||
useModelListAndDefaultModelAndCurrentProviderAndModel: (...args: unknown[]) =>
|
||||
|
|
@ -95,7 +92,6 @@ vi.mock('@/app/components/header/account-setting/model-provider-page/hooks', ()
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/header/account-setting/model-provider-page/model-selector', () => ({
|
||||
__esModule: true,
|
||||
default: ({ defaultModel }: { defaultModel?: { provider: string, model: string } }) => (
|
||||
<div data-testid="model-selector">
|
||||
{defaultModel ? `${defaultModel.provider}/${defaultModel.model}` : 'no-model'}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@ vi.mock('@/context/provider-context', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/header/account-setting/model-provider-page/hooks', () => ({
|
||||
__esModule: true,
|
||||
useModelListAndDefaultModelAndCurrentProviderAndModel: (...args: unknown[]) =>
|
||||
mockUseModelListAndDefaultModelAndCurrentProviderAndModel(...args),
|
||||
useModelListAndDefaultModel: (...args: unknown[]) => mockUseModelListAndDefaultModel(...args),
|
||||
|
|
@ -43,7 +42,6 @@ vi.mock('@/app/components/header/account-setting/model-provider-page/hooks', ()
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/header/account-setting/model-provider-page/model-selector', () => ({
|
||||
__esModule: true,
|
||||
default: ({ defaultModel }: { defaultModel?: { provider: string, model: string } }) => (
|
||||
<div data-testid="model-selector">
|
||||
{defaultModel ? `${defaultModel.provider}/${defaultModel.model}` : 'no-model'}
|
||||
|
|
@ -52,7 +50,6 @@ vi.mock('@/app/components/header/account-setting/model-provider-page/model-selec
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/datasets/create/step-two', () => ({
|
||||
__esModule: true,
|
||||
IndexingType: {
|
||||
QUALIFIED: 'high_quality',
|
||||
ECONOMICAL: 'economy',
|
||||
|
|
|
|||
|
|
@ -52,27 +52,22 @@ const mockFiles: FileEntity[] = [
|
|||
]
|
||||
|
||||
vi.mock('@/context/debug-configuration', () => ({
|
||||
__esModule: true,
|
||||
useDebugConfigurationContext: () => mockUseDebugConfigurationContext(),
|
||||
}))
|
||||
|
||||
vi.mock('@/app/components/base/features/hooks', () => ({
|
||||
__esModule: true,
|
||||
useFeatures: (selector: (state: FeatureStoreState) => unknown) => mockUseFeaturesSelector(selector),
|
||||
}))
|
||||
|
||||
vi.mock('@/context/event-emitter', () => ({
|
||||
__esModule: true,
|
||||
useEventEmitterContextContext: () => mockUseEventEmitterContext(),
|
||||
}))
|
||||
|
||||
vi.mock('@/app/components/app/store', () => ({
|
||||
__esModule: true,
|
||||
useStore: (selector: (state: { setShowAppConfigureFeaturesModal: typeof mockSetShowAppConfigureFeaturesModal }) => unknown) => mockUseAppStoreSelector(selector),
|
||||
}))
|
||||
|
||||
vi.mock('./debug-item', () => ({
|
||||
__esModule: true,
|
||||
default: ({
|
||||
modelAndParameter,
|
||||
className,
|
||||
|
|
@ -95,7 +90,6 @@ vi.mock('./debug-item', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/base/chat/chat/chat-input-area', () => ({
|
||||
__esModule: true,
|
||||
default: (props: MockChatInputAreaProps) => {
|
||||
capturedChatInputProps = props
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -403,7 +403,6 @@ vi.mock('@/app/components/base/toast', () => ({
|
|||
|
||||
// Mock hooks/use-timestamp
|
||||
vi.mock('@/hooks/use-timestamp', () => ({
|
||||
__esModule: true,
|
||||
default: vi.fn(() => ({
|
||||
formatTime: vi.fn((timestamp: number) => new Date(timestamp).toLocaleString()),
|
||||
})),
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ vi.mock('@/app/components/app/store', () => ({
|
|||
useStore: vi.fn(),
|
||||
}))
|
||||
vi.mock('@/app/components/base/features/new-feature-panel/feature-bar', () => ({
|
||||
__esModule: true,
|
||||
default: ({ onFeatureBarClick }: { onFeatureBarClick: () => void }) => (
|
||||
<button type="button" onClick={onFeatureBarClick}>
|
||||
feature bar
|
||||
|
|
|
|||
|
|
@ -28,13 +28,11 @@ vi.mock('@/service/use-explore', () => ({
|
|||
useExploreAppList: () => mockUseExploreAppList(),
|
||||
}))
|
||||
vi.mock('@/app/components/app/type-selector', () => ({
|
||||
__esModule: true,
|
||||
default: ({ value, onChange }: { value: AppModeEnum[], onChange: (value: AppModeEnum[]) => void }) => (
|
||||
<button data-testid="type-selector" onClick={() => onChange([...value, 'chat' as AppModeEnum])}>{value.join(',')}</button>
|
||||
),
|
||||
}))
|
||||
vi.mock('../app-card', () => ({
|
||||
__esModule: true,
|
||||
default: ({ app, onCreate }: { app: any, onCreate: () => void }) => (
|
||||
<div
|
||||
data-testid="app-card"
|
||||
|
|
@ -46,7 +44,6 @@ vi.mock('../app-card', () => ({
|
|||
),
|
||||
}))
|
||||
vi.mock('@/app/components/explore/create-app-modal', () => ({
|
||||
__esModule: true,
|
||||
default: () => <div data-testid="create-from-template-modal" />,
|
||||
}))
|
||||
vi.mock('@/app/components/base/toast', () => ({
|
||||
|
|
|
|||
|
|
@ -44,7 +44,6 @@ vi.mock('@/context/i18n', () => ({
|
|||
useDocLink: () => () => '/guides',
|
||||
}))
|
||||
vi.mock('@/hooks/use-theme', () => ({
|
||||
__esModule: true,
|
||||
default: () => ({ theme: 'light' }),
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import DuplicateAppModal from './index'
|
|||
|
||||
const appsFullRenderSpy = vi.fn()
|
||||
vi.mock('@/app/components/billing/apps-full-in-dialog', () => ({
|
||||
__esModule: true,
|
||||
default: ({ loc }: { loc: string }) => {
|
||||
appsFullRenderSpy(loc)
|
||||
return <div data-testid="apps-full">AppsFull</div>
|
||||
|
|
|
|||
|
|
@ -14,21 +14,18 @@ vi.mock('next/navigation', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/app/annotation', () => ({
|
||||
__esModule: true,
|
||||
default: ({ appDetail }: { appDetail: App }) => (
|
||||
<div data-testid="annotation" data-app-id={appDetail.id} />
|
||||
),
|
||||
}))
|
||||
|
||||
vi.mock('@/app/components/app/log', () => ({
|
||||
__esModule: true,
|
||||
default: ({ appDetail }: { appDetail: App }) => (
|
||||
<div data-testid="log" data-app-id={appDetail.id} />
|
||||
),
|
||||
}))
|
||||
|
||||
vi.mock('@/app/components/app/workflow-log', () => ({
|
||||
__esModule: true,
|
||||
default: ({ appDetail }: { appDetail: App }) => (
|
||||
<div data-testid="workflow-log" data-app-id={appDetail.id} />
|
||||
),
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import { afterAll, afterEach, describe, expect, it, vi } from 'vitest'
|
|||
import Embedded from './index'
|
||||
|
||||
vi.mock('./style.module.css', () => ({
|
||||
__esModule: true,
|
||||
default: {
|
||||
option: 'option',
|
||||
active: 'active',
|
||||
|
|
@ -37,7 +36,6 @@ const mockUseAppContext = vi.fn(() => ({
|
|||
}))
|
||||
|
||||
vi.mock('copy-to-clipboard', () => ({
|
||||
__esModule: true,
|
||||
default: vi.fn(),
|
||||
}))
|
||||
vi.mock('@/app/components/base/chat/embedded-chatbot/theme/theme-context', () => ({
|
||||
|
|
|
|||
|
|
@ -72,7 +72,6 @@ vi.mock('@/context/provider-context', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/billing/apps-full-in-dialog', () => ({
|
||||
__esModule: true,
|
||||
default: ({ loc }: { loc: string }) => (
|
||||
<div data-testid="apps-full">
|
||||
AppsFull
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ import Toast from '@/app/components/base/toast'
|
|||
import SavedItems from './index'
|
||||
|
||||
vi.mock('copy-to-clipboard', () => ({
|
||||
__esModule: true,
|
||||
default: vi.fn(),
|
||||
}))
|
||||
vi.mock('next/navigation', () => ({
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ vi.mock('next/navigation', () => ({
|
|||
|
||||
// Mock the Run component as it has complex dependencies
|
||||
vi.mock('@/app/components/workflow/run', () => ({
|
||||
__esModule: true,
|
||||
default: ({ runDetailUrl, tracingListUrl }: { runDetailUrl: string, tracingListUrl: string }) => (
|
||||
<div data-testid="workflow-run">
|
||||
<span data-testid="run-detail-url">{runDetailUrl}</span>
|
||||
|
|
|
|||
|
|
@ -54,13 +54,11 @@ vi.mock('next/navigation', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('next/link', () => ({
|
||||
__esModule: true,
|
||||
default: ({ children, href }: { children: React.ReactNode, href: string }) => <a href={href}>{children}</a>,
|
||||
}))
|
||||
|
||||
// Mock the Run component to avoid complex dependencies
|
||||
vi.mock('@/app/components/workflow/run', () => ({
|
||||
__esModule: true,
|
||||
default: ({ runDetailUrl, tracingListUrl }: { runDetailUrl: string, tracingListUrl: string }) => (
|
||||
<div data-testid="workflow-run">
|
||||
<span data-testid="run-detail-url">{runDetailUrl}</span>
|
||||
|
|
@ -75,7 +73,6 @@ vi.mock('@/app/components/base/amplitude/utils', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/hooks/use-theme', () => ({
|
||||
__esModule: true,
|
||||
default: () => {
|
||||
return { theme: 'light' }
|
||||
},
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ vi.mock('next/navigation', () => ({
|
|||
|
||||
// Mock useTimestamp hook
|
||||
vi.mock('@/hooks/use-timestamp', () => ({
|
||||
__esModule: true,
|
||||
default: () => ({
|
||||
formatTime: (timestamp: number, _format: string) => `formatted-${timestamp}`,
|
||||
}),
|
||||
|
|
@ -39,7 +38,6 @@ vi.mock('@/hooks/use-timestamp', () => ({
|
|||
|
||||
// Mock useBreakpoints hook
|
||||
vi.mock('@/hooks/use-breakpoints', () => ({
|
||||
__esModule: true,
|
||||
default: () => 'pc', // Return desktop by default
|
||||
MediaType: {
|
||||
mobile: 'mobile',
|
||||
|
|
@ -49,7 +47,6 @@ vi.mock('@/hooks/use-breakpoints', () => ({
|
|||
|
||||
// Mock the Run component
|
||||
vi.mock('@/app/components/workflow/run', () => ({
|
||||
__esModule: true,
|
||||
default: ({ runDetailUrl, tracingListUrl }: { runDetailUrl: string, tracingListUrl: string }) => (
|
||||
<div data-testid="workflow-run">
|
||||
<span data-testid="run-detail-url">{runDetailUrl}</span>
|
||||
|
|
@ -67,13 +64,11 @@ vi.mock('@/app/components/workflow/context', () => ({
|
|||
|
||||
// Mock BlockIcon
|
||||
vi.mock('@/app/components/workflow/block-icon', () => ({
|
||||
__esModule: true,
|
||||
default: () => <div data-testid="block-icon">BlockIcon</div>,
|
||||
}))
|
||||
|
||||
// Mock useTheme
|
||||
vi.mock('@/hooks/use-theme', () => ({
|
||||
__esModule: true,
|
||||
default: () => {
|
||||
return { theme: 'light' }
|
||||
},
|
||||
|
|
|
|||
|
|
@ -17,13 +17,11 @@ import TriggerByDisplay from './trigger-by-display'
|
|||
|
||||
let mockTheme = Theme.light
|
||||
vi.mock('@/hooks/use-theme', () => ({
|
||||
__esModule: true,
|
||||
default: () => ({ theme: mockTheme }),
|
||||
}))
|
||||
|
||||
// Mock BlockIcon as it has complex dependencies
|
||||
vi.mock('@/app/components/workflow/block-icon', () => ({
|
||||
__esModule: true,
|
||||
default: ({ type, toolIcon }: { type: string, toolIcon?: string }) => (
|
||||
<div data-testid="block-icon" data-type={type} data-tool-icon={toolIcon || ''}>
|
||||
BlockIcon
|
||||
|
|
|
|||
|
|
@ -188,13 +188,11 @@ vi.mock('@/app/components/base/popover', () => {
|
|||
|
||||
// Tooltip uses portals - minimal mock preserving popup content as title attribute
|
||||
vi.mock('@/app/components/base/tooltip', () => ({
|
||||
__esModule: true,
|
||||
default: ({ children, popupContent }: any) => React.createElement('div', { title: popupContent }, children),
|
||||
}))
|
||||
|
||||
// TagSelector has API dependency (service/tag) - mock for isolated testing
|
||||
vi.mock('@/app/components/base/tag-management/selector', () => ({
|
||||
__esModule: true,
|
||||
default: ({ tags }: any) => {
|
||||
return React.createElement('div', { 'aria-label': 'tag-selector' }, tags?.map((tag: any) => React.createElement('span', { key: tag.id }, tag.name)))
|
||||
},
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ let educationInitCalls: number = 0
|
|||
|
||||
// Mock useDocumentTitle hook
|
||||
vi.mock('@/hooks/use-document-title', () => ({
|
||||
__esModule: true,
|
||||
default: (title: string) => {
|
||||
documentTitleCalls.push(title)
|
||||
},
|
||||
|
|
@ -25,7 +24,6 @@ vi.mock('@/app/education-apply/hooks', () => ({
|
|||
|
||||
// Mock List component
|
||||
vi.mock('./list', () => ({
|
||||
__esModule: true,
|
||||
default: () => {
|
||||
return React.createElement('div', { 'data-testid': 'apps-list' }, 'Apps List')
|
||||
},
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ const mockQueryState = {
|
|||
isCreatedByMe: false,
|
||||
}
|
||||
vi.mock('./hooks/use-apps-query-state', () => ({
|
||||
__esModule: true,
|
||||
default: () => ({
|
||||
query: mockQueryState,
|
||||
setQuery: mockSetQuery,
|
||||
|
|
@ -144,7 +143,6 @@ vi.mock('@/service/tag', () => ({
|
|||
// Store TagFilter onChange callback for testing
|
||||
let mockTagFilterOnChange: ((value: string[]) => void) | null = null
|
||||
vi.mock('@/app/components/base/tag-management/filter', () => ({
|
||||
__esModule: true,
|
||||
default: ({ onChange }: { onChange: (value: string[]) => void }) => {
|
||||
mockTagFilterOnChange = onChange
|
||||
return React.createElement('div', { 'data-testid': 'tag-filter' }, 'common.tag.placeholder')
|
||||
|
|
@ -200,7 +198,6 @@ vi.mock('next/dynamic', () => ({
|
|||
* Each child component (AppCard, NewAppCard, Empty, Footer) has its own dedicated tests.
|
||||
*/
|
||||
vi.mock('./app-card', () => ({
|
||||
__esModule: true,
|
||||
default: ({ app }: any) => {
|
||||
return React.createElement('div', { 'data-testid': `app-card-${app.id}`, 'role': 'article' }, app.name)
|
||||
},
|
||||
|
|
@ -213,14 +210,12 @@ vi.mock('./new-app-card', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('./empty', () => ({
|
||||
__esModule: true,
|
||||
default: () => {
|
||||
return React.createElement('div', { 'data-testid': 'empty-state', 'role': 'status' }, 'No apps found')
|
||||
},
|
||||
}))
|
||||
|
||||
vi.mock('./footer', () => ({
|
||||
__esModule: true,
|
||||
default: () => {
|
||||
return React.createElement('footer', { 'data-testid': 'footer', 'role': 'contentinfo' }, 'Footer')
|
||||
},
|
||||
|
|
|
|||
|
|
@ -18,12 +18,19 @@ const BasicContent: FC<BasicContentProps> = ({
|
|||
if (annotation?.logAnnotation)
|
||||
return <Markdown content={annotation?.logAnnotation.content || ''} />
|
||||
|
||||
// Preserve Windows UNC paths and similar backslash-heavy strings by
|
||||
// wrapping them in inline code so Markdown renders backslashes verbatim.
|
||||
let displayContent = content
|
||||
if (typeof content === 'string' && /^\\\\\S.*/.test(content) && !/^`.*`$/.test(content)) {
|
||||
displayContent = `\`${content}\``
|
||||
}
|
||||
|
||||
return (
|
||||
<Markdown
|
||||
className={cn(
|
||||
item.isError && '!text-[#F04438]',
|
||||
)}
|
||||
content={content}
|
||||
content={displayContent}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ const Answer: FC<AnswerProps> = ({
|
|||
}
|
||||
}, [switchSibling, item.prevSibling, item.nextSibling])
|
||||
|
||||
const contentIsEmpty = content.trim() === ''
|
||||
const contentIsEmpty = typeof content === 'string' && content.trim() === ''
|
||||
|
||||
return (
|
||||
<div className="mb-2 flex last:mb-0">
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ import {
|
|||
} from './utils'
|
||||
|
||||
vi.mock('mime', () => ({
|
||||
__esModule: true,
|
||||
default: {
|
||||
getAllExtensions: vi.fn(),
|
||||
},
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import { render, screen } from '@testing-library/react'
|
|||
import AnnotationFull from './index'
|
||||
|
||||
vi.mock('./usage', () => ({
|
||||
__esModule: true,
|
||||
default: (props: { className?: string }) => {
|
||||
return (
|
||||
<div data-testid="usage-component" data-classname={props.className ?? ''}>
|
||||
|
|
@ -13,7 +12,6 @@ vi.mock('./usage', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('../upgrade-btn', () => ({
|
||||
__esModule: true,
|
||||
default: (props: { loc?: string }) => {
|
||||
return (
|
||||
<button type="button" data-testid="upgrade-btn">
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import { fireEvent, render, screen } from '@testing-library/react'
|
|||
import AnnotationFullModal from './modal'
|
||||
|
||||
vi.mock('./usage', () => ({
|
||||
__esModule: true,
|
||||
default: (props: { className?: string }) => {
|
||||
return (
|
||||
<div data-testid="usage-component" data-classname={props.className ?? ''}>
|
||||
|
|
@ -14,7 +13,6 @@ vi.mock('./usage', () => ({
|
|||
|
||||
let mockUpgradeBtnProps: { loc?: string } | null = null
|
||||
vi.mock('../upgrade-btn', () => ({
|
||||
__esModule: true,
|
||||
default: (props: { loc?: string }) => {
|
||||
mockUpgradeBtnProps = props
|
||||
return (
|
||||
|
|
@ -32,7 +30,6 @@ type ModalSnapshot = {
|
|||
}
|
||||
let mockModalProps: ModalSnapshot | null = null
|
||||
vi.mock('../../base/modal', () => ({
|
||||
__esModule: true,
|
||||
default: ({ isShow, children, onClose, closable, className }: { isShow: boolean, children: React.ReactNode, onClose: () => void, closable?: boolean, className?: string }) => {
|
||||
mockModalProps = {
|
||||
isShow,
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@ vi.mock('@/context/provider-context', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('../plan', () => ({
|
||||
__esModule: true,
|
||||
default: ({ loc }: { loc: string }) => <div data-testid="plan-component" data-loc={loc} />,
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ vi.mock('@/context/provider-context', () => {
|
|||
})
|
||||
|
||||
vi.mock('../upgrade-btn', () => ({
|
||||
__esModule: true,
|
||||
default: () => <button data-testid="upgrade-btn" type="button">Upgrade</button>,
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ vi.mock('@/config', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('./use-ps-info', () => ({
|
||||
__esModule: true,
|
||||
default: () => ({
|
||||
saveOrUpdate,
|
||||
bind,
|
||||
|
|
|
|||
|
|
@ -42,7 +42,6 @@ vi.mock('js-cookie', () => {
|
|||
globals.__partnerStackCookieMocks = { get, set, remove }
|
||||
const cookieApi = { get, set, remove }
|
||||
return {
|
||||
__esModule: true,
|
||||
default: cookieApi,
|
||||
get,
|
||||
set,
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ vi.mock('@/app/components/base/modal', () => {
|
|||
isShow ? <div data-testid="plan-upgrade-modal">{children}</div> : null
|
||||
)
|
||||
return {
|
||||
__esModule: true,
|
||||
default: MockModal,
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -47,13 +47,11 @@ const verifyStateModalMock = vi.fn(props => (
|
|||
</div>
|
||||
))
|
||||
vi.mock('@/app/education-apply/verify-state-modal', () => ({
|
||||
__esModule: true,
|
||||
// eslint-disable-next-line ts/no-explicit-any
|
||||
default: (props: any) => verifyStateModalMock(props),
|
||||
}))
|
||||
|
||||
vi.mock('../upgrade-btn', () => ({
|
||||
__esModule: true,
|
||||
default: () => <button data-testid="plan-upgrade-btn" type="button">Upgrade</button>,
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import { PlanRange } from '../../plan-switcher/plan-range-switcher'
|
|||
import CloudPlanItem from './index'
|
||||
|
||||
vi.mock('../../../../base/toast', () => ({
|
||||
__esModule: true,
|
||||
default: {
|
||||
notify: vi.fn(),
|
||||
},
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ import Plans from './index'
|
|||
import selfHostedPlanItem from './self-hosted-plan-item'
|
||||
|
||||
vi.mock('./cloud-plan-item', () => ({
|
||||
__esModule: true,
|
||||
default: vi.fn(props => (
|
||||
<div data-testid={`cloud-plan-${props.plan}`} data-current-plan={props.currentPlan}>
|
||||
Cloud
|
||||
|
|
@ -20,7 +19,6 @@ vi.mock('./cloud-plan-item', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('./self-hosted-plan-item', () => ({
|
||||
__esModule: true,
|
||||
default: vi.fn(props => (
|
||||
<div data-testid={`self-plan-${props.plan}`}>
|
||||
Self
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ vi.mock('react-i18next', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('../../../../base/toast', () => ({
|
||||
__esModule: true,
|
||||
default: {
|
||||
notify: vi.fn(),
|
||||
},
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ const planUpgradeModalMock = vi.fn((props: { show: boolean, title: string, descr
|
|||
))
|
||||
|
||||
vi.mock('@/app/components/billing/plan-upgrade-modal', () => ({
|
||||
__esModule: true,
|
||||
// eslint-disable-next-line ts/no-explicit-any
|
||||
default: (props: any) => planUpgradeModalMock(props),
|
||||
}))
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ vi.mock('@/context/provider-context', () => {
|
|||
})
|
||||
|
||||
vi.mock('../upgrade-btn', () => ({
|
||||
__esModule: true,
|
||||
default: () => <button data-testid="vector-upgrade-btn" type="button">Upgrade</button>,
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ vi.mock('@/context/modal-context', () => ({
|
|||
// Mock the complex CustomWebAppBrand component to avoid dependency issues
|
||||
// This is acceptable because it has complex dependencies (fetch, APIs)
|
||||
vi.mock('../custom-web-app-brand', () => ({
|
||||
__esModule: true,
|
||||
default: () => <div data-testid="custom-web-app-brand">CustomWebAppBrand</div>,
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ vi.mock('@/app/components/header/account-setting/model-provider-page/hooks', ()
|
|||
|
||||
// Mock child component RetrievalParamConfig to simplify testing
|
||||
vi.mock('../retrieval-param-config', () => ({
|
||||
__esModule: true,
|
||||
default: ({ type, value, onChange, showMultiModalTip }: {
|
||||
type: RETRIEVE_METHOD
|
||||
value: RetrievalConfig
|
||||
|
|
|
|||
|
|
@ -91,7 +91,6 @@ let stepThreeProps: Record<string, any> = {}
|
|||
let _topBarProps: Record<string, any> = {}
|
||||
|
||||
vi.mock('./step-one', () => ({
|
||||
__esModule: true,
|
||||
default: (props: Record<string, any>) => {
|
||||
stepOneProps = props
|
||||
return (
|
||||
|
|
@ -165,7 +164,6 @@ vi.mock('./step-one', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('./step-two', () => ({
|
||||
__esModule: true,
|
||||
default: (props: Record<string, any>) => {
|
||||
stepTwoProps = props
|
||||
return (
|
||||
|
|
@ -200,7 +198,6 @@ vi.mock('./step-two', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('./step-three', () => ({
|
||||
__esModule: true,
|
||||
default: (props: Record<string, any>) => {
|
||||
stepThreeProps = props
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import StepThree from './index'
|
|||
|
||||
// Mock the EmbeddingProcess component since it has complex async logic
|
||||
vi.mock('../embedding-process', () => ({
|
||||
__esModule: true,
|
||||
default: vi.fn(({ datasetId, batchId, documents, indexingType, retrievalMethod }) => (
|
||||
<div data-testid="embedding-process">
|
||||
<span data-testid="ep-dataset-id">{datasetId}</span>
|
||||
|
|
@ -20,7 +19,6 @@ vi.mock('../embedding-process', () => ({
|
|||
// Mock useBreakpoints hook
|
||||
let mockMediaType = 'pc'
|
||||
vi.mock('@/hooks/use-breakpoints', () => ({
|
||||
__esModule: true,
|
||||
MediaType: {
|
||||
mobile: 'mobile',
|
||||
tablet: 'tablet',
|
||||
|
|
|
|||
|
|
@ -44,7 +44,6 @@ const { mockToastNotify } = vi.hoisted(() => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/base/toast', () => ({
|
||||
__esModule: true,
|
||||
default: {
|
||||
notify: mockToastNotify,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -57,7 +57,6 @@ const { mockToastNotify } = vi.hoisted(() => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/base/toast', () => ({
|
||||
__esModule: true,
|
||||
default: {
|
||||
notify: mockToastNotify,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ vi.mock('@/context/dataset-detail', () => ({
|
|||
|
||||
// Mock document picker - needs mock for simplified interaction testing
|
||||
vi.mock('../../../common/document-picker/preview-document-picker', () => ({
|
||||
__esModule: true,
|
||||
default: ({ files, onChange, value }: {
|
||||
files: Array<{ id: string, name: string, extension: string }>
|
||||
onChange: (selected: { id: string, name: string, extension: string }) => void
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ import RuleDetail from './rule-detail'
|
|||
|
||||
// Mock next/image (using img element for simplicity in tests)
|
||||
vi.mock('next/image', () => ({
|
||||
__esModule: true,
|
||||
default: function MockImage({ src, alt, className }: { src: string, alt: string, className?: string }) {
|
||||
// eslint-disable-next-line next/no-img-element
|
||||
return <img src={src} alt={alt} className={className} data-testid="next-image" />
|
||||
|
|
|
|||
|
|
@ -44,7 +44,6 @@ vi.mock('@/context/dataset-detail', () => ({
|
|||
// Mock the EmbeddingProcess component to track props
|
||||
let embeddingProcessProps: Record<string, unknown> = {}
|
||||
vi.mock('./embedding-process', () => ({
|
||||
__esModule: true,
|
||||
default: (props: Record<string, unknown>) => {
|
||||
embeddingProcessProps = props
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -59,7 +59,6 @@ vi.mock('../index', () => ({
|
|||
|
||||
// StatusItem uses React Query hooks which require QueryClientProvider
|
||||
vi.mock('../../../status-item', () => ({
|
||||
__esModule: true,
|
||||
default: ({ status, reverse, textCls }: { status: string, reverse?: boolean, textCls?: string }) => (
|
||||
<div data-testid="status-item" data-status={status} data-reverse={reverse} className={textCls}>
|
||||
Status:
|
||||
|
|
@ -71,7 +70,6 @@ vi.mock('../../../status-item', () => ({
|
|||
|
||||
// ImageList has deep dependency: FileThumb → file-uploader → react-pdf-highlighter (ESM)
|
||||
vi.mock('@/app/components/datasets/common/image-list', () => ({
|
||||
__esModule: true,
|
||||
default: ({ images, size, className }: { images: Array<{ sourceUrl: string, name: string }>, size?: string, className?: string }) => (
|
||||
<div data-testid="image-list" data-image-count={images.length} data-size={size} className={className}>
|
||||
{images.map((img, idx: number) => (
|
||||
|
|
@ -83,7 +81,6 @@ vi.mock('@/app/components/datasets/common/image-list', () => ({
|
|||
|
||||
// Markdown uses next/dynamic and react-syntax-highlighter (ESM)
|
||||
vi.mock('@/app/components/base/markdown', () => ({
|
||||
__esModule: true,
|
||||
Markdown: ({ content, className }: { content: string, className?: string }) => (
|
||||
<div data-testid="markdown" className={`markdown-body ${className || ''}`}>{content}</div>
|
||||
),
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@ vi.mock('@/hooks/use-import-dsl', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/explore/create-app-modal', () => ({
|
||||
__esModule: true,
|
||||
default: (props: CreateAppModalProps) => {
|
||||
if (!props.show)
|
||||
return null
|
||||
|
|
@ -83,7 +82,6 @@ vi.mock('@/app/components/explore/create-app-modal', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/app/create-from-dsl-modal/dsl-confirm-modal', () => ({
|
||||
__esModule: true,
|
||||
default: ({ onConfirm, onCancel }: { onConfirm: () => void, onCancel: () => void }) => (
|
||||
<div data-testid="dsl-confirm-modal">
|
||||
<button data-testid="dsl-confirm" onClick={onConfirm}>confirm</button>
|
||||
|
|
|
|||
|
|
@ -43,7 +43,6 @@ vi.mock('emoji-mart', () => ({
|
|||
SearchIndex: { search: vi.fn().mockResolvedValue([]) },
|
||||
}))
|
||||
vi.mock('@emoji-mart/data', () => ({
|
||||
__esModule: true,
|
||||
default: {
|
||||
categories: [
|
||||
{ id: 'people', emojis: ['😀'] },
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ vi.mock('next/navigation', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/hooks/use-breakpoints', () => ({
|
||||
__esModule: true,
|
||||
default: () => MediaType.pc,
|
||||
MediaType: {
|
||||
mobile: 'mobile',
|
||||
|
|
@ -53,7 +52,6 @@ vi.mock('@/service/use-common', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/hooks/use-document-title', () => ({
|
||||
__esModule: true,
|
||||
default: vi.fn(),
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@ vi.mock('@/service/use-explore', () => ({
|
|||
* in their own dedicated test files.
|
||||
*/
|
||||
vi.mock('@/app/components/share/text-generation', () => ({
|
||||
__esModule: true,
|
||||
default: ({ isInstalledApp, installedAppInfo, isWorkflow }: {
|
||||
isInstalledApp?: boolean
|
||||
installedAppInfo?: InstalledAppType
|
||||
|
|
@ -63,7 +62,6 @@ vi.mock('@/app/components/share/text-generation', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/base/chat/chat-with-history', () => ({
|
||||
__esModule: true,
|
||||
default: ({ installedAppInfo, className }: {
|
||||
installedAppInfo?: InstalledAppType
|
||||
className?: string
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ vi.mock('next/navigation', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/hooks/use-breakpoints', () => ({
|
||||
__esModule: true,
|
||||
default: () => MediaType.pc,
|
||||
MediaType: {
|
||||
mobile: 'mobile',
|
||||
|
|
|
|||
|
|
@ -67,7 +67,6 @@ const matchActionMock = vi.fn(() => undefined)
|
|||
const searchAnythingMock = vi.fn(async () => mockQueryResult.data)
|
||||
|
||||
vi.mock('./actions', () => ({
|
||||
__esModule: true,
|
||||
createActions: () => createActionsMock(),
|
||||
matchAction: () => matchActionMock(),
|
||||
searchAnything: () => searchAnythingMock(),
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import RunBatch from './index'
|
|||
vi.mock('@/hooks/use-breakpoints', async (importOriginal) => {
|
||||
const actual = await importOriginal<typeof import('@/hooks/use-breakpoints')>()
|
||||
return {
|
||||
__esModule: true,
|
||||
default: vi.fn(),
|
||||
MediaType: actual.MediaType,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,14 +15,12 @@ vi.mock('@/hooks/use-breakpoints', () => {
|
|||
}
|
||||
const mockUseBreakpoints = vi.fn(() => MediaType.pc)
|
||||
return {
|
||||
__esModule: true,
|
||||
default: mockUseBreakpoints,
|
||||
MediaType,
|
||||
}
|
||||
})
|
||||
|
||||
vi.mock('@/app/components/workflow/nodes/_base/components/editor/code-editor', () => ({
|
||||
__esModule: true,
|
||||
default: ({ value, onChange }: { value?: string, onChange?: (val: string) => void }) => (
|
||||
<textarea data-testid="code-editor-mock" value={value} onChange={e => onChange?.(e.target.value)} />
|
||||
),
|
||||
|
|
@ -36,7 +34,6 @@ vi.mock('@/app/components/base/image-uploader/text-generation-image-uploader', (
|
|||
return <div data-testid="vision-uploader-mock" />
|
||||
}
|
||||
return {
|
||||
__esModule: true,
|
||||
default: TextGenerationImageUploaderMock,
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ import Marketplace from './index'
|
|||
|
||||
const listRenderSpy = vi.fn()
|
||||
vi.mock('@/app/components/plugins/marketplace/list', () => ({
|
||||
__esModule: true,
|
||||
default: (props: {
|
||||
marketplaceCollections: unknown[]
|
||||
marketplaceCollectionPluginsMap: Record<string, unknown[]>
|
||||
|
|
@ -40,7 +39,6 @@ vi.mock('@/service/use-tools', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/utils/var', () => ({
|
||||
__esModule: true,
|
||||
getMarketplaceUrl: vi.fn(() => 'https://marketplace.test/market'),
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -5,17 +5,14 @@ const mockUseNodesReadOnly = vi.fn()
|
|||
const mockUseIsChatMode = vi.fn()
|
||||
|
||||
vi.mock('@/app/components/workflow/hooks', () => ({
|
||||
__esModule: true,
|
||||
useNodesReadOnly: () => mockUseNodesReadOnly(),
|
||||
}))
|
||||
|
||||
vi.mock('../../hooks', () => ({
|
||||
__esModule: true,
|
||||
useIsChatMode: () => mockUseIsChatMode(),
|
||||
}))
|
||||
|
||||
vi.mock('@/app/components/workflow/header/chat-variable-button', () => ({
|
||||
__esModule: true,
|
||||
default: ({ disabled }: { disabled: boolean }) => (
|
||||
<button data-testid="chat-variable-button" type="button" disabled={disabled}>
|
||||
ChatVariableButton
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@ const mockWorkflowStore = {
|
|||
}
|
||||
|
||||
vi.mock('@/app/components/workflow/hooks', () => ({
|
||||
__esModule: true,
|
||||
useChecklist: (...args: unknown[]) => mockUseChecklist(...args),
|
||||
useChecklistBeforePublish: () => mockUseChecklistBeforePublish(),
|
||||
useNodesReadOnly: () => mockUseNodesReadOnly(),
|
||||
|
|
@ -57,7 +56,6 @@ vi.mock('@/app/components/workflow/hooks', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/workflow/store', () => ({
|
||||
__esModule: true,
|
||||
useStore: (selector: (state: Record<string, unknown>) => unknown) => {
|
||||
const state: Record<string, unknown> = {
|
||||
publishedAt: null,
|
||||
|
|
@ -71,27 +69,22 @@ vi.mock('@/app/components/workflow/store', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/app/components/base/features/hooks', () => ({
|
||||
__esModule: true,
|
||||
useFeatures: (selector: (state: Record<string, unknown>) => unknown) => mockUseFeatures(selector),
|
||||
}))
|
||||
|
||||
vi.mock('@/context/provider-context', () => ({
|
||||
__esModule: true,
|
||||
useProviderContext: () => mockUseProviderContext(),
|
||||
}))
|
||||
|
||||
vi.mock('@/app/components/workflow/store/workflow/use-nodes', () => ({
|
||||
__esModule: true,
|
||||
default: () => mockUseNodes(),
|
||||
}))
|
||||
|
||||
vi.mock('reactflow', () => ({
|
||||
__esModule: true,
|
||||
useEdges: () => mockUseEdges(),
|
||||
}))
|
||||
|
||||
vi.mock('@/app/components/app/app-publisher', () => ({
|
||||
__esModule: true,
|
||||
default: (props: AppPublisherProps) => {
|
||||
const inputs = props.inputs ?? []
|
||||
return (
|
||||
|
|
@ -124,29 +117,24 @@ vi.mock('@/app/components/app/app-publisher', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/service/use-workflow', () => ({
|
||||
__esModule: true,
|
||||
useInvalidateAppWorkflow: () => mockUpdatePublishedWorkflow,
|
||||
usePublishWorkflow: () => ({ mutateAsync: mockPublishWorkflow }),
|
||||
useResetWorkflowVersionHistory: () => mockResetWorkflowVersionHistory,
|
||||
}))
|
||||
|
||||
vi.mock('@/service/use-tools', () => ({
|
||||
__esModule: true,
|
||||
useInvalidateAppTriggers: () => mockInvalidateAppTriggers,
|
||||
}))
|
||||
|
||||
vi.mock('@/service/apps', () => ({
|
||||
__esModule: true,
|
||||
fetchAppDetail: (...args: unknown[]) => mockFetchAppDetail(...args),
|
||||
}))
|
||||
|
||||
vi.mock('@/hooks/use-theme', () => ({
|
||||
__esModule: true,
|
||||
default: () => mockUseTheme(),
|
||||
}))
|
||||
|
||||
vi.mock('@/app/components/app/store', () => ({
|
||||
__esModule: true,
|
||||
useStore: (selector: (state: { appDetail?: { id: string }, setAppDetail: typeof mockSetAppDetail }) => unknown) => mockUseAppStoreSelector(selector),
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -51,12 +51,10 @@ const mockAppStore = (overrides: Partial<App> = {}) => {
|
|||
}
|
||||
|
||||
vi.mock('@/app/components/app/store', () => ({
|
||||
__esModule: true,
|
||||
useStore: (selector: (state: { appDetail?: App, setCurrentLogItem: typeof mockSetCurrentLogItem, setShowMessageLogModal: typeof mockSetShowMessageLogModal }) => unknown) => mockUseAppStoreSelector(selector),
|
||||
}))
|
||||
|
||||
vi.mock('@/app/components/workflow/header', () => ({
|
||||
__esModule: true,
|
||||
default: (props: HeaderProps) => {
|
||||
return (
|
||||
<div
|
||||
|
|
@ -83,7 +81,6 @@ vi.mock('@/app/components/workflow/header', () => ({
|
|||
}))
|
||||
|
||||
vi.mock('@/service/use-workflow', () => ({
|
||||
__esModule: true,
|
||||
useResetWorkflowVersionHistory: () => mockResetWorkflowVersionHistory,
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ const triggerEventsLimitModalMock = vi.fn((props: any) => {
|
|||
})
|
||||
|
||||
vi.mock('@/app/components/billing/trigger-events-limit-modal', () => ({
|
||||
__esModule: true,
|
||||
default: (props: any) => triggerEventsLimitModalMock(props),
|
||||
}))
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import type { i18n as I18nInstance } from 'i18next'
|
|||
import type { Locale } from '.'
|
||||
import type { NamespaceCamelCase, NamespaceKebabCase } from './i18next-config'
|
||||
import { match } from '@formatjs/intl-localematcher'
|
||||
import { camelCase } from 'es-toolkit/compat'
|
||||
import { camelCase, kebabCase } from 'es-toolkit/compat'
|
||||
import { createInstance } from 'i18next'
|
||||
import resourcesToBackend from 'i18next-resources-to-backend'
|
||||
import Negotiator from 'negotiator'
|
||||
|
|
@ -22,8 +22,9 @@ const getOrCreateI18next = async (lng: Locale) => {
|
|||
instance = createInstance()
|
||||
await instance
|
||||
.use(initReactI18next)
|
||||
.use(resourcesToBackend((language: Locale, namespace: NamespaceKebabCase) => {
|
||||
return import(`../i18n/${language}/${namespace}.json`)
|
||||
.use(resourcesToBackend((language: Locale, namespace: NamespaceCamelCase | NamespaceKebabCase) => {
|
||||
const fileNamespace = kebabCase(namespace) as NamespaceKebabCase
|
||||
return import(`../i18n/${language}/${fileNamespace}.json`)
|
||||
}))
|
||||
.init({
|
||||
lng,
|
||||
|
|
|
|||
Loading…
Reference in New Issue