[BREAKING_CHANGE/GRAPHQL/OBJECT_METADATA_CREATE_ONE] Remove object/fields/view-fields v1 implementation (#15823)

# Introduction
Remove the v2 feature flag for view-field field-metadata and
object-metadata metadata entities

## Some details
- Disabled nestjs-query for object metadata creation and explicitly
calling it
- removed all v1 integration tests files

## Remarks
Not remove v2 referencing in both filenaming right now will handle that
globally later

## Breaking change
Due to object metadata resolver createOne standardization had to rename
the input from `CreateObjectInput` to `CreateOneObjectInput`
This commit is contained in:
Paul Rastoin
2025-11-17 10:55:19 +01:00
committed by GitHub
parent c1dcda6475
commit a39efeb1ab
75 changed files with 425 additions and 15441 deletions
@@ -1,215 +0,0 @@
import { Transform } from 'class-transformer';
import {
IsArray,
IsBoolean,
IsEnum,
IsNumber,
IsString,
} from 'class-validator';
import { ConfigVariableType } from 'src/engine/core-modules/twenty-config/enums/config-variable-type.enum';
import { applyBasicValidators } from 'src/engine/core-modules/twenty-config/utils/apply-basic-validators.util';
import { configTransformers } from 'src/engine/core-modules/twenty-config/utils/config-transformers.util';
jest.mock('class-transformer', () => ({
Transform: jest.fn(),
}));
jest.mock('class-validator', () => ({
IsBoolean: jest.fn().mockReturnValue(jest.fn()),
IsNumber: jest.fn().mockReturnValue(jest.fn()),
IsString: jest.fn().mockReturnValue(jest.fn()),
IsEnum: jest.fn().mockReturnValue(jest.fn()),
IsArray: jest.fn().mockReturnValue(jest.fn()),
}));
jest.mock(
'src/engine/core-modules/twenty-config/utils/config-transformers.util',
() => ({
configTransformers: {
boolean: jest.fn(),
number: jest.fn(),
},
}),
);
describe('applyBasicValidators', () => {
const mockTarget = {};
const mockPropertyKey = 'testProperty';
beforeEach(() => {
jest.clearAllMocks();
});
describe('boolean type', () => {
it('should apply boolean transformers and validators', () => {
let capturedTransformFn;
(Transform as jest.Mock).mockImplementation((transformFn) => {
capturedTransformFn = transformFn;
return jest.fn();
});
applyBasicValidators(
ConfigVariableType.BOOLEAN,
mockTarget,
mockPropertyKey,
);
expect(Transform).toHaveBeenCalled();
expect(IsBoolean).toHaveBeenCalled();
const transformFn = capturedTransformFn;
const mockTransformParams = { value: 'true' };
(configTransformers.boolean as jest.Mock).mockReturnValueOnce(true);
// @ts-expect-error legacy noImplicitAny
const result1 = transformFn(mockTransformParams);
expect(configTransformers.boolean).toHaveBeenCalledWith('true');
expect(result1).toBe(true);
(configTransformers.boolean as jest.Mock).mockReturnValueOnce(undefined);
// @ts-expect-error legacy noImplicitAny
const result2 = transformFn(mockTransformParams);
expect(result2).toBe('true');
});
});
describe('number type', () => {
it('should apply number transformers and validators', () => {
let capturedTransformFn;
(Transform as jest.Mock).mockImplementation((transformFn) => {
capturedTransformFn = transformFn;
return jest.fn();
});
applyBasicValidators(
ConfigVariableType.NUMBER,
mockTarget,
mockPropertyKey,
);
expect(Transform).toHaveBeenCalled();
expect(IsNumber).toHaveBeenCalled();
const transformFn = capturedTransformFn;
const mockTransformParams = { value: '42' };
(configTransformers.number as jest.Mock).mockReturnValueOnce(42);
// @ts-expect-error legacy noImplicitAny
const result1 = transformFn(mockTransformParams);
expect(configTransformers.number).toHaveBeenCalledWith('42');
expect(result1).toBe(42);
(configTransformers.number as jest.Mock).mockReturnValueOnce(undefined);
// @ts-expect-error legacy noImplicitAny
const result2 = transformFn(mockTransformParams);
expect(result2).toBe('42');
});
});
describe('string type', () => {
it('should apply string validator', () => {
applyBasicValidators(
ConfigVariableType.STRING,
mockTarget,
mockPropertyKey,
);
expect(IsString).toHaveBeenCalled();
expect(Transform).not.toHaveBeenCalled();
});
});
describe('enum type', () => {
it('should apply enum validator with string array options', () => {
const enumOptions = ['option1', 'option2', 'option3'];
applyBasicValidators(
ConfigVariableType.ENUM,
mockTarget,
mockPropertyKey,
enumOptions,
);
expect(IsEnum).toHaveBeenCalledWith(enumOptions);
expect(Transform).not.toHaveBeenCalled();
});
it('should apply enum validator with enum object options', () => {
enum TestEnum {
Option1 = 'value1',
Option2 = 'value2',
Option3 = 'value3',
}
jest.mock(
'src/engine/core-modules/twenty-config/utils/type-transformers.registry',
() => ({
typeTransformers: {
enum: {
getValidators: jest.fn().mockImplementation((options) => {
if (options && Object.keys(options).length > 0) {
return [IsEnum(options)];
}
return [];
}),
getTransformers: jest.fn().mockReturnValue([]),
},
},
}),
{ virtual: true },
);
applyBasicValidators(
ConfigVariableType.ENUM,
mockTarget,
mockPropertyKey,
TestEnum,
);
expect(IsEnum).toHaveBeenCalledWith(TestEnum);
expect(Transform).not.toHaveBeenCalled();
});
it('should not apply enum validator without options', () => {
applyBasicValidators(
ConfigVariableType.ENUM,
mockTarget,
mockPropertyKey,
);
expect(IsEnum).not.toHaveBeenCalled();
expect(Transform).not.toHaveBeenCalled();
});
});
describe('array type', () => {
it('should apply array validator', () => {
applyBasicValidators(
ConfigVariableType.ARRAY,
mockTarget,
mockPropertyKey,
);
expect(IsArray).toHaveBeenCalled();
expect(Transform).not.toHaveBeenCalled();
});
});
describe('unsupported type', () => {
it('should throw error for unsupported types', () => {
expect(() => {
applyBasicValidators('unsupported' as any, mockTarget, mockPropertyKey);
}).toThrow('Unsupported config variable type: unsupported');
});
});
});