fix: resolve import migrations and test failures after segment 3 merge

- Migrate core.model_runtime -> dify_graph.model_runtime across 20+ files
- Migrate core.workflow.file -> dify_graph.file across 15+ files
- Migrate core.workflow.enums -> dify_graph.enums in service files
- Fix SandboxContext phantom import in dify_graph/context/__init__.py
- Fix core.app.workflow.node_factory -> core.workflow.node_factory
- Fix toast import paths (useToastContext from toast/context)
- Fix app-info.tsx import paths for relocated app-operations
- Fix 15 frontend test files for API changes, missing QueryClientProvider,
  i18n key renames, and component behavior changes

Made-with: Cursor
This commit is contained in:
Novice
2026-03-23 10:31:11 +08:00
parent 94b01f6821
commit 6b75188ddc
58 changed files with 242 additions and 172 deletions

View File

@ -263,11 +263,10 @@ describe('AppCard', () => {
})
it('should render app icon', () => {
// AppIcon component renders the emoji icon from app data
const { container } = render(<AppCard app={mockApp} />)
// Check that the icon container is rendered (AppIcon renders within the card)
const iconElement = container.querySelector('[class*="icon"]') || container.querySelector('img')
expect(iconElement || screen.getByText(mockApp.icon)).toBeTruthy()
const emojiElement = container.querySelector('em-emoji')
expect(emojiElement).toBeTruthy()
expect(emojiElement?.getAttribute('id')).toBe(mockApp.icon)
})
it('should render app type icon', () => {

View File

@ -20,6 +20,11 @@ vi.mock('@/app/education-apply/hooks', () => ({
},
}))
vi.mock('next/navigation', () => ({
useRouter: () => ({ replace: vi.fn() }),
useSearchParams: () => new URLSearchParams(),
}))
vi.mock('@/hooks/use-import-dsl', () => ({
useImportDSL: () => ({
handleImportDSL: vi.fn(),

View File

@ -1,3 +1,4 @@
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import { act, fireEvent, screen } from '@testing-library/react'
import * as React from 'react'
import { useStore as useTagStore } from '@/app/components/base/tag-management/store'
@ -200,9 +201,17 @@ beforeAll(() => {
} as unknown as typeof IntersectionObserver
})
// Render helper wrapping with shared nuqs testing helper.
const queryClient = new QueryClient({
defaultOptions: { queries: { retry: false } },
})
const renderList = (searchParams = '') => {
return renderWithNuqs(<List />, { searchParams })
return renderWithNuqs(
<QueryClientProvider client={queryClient}>
<List />
</QueryClientProvider>,
{ searchParams },
)
}
describe('List', () => {
@ -399,10 +408,14 @@ describe('List', () => {
describe('Edge Cases', () => {
it('should handle multiple renders without issues', () => {
const { rerender } = renderWithNuqs(<List />)
const { rerender } = renderWithNuqs(
<QueryClientProvider client={queryClient}><List /></QueryClientProvider>,
)
expect(screen.getByText('app.types.all')).toBeInTheDocument()
rerender(<List />)
rerender(
<QueryClientProvider client={queryClient}><List /></QueryClientProvider>,
)
expect(screen.getByText('app.types.all')).toBeInTheDocument()
})

View File

@ -71,7 +71,7 @@ describe('CreateAppCard', () => {
expect(screen.getByText('app.newApp.startFromBlank')).toBeInTheDocument()
expect(screen.getByText('app.newApp.startFromTemplate')).toBeInTheDocument()
expect(screen.getByText('app.importDSL')).toBeInTheDocument()
expect(screen.getByText('app.importApp')).toBeInTheDocument()
})
it('should render all buttons as clickable', () => {
@ -190,7 +190,7 @@ describe('CreateAppCard', () => {
it('should open DSL modal when clicking Import DSL', () => {
render(<CreateAppCard ref={defaultRef} />)
fireEvent.click(screen.getByText('app.importDSL'))
fireEvent.click(screen.getByText('app.importApp'))
expect(screen.getByTestId('create-dsl-modal')).toBeInTheDocument()
})
@ -198,7 +198,7 @@ describe('CreateAppCard', () => {
it('should close DSL modal when clicking close button', () => {
render(<CreateAppCard ref={defaultRef} />)
fireEvent.click(screen.getByText('app.importDSL'))
fireEvent.click(screen.getByText('app.importApp'))
expect(screen.getByTestId('create-dsl-modal')).toBeInTheDocument()
fireEvent.click(screen.getByTestId('close-dsl-modal'))
@ -209,7 +209,7 @@ describe('CreateAppCard', () => {
const mockOnSuccess = vi.fn()
render(<CreateAppCard ref={defaultRef} onSuccess={mockOnSuccess} />)
fireEvent.click(screen.getByText('app.importDSL'))
fireEvent.click(screen.getByText('app.importApp'))
fireEvent.click(screen.getByTestId('success-dsl-modal'))
expect(mockOnPlanInfoChanged).toHaveBeenCalled()
@ -245,7 +245,7 @@ describe('CreateAppCard', () => {
fireEvent.click(screen.getByText('app.newApp.startFromTemplate'))
fireEvent.click(screen.getByTestId('close-template-dialog'))
fireEvent.click(screen.getByText('app.importDSL'))
fireEvent.click(screen.getByText('app.importApp'))
fireEvent.click(screen.getByTestId('close-dsl-modal'))
expect(screen.queryByTestId('create-app-modal')).not.toBeInTheDocument()