|
|
@@ -16,9 +16,9 @@
|
|
|
|
|
|
import React from 'react';
|
|
|
import '@testing-library/jest-dom';
|
|
|
-import { render, screen, waitFor, act } from '@testing-library/react';
|
|
|
+import { render, screen, waitFor } from '@testing-library/react';
|
|
|
import userEvent from '@testing-library/user-event';
|
|
|
-import ImporterFilePreview from './ImporterFilePreview';
|
|
|
+import FilePreviewTab from './FilePreviewTab';
|
|
|
import { FileMetaData, ImporterFileSource } from '../types';
|
|
|
import useLoadData from '../../../utils/hooks/useLoadData/useLoadData';
|
|
|
import { mocked } from 'jest-mock';
|
|
|
@@ -40,13 +40,22 @@ jest.mock('../../../utils/hooks/useSaveData/useSaveData', () => ({
|
|
|
}))
|
|
|
}));
|
|
|
|
|
|
-describe('ImporterFilePreview', () => {
|
|
|
+describe('FilePreviewTab', () => {
|
|
|
const mockFileMetaData: FileMetaData = {
|
|
|
source: ImporterFileSource.LOCAL,
|
|
|
path: '/path/to/file.csv',
|
|
|
fileName: 'file.csv'
|
|
|
};
|
|
|
|
|
|
+ const mockDestinationConfig = {
|
|
|
+ tableName: 'test_table',
|
|
|
+ connectorId: 'hive',
|
|
|
+ database: 'default',
|
|
|
+ computeId: 'compute1'
|
|
|
+ };
|
|
|
+
|
|
|
+ const mockOnDestinationConfigChange = jest.fn();
|
|
|
+
|
|
|
beforeEach(() => {
|
|
|
jest.clearAllMocks();
|
|
|
mocked(useLoadData).mockImplementation(() => ({
|
|
|
@@ -57,21 +66,29 @@ describe('ImporterFilePreview', () => {
|
|
|
});
|
|
|
|
|
|
it('should render correctly', async () => {
|
|
|
- await act(async () => {
|
|
|
- render(<ImporterFilePreview fileMetaData={mockFileMetaData} />);
|
|
|
- });
|
|
|
+ render(
|
|
|
+ <FilePreviewTab
|
|
|
+ fileMetaData={mockFileMetaData}
|
|
|
+ destinationConfig={mockDestinationConfig}
|
|
|
+ onDestinationConfigChange={mockOnDestinationConfigChange}
|
|
|
+ />
|
|
|
+ );
|
|
|
|
|
|
await waitFor(() => {
|
|
|
- expect(screen.getByText('Preview')).toBeInTheDocument();
|
|
|
- expect(screen.getByText('Cancel')).toBeInTheDocument();
|
|
|
- expect(screen.getByText('Finish Import')).toBeInTheDocument();
|
|
|
+ expect(screen.getByText('Engine')).toBeInTheDocument();
|
|
|
+ expect(screen.getByText('Database')).toBeInTheDocument();
|
|
|
+ expect(screen.getByText('Table Name')).toBeInTheDocument();
|
|
|
});
|
|
|
});
|
|
|
|
|
|
it('should display data in the table after previewData is available', async () => {
|
|
|
- await act(async () => {
|
|
|
- render(<ImporterFilePreview fileMetaData={mockFileMetaData} />);
|
|
|
- });
|
|
|
+ render(
|
|
|
+ <FilePreviewTab
|
|
|
+ fileMetaData={mockFileMetaData}
|
|
|
+ destinationConfig={mockDestinationConfig}
|
|
|
+ onDestinationConfigChange={mockOnDestinationConfigChange}
|
|
|
+ />
|
|
|
+ );
|
|
|
|
|
|
await waitFor(() => {
|
|
|
expect(screen.getByText('Alice')).toBeInTheDocument();
|
|
|
@@ -82,15 +99,17 @@ describe('ImporterFilePreview', () => {
|
|
|
});
|
|
|
|
|
|
it('should open edit columns modal when button is clicked', async () => {
|
|
|
- await act(async () => {
|
|
|
- render(<ImporterFilePreview fileMetaData={mockFileMetaData} />);
|
|
|
- });
|
|
|
+ render(
|
|
|
+ <FilePreviewTab
|
|
|
+ fileMetaData={mockFileMetaData}
|
|
|
+ destinationConfig={mockDestinationConfig}
|
|
|
+ onDestinationConfigChange={mockOnDestinationConfigChange}
|
|
|
+ />
|
|
|
+ );
|
|
|
|
|
|
const editColumnsButton = screen.getByText('Edit Columns');
|
|
|
|
|
|
- await act(async () => {
|
|
|
- await userEvent.click(editColumnsButton);
|
|
|
- });
|
|
|
+ await userEvent.click(editColumnsButton);
|
|
|
|
|
|
await waitFor(() => {
|
|
|
expect(screen.getByRole('dialog')).toBeInTheDocument();
|
|
|
@@ -98,37 +117,16 @@ describe('ImporterFilePreview', () => {
|
|
|
});
|
|
|
|
|
|
it('should display source configuration', async () => {
|
|
|
- await act(async () => {
|
|
|
- render(<ImporterFilePreview fileMetaData={mockFileMetaData} />);
|
|
|
- });
|
|
|
-
|
|
|
- expect(screen.getByText('Configure source')).toBeInTheDocument();
|
|
|
- });
|
|
|
-
|
|
|
- it('should display cancel button', async () => {
|
|
|
- await act(async () => {
|
|
|
- render(<ImporterFilePreview fileMetaData={mockFileMetaData} />);
|
|
|
- });
|
|
|
-
|
|
|
- const cancelButton = screen.getByRole('button', { name: 'Cancel' });
|
|
|
- expect(cancelButton).toBeInTheDocument();
|
|
|
- });
|
|
|
-
|
|
|
- it('should handle complete file format workflow', async () => {
|
|
|
- mocked(useLoadData).mockImplementation(() => ({
|
|
|
- loading: false,
|
|
|
- data: mockPreviewData(),
|
|
|
- reloadData: jest.fn()
|
|
|
- }));
|
|
|
-
|
|
|
- await act(async () => {
|
|
|
- render(<ImporterFilePreview fileMetaData={mockFileMetaData} />);
|
|
|
- });
|
|
|
+ render(
|
|
|
+ <FilePreviewTab
|
|
|
+ fileMetaData={mockFileMetaData}
|
|
|
+ destinationConfig={mockDestinationConfig}
|
|
|
+ onDestinationConfigChange={mockOnDestinationConfigChange}
|
|
|
+ />
|
|
|
+ );
|
|
|
|
|
|
await waitFor(() => {
|
|
|
- expect(screen.getByText('Preview')).toBeInTheDocument();
|
|
|
- expect(screen.getByText('Alice')).toBeInTheDocument();
|
|
|
- expect(screen.getByText('Bob')).toBeInTheDocument();
|
|
|
+ expect(screen.getByText('Configure source')).toBeInTheDocument();
|
|
|
});
|
|
|
});
|
|
|
});
|