[CHORE] Prepare twenty-serverfor twenty-shared multi barrel refactor (#11022)

# Introduction
While running https://github.com/twentyhq/twenty/pull/10960 scripts
discovers few issues:
- Invalid named folder `pre-hooks.ts`
- Mock consuming outbound imported module resulting in consumed before
initialization
This commit is contained in:
Paul Rastoin
2025-03-19 12:26:42 +01:00
committed by GitHub
parent 4ce607869e
commit 5ba3c09b14
4 changed files with 34 additions and 27 deletions

View File

@ -2,7 +2,7 @@ import { Module } from '@nestjs/common';
import { ViewService } from 'src/modules/view/services/view.service';
import { ViewDeleteOnePreQueryHook } from './pre-hooks.ts/view-delete-one.pre-query.hook';
import { ViewDeleteOnePreQueryHook } from './pre-hooks/view-delete-one.pre-query.hook';
@Module({
imports: [],
providers: [ViewService, ViewDeleteOnePreQueryHook],

View File

@ -1,22 +1,25 @@
import { FieldMetadataType } from 'twenty-shared';
import { generateFakeValue } from 'src/engine/utils/generate-fake-value';
import * as generateFakeValueModule from 'src/engine/utils/generate-fake-value';
import { generateFakeField } from 'src/modules/workflow/workflow-builder/workflow-schema/utils/generate-fake-field';
import { camelToTitleCase } from 'src/utils/camel-to-title-case';
import * as camelToTitleCaseModule from 'src/utils/camel-to-title-case';
jest.mock('src/engine/utils/generate-fake-value');
jest.mock('src/utils/camel-to-title-case');
jest.mock('src/engine/metadata-modules/field-metadata/composite-types', () => {
const mockCompositeTypeDefinitions = new Map();
const actualTypes = jest.requireActual('twenty-shared');
const { FieldMetadataType } = actualTypes;
mockCompositeTypeDefinitions.set(FieldMetadataType.LINKS, {
const compositeTypeDefinitions = new Map();
compositeTypeDefinitions.set(FieldMetadataType.LINKS, {
properties: [
{ name: 'label', type: FieldMetadataType.TEXT },
{ name: 'url', type: FieldMetadataType.TEXT },
],
});
mockCompositeTypeDefinitions.set(FieldMetadataType.CURRENCY, {
compositeTypeDefinitions.set(FieldMetadataType.CURRENCY, {
properties: [
{ name: 'amount', type: FieldMetadataType.NUMBER },
{ name: 'currencyCode', type: FieldMetadataType.TEXT },
@ -24,24 +27,30 @@ jest.mock('src/engine/metadata-modules/field-metadata/composite-types', () => {
});
return {
compositeTypeDefinitions: mockCompositeTypeDefinitions,
compositeTypeDefinitions,
};
});
describe('generateFakeField', () => {
const generateFakeValueSpy = jest.spyOn(
generateFakeValueModule,
'generateFakeValue',
);
const camelToTitleCaseSpy = jest.spyOn(
camelToTitleCaseModule,
'camelToTitleCase',
);
beforeEach(() => {
jest.clearAllMocks();
// Default mock implementations
(generateFakeValue as jest.Mock).mockImplementation(
(type) => `fake-${type}`,
);
(camelToTitleCase as jest.Mock).mockImplementation((str) => `Title ${str}`);
generateFakeValueSpy.mockImplementation((type) => `fake-${type}`);
camelToTitleCaseSpy.mockImplementation((str) => `Title ${str}`);
});
describe('for simple field types', () => {
it('should generate a leaf node for TEXT type', () => {
(generateFakeValue as jest.Mock).mockReturnValueOnce('Fake Text');
generateFakeValueSpy.mockReturnValueOnce('Fake Text');
const result = generateFakeField({
type: FieldMetadataType.TEXT,
@ -56,14 +65,14 @@ describe('generateFakeField', () => {
value: 'Fake Text',
});
expect(generateFakeValue).toHaveBeenCalledWith(
expect(generateFakeValueSpy).toHaveBeenCalledWith(
FieldMetadataType.TEXT,
'FieldMetadataType',
);
});
it('should generate a leaf node for NUMBER type with icon', () => {
(generateFakeValue as jest.Mock).mockReturnValueOnce(42);
generateFakeValueSpy.mockReturnValueOnce(42);
const result = generateFakeField({
type: FieldMetadataType.NUMBER,
@ -83,7 +92,7 @@ describe('generateFakeField', () => {
it('should generate a leaf node for DATE type', () => {
const fakeDate = new Date('2023-01-01');
(generateFakeValue as jest.Mock).mockReturnValueOnce(fakeDate);
generateFakeValueSpy.mockReturnValueOnce(fakeDate);
const result = generateFakeField({
type: FieldMetadataType.DATE,
@ -102,11 +111,11 @@ describe('generateFakeField', () => {
describe('for composite field types', () => {
it('should generate a node with properties for LINKS type', () => {
(generateFakeValue as jest.Mock)
generateFakeValueSpy
.mockReturnValueOnce('Fake Label')
.mockReturnValueOnce('https://example.com');
(camelToTitleCase as jest.Mock)
camelToTitleCaseSpy
.mockReturnValueOnce('Label')
.mockReturnValueOnce('Url');
@ -135,17 +144,15 @@ describe('generateFakeField', () => {
},
});
expect(generateFakeValue).toHaveBeenCalledTimes(2);
expect(camelToTitleCase).toHaveBeenCalledWith('label');
expect(camelToTitleCase).toHaveBeenCalledWith('url');
expect(generateFakeValueSpy).toHaveBeenCalledTimes(2);
expect(camelToTitleCaseSpy).toHaveBeenCalledWith('label');
expect(camelToTitleCaseSpy).toHaveBeenCalledWith('url');
});
it('should generate a node with properties for CURRENCY type', () => {
(generateFakeValue as jest.Mock)
.mockReturnValueOnce(100)
.mockReturnValueOnce('USD');
generateFakeValueSpy.mockReturnValueOnce(100).mockReturnValueOnce('USD');
(camelToTitleCase as jest.Mock)
camelToTitleCaseSpy
.mockReturnValueOnce('Amount')
.mockReturnValueOnce('Currency Code');
@ -181,7 +188,7 @@ describe('generateFakeField', () => {
it('should handle unknown field types as leaf nodes', () => {
const unknownType = 'UNKNOWN_TYPE' as FieldMetadataType;
(generateFakeValue as jest.Mock).mockReturnValueOnce('Unknown Value');
generateFakeValueSpy.mockReturnValueOnce('Unknown Value');
const result = generateFakeField({
type: unknownType,
@ -198,7 +205,7 @@ describe('generateFakeField', () => {
});
it('should handle empty label', () => {
(generateFakeValue as jest.Mock).mockReturnValueOnce('Fake Boolean');
generateFakeValueSpy.mockReturnValueOnce('Fake Boolean');
const result = generateFakeField({
type: FieldMetadataType.BOOLEAN,