TWNTY-3316 - Add tests for modules/spreadsheet-import (#4219)
Add tests for `modules/spreadsheet-import` Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com> Co-authored-by: RubensRafael <rubensrafael2@live.com>
This commit is contained in:
committed by
GitHub
parent
bc11cf80fa
commit
68a8502920
@ -0,0 +1,67 @@
|
||||
import { act, renderHook } from '@testing-library/react';
|
||||
import { RecoilRoot, useRecoilState } from 'recoil';
|
||||
|
||||
import { useSpreadsheetImport } from '@/spreadsheet-import/hooks/useSpreadsheetImport';
|
||||
import { spreadsheetImportState } from '@/spreadsheet-import/states/spreadsheetImportState';
|
||||
import { StepType } from '@/spreadsheet-import/steps/components/UploadFlow';
|
||||
import { RawData, SpreadsheetOptions } from '@/spreadsheet-import/types';
|
||||
|
||||
const Wrapper = ({ children }: { children: React.ReactNode }) => (
|
||||
<RecoilRoot>{children}</RecoilRoot>
|
||||
);
|
||||
type SpreadsheetKey = 'spreadsheet_key';
|
||||
|
||||
export const mockedSpreadsheetOptions: SpreadsheetOptions<SpreadsheetKey> = {
|
||||
isOpen: true,
|
||||
onClose: () => {},
|
||||
fields: [],
|
||||
uploadStepHook: async () => [],
|
||||
selectHeaderStepHook: async (headerValues: RawData, data: RawData[]) => ({
|
||||
headerValues,
|
||||
data,
|
||||
}),
|
||||
matchColumnsStepHook: async () => [],
|
||||
rowHook: () => ({ spreadsheet_key: 'rowHook' }),
|
||||
tableHook: () => [{ spreadsheet_key: 'tableHook' }],
|
||||
onSubmit: async () => {},
|
||||
allowInvalidSubmit: false,
|
||||
customTheme: {},
|
||||
maxRecords: 10,
|
||||
maxFileSize: 50,
|
||||
autoMapHeaders: true,
|
||||
autoMapDistance: 1,
|
||||
initialStepState: {
|
||||
type: StepType.upload,
|
||||
},
|
||||
dateFormat: 'MM/DD/YY',
|
||||
parseRaw: true,
|
||||
rtl: false,
|
||||
selectHeader: true,
|
||||
};
|
||||
|
||||
describe('useSpreadsheetImport', () => {
|
||||
it('should set isOpen to true, and update the options in the Recoil state', async () => {
|
||||
const { result } = renderHook(
|
||||
() => ({
|
||||
useSpreadsheetImport: useSpreadsheetImport<SpreadsheetKey>(),
|
||||
spreadsheetImportState: useRecoilState(spreadsheetImportState)[0],
|
||||
}),
|
||||
{
|
||||
wrapper: Wrapper,
|
||||
},
|
||||
);
|
||||
expect(result.current.spreadsheetImportState).toStrictEqual({
|
||||
isOpen: false,
|
||||
options: null,
|
||||
});
|
||||
act(() => {
|
||||
result.current.useSpreadsheetImport.openSpreadsheetImport(
|
||||
mockedSpreadsheetOptions,
|
||||
);
|
||||
});
|
||||
expect(result.current.spreadsheetImportState).toStrictEqual({
|
||||
isOpen: true,
|
||||
options: mockedSpreadsheetOptions,
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,47 @@
|
||||
import { useState } from 'react';
|
||||
import { act, renderHook } from '@testing-library/react';
|
||||
|
||||
import { useSpreadsheetImportInitialStep } from '@/spreadsheet-import/hooks/useSpreadsheetImportInitialStep';
|
||||
import { StepType } from '@/spreadsheet-import/steps/components/UploadFlow';
|
||||
|
||||
describe('useSpreadsheetImportInitialStep', () => {
|
||||
it('should return correct number for each step type', async () => {
|
||||
const { result } = renderHook(() => {
|
||||
const [step, setStep] = useState<StepType | undefined>();
|
||||
const { initialStep } = useSpreadsheetImportInitialStep(step);
|
||||
return { initialStep, setStep };
|
||||
});
|
||||
|
||||
expect(result.current.initialStep).toBe(-1);
|
||||
|
||||
act(() => {
|
||||
result.current.setStep(StepType.upload);
|
||||
});
|
||||
|
||||
expect(result.current.initialStep).toBe(0);
|
||||
|
||||
act(() => {
|
||||
result.current.setStep(StepType.selectSheet);
|
||||
});
|
||||
|
||||
expect(result.current.initialStep).toBe(0);
|
||||
|
||||
act(() => {
|
||||
result.current.setStep(StepType.selectHeader);
|
||||
});
|
||||
|
||||
expect(result.current.initialStep).toBe(0);
|
||||
|
||||
act(() => {
|
||||
result.current.setStep(StepType.matchColumns);
|
||||
});
|
||||
|
||||
expect(result.current.initialStep).toBe(2);
|
||||
|
||||
act(() => {
|
||||
result.current.setStep(StepType.validateData);
|
||||
});
|
||||
|
||||
expect(result.current.initialStep).toBe(3);
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,19 @@
|
||||
import { renderHook } from '@testing-library/react';
|
||||
|
||||
import { Providers } from '@/spreadsheet-import/components/Providers';
|
||||
import { mockedSpreadsheetOptions } from '@/spreadsheet-import/hooks/__tests__/useSpreadsheetImport.test';
|
||||
import { useSpreadsheetImportInternal } from '@/spreadsheet-import/hooks/useSpreadsheetImportInternal';
|
||||
|
||||
const Wrapper = ({ children }: { children: React.ReactNode }) => (
|
||||
<Providers values={mockedSpreadsheetOptions}>{children}</Providers>
|
||||
);
|
||||
|
||||
describe('useSpreadsheetImportInternal', () => {
|
||||
it('should return the value provided by provider component', async () => {
|
||||
const { result } = renderHook(() => useSpreadsheetImportInternal(), {
|
||||
wrapper: Wrapper,
|
||||
});
|
||||
|
||||
expect(result.current).toBe(mockedSpreadsheetOptions);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user