Fix nullable being set to null for text field (#4239)

This commit is contained in:
Charles Bochet
2024-02-29 11:29:17 +01:00
committed by GitHub
parent f34a430b23
commit f52a4141c9
3 changed files with 47 additions and 0 deletions

View File

@ -25,6 +25,7 @@ import { UpdateFieldInput } from 'src/metadata/field-metadata/dtos/update-field.
import { WorkspaceMigrationFactory } from 'src/metadata/workspace-migration/workspace-migration.factory';
import { computeObjectTargetTable } from 'src/workspace/utils/compute-object-target-table.util';
import { generateMigrationName } from 'src/metadata/workspace-migration/utils/generate-migration-name.util';
import { generateNullable } from 'src/metadata/field-metadata/utils/generate-nullable';
import {
FieldMetadataEntity,
@ -102,6 +103,10 @@ export class FieldMetadataService extends TypeOrmQueryService<FieldMetadataEntit
true,
fieldMetadataInput.name,
),
isNullable: generateNullable(
fieldMetadataInput.type,
fieldMetadataInput.isNullable,
),
defaultValue:
fieldMetadataInput.defaultValue ??
generateDefaultValue(fieldMetadataInput.type),

View File

@ -0,0 +1,27 @@
import { FieldMetadataType } from 'src/metadata/field-metadata/field-metadata.entity';
import { generateNullable } from 'src/metadata/field-metadata/utils/generate-nullable';
describe('generateNullable', () => {
it('should generate a nullable value false for TEXT, EMAIL, PHONE no matter what the input is', () => {
expect(generateNullable(FieldMetadataType.TEXT, false)).toEqual(false);
expect(generateNullable(FieldMetadataType.PHONE, false)).toEqual(false);
expect(generateNullable(FieldMetadataType.EMAIL, false)).toEqual(false);
expect(generateNullable(FieldMetadataType.TEXT, true)).toEqual(false);
expect(generateNullable(FieldMetadataType.PHONE, true)).toEqual(false);
expect(generateNullable(FieldMetadataType.EMAIL, true)).toEqual(false);
expect(generateNullable(FieldMetadataType.TEXT)).toEqual(false);
expect(generateNullable(FieldMetadataType.PHONE)).toEqual(false);
expect(generateNullable(FieldMetadataType.EMAIL)).toEqual(false);
});
it('should should return true if no input is given', () => {
expect(generateNullable(FieldMetadataType.DATE_TIME)).toEqual(true);
});
it('should should return the input value if the input value is given', () => {
expect(generateNullable(FieldMetadataType.DATE_TIME, true)).toEqual(true);
expect(generateNullable(FieldMetadataType.DATE_TIME, false)).toEqual(false);
});
});

View File

@ -0,0 +1,15 @@
import { FieldMetadataType } from 'src/metadata/field-metadata/field-metadata.entity';
export function generateNullable(
type: FieldMetadataType,
inputNullableValue?: boolean,
): boolean {
switch (type) {
case FieldMetadataType.TEXT:
case FieldMetadataType.PHONE:
case FieldMetadataType.EMAIL:
return false;
default:
return inputNullableValue ?? true;
}
}