From 596ce32bd6b9f6711da48fdab0ec1a42519bcbaf Mon Sep 17 00:00:00 2001 From: Paul Rastoin <45004772+prastoin@users.noreply.github.com> Date: Mon, 4 May 2026 15:14:43 +0200 Subject: [PATCH] Fix front unit test on main (#20233) Jest mocks runs before the const is defined --- .../__tests__/useCreateOneRecord.test.tsx | 13 ++++--- ...jectRecordsSpreadsheetImportDialog.test.ts | 22 +++++------ .../generateWorkflowRunDiagram.test.ts | 39 ++++++++++++------- .../getWorkflowVersionDiagram.test.ts | 17 ++++++-- .../src/testing/utils/getUuidV4Mock.ts | 9 ----- 5 files changed, 54 insertions(+), 46 deletions(-) delete mode 100644 packages/twenty-front/src/testing/utils/getUuidV4Mock.ts diff --git a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useCreateOneRecord.test.tsx b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useCreateOneRecord.test.tsx index 49190c7560..8efd6c7924 100644 --- a/packages/twenty-front/src/modules/object-record/hooks/__tests__/useCreateOneRecord.test.tsx +++ b/packages/twenty-front/src/modules/object-record/hooks/__tests__/useCreateOneRecord.test.tsx @@ -9,13 +9,14 @@ import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; import { useRefetchAggregateQueries } from '@/object-record/hooks/useRefetchAggregateQueries'; import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper'; -const personId = 'a7286b9a-c039-4a89-9567-2dfa7953cda9'; -const input = { name: { firstName: 'John', lastName: 'Doe' } }; +const PERSON_ID = 'a7286b9a-c039-4a89-9567-2dfa7953cda9'; jest.mock('uuid', () => ({ - v4: jest.fn(() => personId), + v4: jest.fn(() => 'a7286b9a-c039-4a89-9567-2dfa7953cda9'), })); +const input = { name: { firstName: 'John', lastName: 'Doe' } }; + jest.mock('@/object-record/hooks/useRefetchAggregateQueries'); const mockRefetchAggregateQueries = jest.fn(); (useRefetchAggregateQueries as jest.Mock).mockReturnValue({ @@ -26,11 +27,11 @@ const mocks = [ { request: { query, - variables: { input: { ...input, id: personId } }, + variables: { input: { ...input, id: PERSON_ID } }, }, result: jest.fn(() => ({ data: { - createPerson: { ...responseData, ...input, id: personId }, + createPerson: { ...responseData, ...input, id: PERSON_ID }, }, })), }, @@ -58,7 +59,7 @@ describe('useCreateOneRecord', () => { await act(async () => { const res = await result.current.createOneRecord(input); expect(res).toBeDefined(); - expect(res).toHaveProperty('id', personId); + expect(res).toHaveProperty('id', PERSON_ID); }); expect(mocks[0].result).toHaveBeenCalled(); diff --git a/packages/twenty-front/src/modules/object-record/spreadsheet-import/hooks/__tests__/useOpenObjectRecordsSpreadsheetImportDialog.test.ts b/packages/twenty-front/src/modules/object-record/spreadsheet-import/hooks/__tests__/useOpenObjectRecordsSpreadsheetImportDialog.test.ts index 7464ab8cf6..974068a304 100644 --- a/packages/twenty-front/src/modules/object-record/spreadsheet-import/hooks/__tests__/useOpenObjectRecordsSpreadsheetImportDialog.test.ts +++ b/packages/twenty-front/src/modules/object-record/spreadsheet-import/hooks/__tests__/useOpenObjectRecordsSpreadsheetImportDialog.test.ts @@ -1,15 +1,19 @@ import { renderHook } from '@testing-library/react'; import { act } from 'react'; +import gql from 'graphql-tag'; import { CoreObjectNameSingular } from 'twenty-shared/types'; import { spreadsheetImportDialogState } from '@/spreadsheet-import/states/spreadsheetImportDialogState'; - import { useOpenObjectRecordsSpreadsheetImportDialog } from '@/object-record/spreadsheet-import/hooks/useOpenObjectRecordsSpreadsheetImportDialog'; import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; - -import gql from 'graphql-tag'; import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper'; +const COMPANY_ID = 'cb2e9f4b-20c3-4759-9315-4ffeecfaf71a'; + +jest.mock('uuid', () => ({ + v4: jest.fn(() => 'cb2e9f4b-20c3-4759-9315-4ffeecfaf71a'), +})); + const mockBatchCreateManyRecords = jest.fn().mockResolvedValue([]); jest.mock('@/object-record/hooks/useBatchCreateManyRecords', () => ({ @@ -18,17 +22,11 @@ jest.mock('@/object-record/hooks/useBatchCreateManyRecords', () => ({ }), })); -const companyId = 'cb2e9f4b-20c3-4759-9315-4ffeecfaf71a'; - -jest.mock('uuid', () => ({ - v4: jest.fn(() => companyId), -})); - const mockResult = jest.fn(() => ({ data: { createCompanies: [ { - id: companyId, + id: COMPANY_ID, name: 'Example Company', employees: 0, idealCustomerProfile: true, @@ -137,7 +135,7 @@ describe('useOpenObjectRecordsSpreadsheetImportDialog', () => { const submitData = { validStructuredRows: [ { - id: companyId, + id: COMPANY_ID, name: 'Example Company', idealCustomerProfile: true, employees: '0', @@ -146,7 +144,7 @@ describe('useOpenObjectRecordsSpreadsheetImportDialog', () => { invalidStructuredRows: [], allStructuredRows: [ { - id: companyId, + id: COMPANY_ID, name: 'Example Company', __index: 'cbc3985f-dde9-46d1-bae2-c124141700ac', idealCustomerProfile: true, diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/generateWorkflowRunDiagram.test.ts b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/generateWorkflowRunDiagram.test.ts index 57a2aa7be8..1659d8d8bb 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/generateWorkflowRunDiagram.test.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/generateWorkflowRunDiagram.test.ts @@ -1,15 +1,24 @@ +import { v4 as uuidv4 } from 'uuid'; import { type WorkflowStep, type WorkflowTrigger, } from '@/workflow/types/Workflow'; import { StepStatus, type WorkflowRunStepInfos } from 'twenty-shared/workflow'; import { FieldMetadataType } from 'twenty-shared/types'; -import { getUuidV4Mock } from '~/testing/utils/getUuidV4Mock'; import { generateWorkflowRunDiagram } from '@/workflow/workflow-diagram/utils/generateWorkflowRunDiagram'; -jest.mock('uuid', () => ({ - v4: getUuidV4Mock(), -})); +jest.mock('uuid'); + +beforeEach(() => { + let counter = 0; + (uuidv4 as jest.Mock).mockImplementation( + () => `8f3b2121-f194-4ba4-9fbf-${counter++}`, + ); +}); + +afterAll(() => { + jest.resetAllMocks(); +}); describe('generateWorkflowRunDiagram', () => { it('marks node as failed when the last attempt failed', () => { @@ -349,7 +358,7 @@ describe('generateWorkflowRunDiagram', () => { "edgeType": "default", }, "deletable": false, - "id": "8f3b2121-f194-4ba4-9fbf-3", + "id": "8f3b2121-f194-4ba4-9fbf-0", "markerEnd": "edge-branch-arrow-default", "markerStart": undefined, "selectable": false, @@ -367,7 +376,7 @@ describe('generateWorkflowRunDiagram', () => { "edgeType": "default", }, "deletable": false, - "id": "8f3b2121-f194-4ba4-9fbf-4", + "id": "8f3b2121-f194-4ba4-9fbf-1", "markerEnd": "edge-branch-arrow-default", "markerStart": undefined, "selectable": false, @@ -385,7 +394,7 @@ describe('generateWorkflowRunDiagram', () => { "edgeType": "default", }, "deletable": false, - "id": "8f3b2121-f194-4ba4-9fbf-5", + "id": "8f3b2121-f194-4ba4-9fbf-2", "markerEnd": "edge-branch-arrow-default", "markerStart": undefined, "selectable": false, @@ -585,7 +594,7 @@ describe('generateWorkflowRunDiagram', () => { "edgeType": "default", }, "deletable": false, - "id": "8f3b2121-f194-4ba4-9fbf-6", + "id": "8f3b2121-f194-4ba4-9fbf-0", "markerEnd": "edge-branch-arrow-default", "markerStart": undefined, "selectable": false, @@ -603,7 +612,7 @@ describe('generateWorkflowRunDiagram', () => { "edgeType": "default", }, "deletable": false, - "id": "8f3b2121-f194-4ba4-9fbf-7", + "id": "8f3b2121-f194-4ba4-9fbf-1", "markerEnd": "edge-branch-arrow-default", "markerStart": undefined, "selectable": false, @@ -621,7 +630,7 @@ describe('generateWorkflowRunDiagram', () => { "edgeType": "default", }, "deletable": false, - "id": "8f3b2121-f194-4ba4-9fbf-8", + "id": "8f3b2121-f194-4ba4-9fbf-2", "markerEnd": "edge-branch-arrow-default", "markerStart": undefined, "selectable": false, @@ -839,7 +848,7 @@ describe('generateWorkflowRunDiagram', () => { "edgeType": "default", }, "deletable": false, - "id": "8f3b2121-f194-4ba4-9fbf-9", + "id": "8f3b2121-f194-4ba4-9fbf-0", "markerEnd": "edge-branch-arrow-default", "markerStart": undefined, "selectable": false, @@ -857,7 +866,7 @@ describe('generateWorkflowRunDiagram', () => { "edgeType": "default", }, "deletable": false, - "id": "8f3b2121-f194-4ba4-9fbf-10", + "id": "8f3b2121-f194-4ba4-9fbf-1", "markerEnd": "edge-branch-arrow-default", "markerStart": undefined, "selectable": false, @@ -875,7 +884,7 @@ describe('generateWorkflowRunDiagram', () => { "edgeType": "default", }, "deletable": false, - "id": "8f3b2121-f194-4ba4-9fbf-11", + "id": "8f3b2121-f194-4ba4-9fbf-2", "markerEnd": "edge-branch-arrow-default", "markerStart": undefined, "selectable": false, @@ -893,7 +902,7 @@ describe('generateWorkflowRunDiagram', () => { "edgeType": "default", }, "deletable": false, - "id": "8f3b2121-f194-4ba4-9fbf-12", + "id": "8f3b2121-f194-4ba4-9fbf-3", "markerEnd": "edge-branch-arrow-default", "markerStart": undefined, "selectable": false, @@ -1081,7 +1090,7 @@ describe('generateWorkflowRunDiagram', () => { "edgeType": "default", }, "deletable": false, - "id": "8f3b2121-f194-4ba4-9fbf-13", + "id": "8f3b2121-f194-4ba4-9fbf-0", "markerEnd": "edge-branch-arrow-default", "markerStart": undefined, "selectable": false, diff --git a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/getWorkflowVersionDiagram.test.ts b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/getWorkflowVersionDiagram.test.ts index f653e64581..23bf3b0b66 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/getWorkflowVersionDiagram.test.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-diagram/utils/__tests__/getWorkflowVersionDiagram.test.ts @@ -1,9 +1,18 @@ -import { getUuidV4Mock } from '~/testing/utils/getUuidV4Mock'; +import { v4 as uuidv4 } from 'uuid'; import { getWorkflowVersionDiagram } from '@/workflow/workflow-diagram/utils/getWorkflowVersionDiagram'; -jest.mock('uuid', () => ({ - v4: getUuidV4Mock(), -})); +jest.mock('uuid'); + +beforeEach(() => { + let counter = 0; + (uuidv4 as jest.Mock).mockImplementation( + () => `8f3b2121-f194-4ba4-9fbf-${counter++}`, + ); +}); + +afterAll(() => { + jest.resetAllMocks(); +}); describe('getWorkflowVersionDiagram', () => { it('returns an empty diagram if the provided workflow version', () => { diff --git a/packages/twenty-front/src/testing/utils/getUuidV4Mock.ts b/packages/twenty-front/src/testing/utils/getUuidV4Mock.ts deleted file mode 100644 index 0f3b79663e..0000000000 --- a/packages/twenty-front/src/testing/utils/getUuidV4Mock.ts +++ /dev/null @@ -1,9 +0,0 @@ -const baseUuid = '8f3b2121-f194-4ba4-9fbf-'; - -export const getUuidV4Mock = () => { - let id = 0; - - return () => { - return baseUuid + id++; - }; -};