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:
gitstart-app[bot]
2024-02-29 14:01:41 +01:00
committed by GitHub
parent bc11cf80fa
commit 68a8502920
19 changed files with 1236 additions and 0 deletions

View File

@ -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,
});
});
});

View File

@ -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);
});
});

View File

@ -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);
});
});