Files
dify/web/app/components/datasets/documents/create-from-pipeline/preview/file-preview.spec.tsx
CodingOnStar 5006a5e804 test: add unit tests for website crawl and document preview components
- Introduced new test files for CheckboxWithLabel, CrawledResultItem, ErrorMessage, and various components related to website crawling and document preview.
- Enhanced test coverage by validating rendering, user interactions, and edge cases for each component.
- Ensured proper functionality of user interactions such as checkbox selections, button clicks, and rendering of dynamic content.

These additions improve the reliability and maintainability of the website crawl and document preview features.
2026-02-10 17:31:40 +08:00

78 lines
2.1 KiB
TypeScript

import type { CustomFile } from '@/models/datasets'
import { fireEvent, render, screen } from '@testing-library/react'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import FilePreview from './file-preview'
vi.mock('react-i18next', () => ({
useTranslation: () => ({
t: (key: string) => key,
}),
}))
vi.mock('@remixicon/react', () => ({
RiCloseLine: () => <span data-testid="close-icon" />,
}))
const mockFileData = { content: 'file content here with some text' }
let mockIsFetching = false
vi.mock('@/service/use-common', () => ({
useFilePreview: () => ({
data: mockIsFetching ? undefined : mockFileData,
isFetching: mockIsFetching,
}),
}))
vi.mock('../../../common/document-file-icon', () => ({
default: () => <span data-testid="file-icon" />,
}))
vi.mock('./loading', () => ({
default: () => <div data-testid="loading" />,
}))
describe('FilePreview', () => {
const defaultProps = {
file: {
id: 'file-1',
name: 'document.pdf',
extension: 'pdf',
size: 1024,
} as CustomFile,
hidePreview: vi.fn(),
}
beforeEach(() => {
vi.clearAllMocks()
mockIsFetching = false
})
it('should render preview label', () => {
render(<FilePreview {...defaultProps} />)
expect(screen.getByText('addDocuments.stepOne.preview')).toBeInTheDocument()
})
it('should render file name', () => {
render(<FilePreview {...defaultProps} />)
expect(screen.getByText('document.pdf')).toBeInTheDocument()
})
it('should render file content when loaded', () => {
render(<FilePreview {...defaultProps} />)
expect(screen.getByText('file content here with some text')).toBeInTheDocument()
})
it('should render loading state', () => {
mockIsFetching = true
render(<FilePreview {...defaultProps} />)
expect(screen.getByTestId('loading')).toBeInTheDocument()
})
it('should call hidePreview when close button clicked', () => {
render(<FilePreview {...defaultProps} />)
const closeBtn = screen.getByTestId('close-icon').closest('button')!
fireEvent.click(closeBtn)
expect(defaultProps.hidePreview).toHaveBeenCalled()
})
})