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