Forbid default value nullification for non-nullable field (#6258)
as per title https://github.com/user-attachments/assets/ce07d437-eeeb-488c-8dfa-3fc07316f485
This commit is contained in:
@ -19,6 +19,7 @@ import {
|
||||
FieldMetadataException,
|
||||
FieldMetadataExceptionCode,
|
||||
} from 'src/engine/metadata-modules/field-metadata/field-metadata.exception';
|
||||
import { assertDoesNotNullifyDefaultValueForNonNullableField } from 'src/engine/metadata-modules/field-metadata/utils/assert-does-not-nullify-default-value-for-non-nullable-field.util';
|
||||
import { computeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util';
|
||||
import { generateNullable } from 'src/engine/metadata-modules/field-metadata/utils/generate-nullable';
|
||||
import { ObjectMetadataService } from 'src/engine/metadata-modules/object-metadata/object-metadata.service';
|
||||
@ -310,6 +311,11 @@ export class FieldMetadataService extends TypeOrmQueryService<FieldMetadataEntit
|
||||
|
||||
assertMutationNotOnRemoteObject(objectMetadata);
|
||||
|
||||
assertDoesNotNullifyDefaultValueForNonNullableField({
|
||||
isNullable: existingFieldMetadata.isNullable,
|
||||
defaultValueFromUpdate: fieldMetadataInput.defaultValue,
|
||||
});
|
||||
|
||||
if (
|
||||
objectMetadata.labelIdentifierFieldMetadataId ===
|
||||
existingFieldMetadata.id &&
|
||||
|
||||
@ -0,0 +1,38 @@
|
||||
import { assertDoesNotNullifyDefaultValueForNonNullableField } from 'src/engine/metadata-modules/field-metadata/utils/assert-does-not-nullify-default-value-for-non-nullable-field.util';
|
||||
|
||||
describe('assertDoesNotNullifyDefaultValueForNonNullableField', () => {
|
||||
it('should not throw if default value is set to null and field is nullable', () => {
|
||||
expect(() =>
|
||||
assertDoesNotNullifyDefaultValueForNonNullableField({
|
||||
isNullable: true,
|
||||
defaultValueFromUpdate: null,
|
||||
}),
|
||||
).not.toThrow();
|
||||
});
|
||||
|
||||
it('should not throw if default value is undefined and field is non nullable', () => {
|
||||
expect(() =>
|
||||
assertDoesNotNullifyDefaultValueForNonNullableField({
|
||||
isNullable: false,
|
||||
}),
|
||||
).not.toThrow();
|
||||
});
|
||||
|
||||
it('should not throw if default value is not set to null and field is non nullable', () => {
|
||||
expect(() =>
|
||||
assertDoesNotNullifyDefaultValueForNonNullableField({
|
||||
isNullable: false,
|
||||
defaultValueFromUpdate: 'new default value',
|
||||
}),
|
||||
).not.toThrow();
|
||||
});
|
||||
|
||||
it('should throw if default value is set to null and field is non nullable', () => {
|
||||
expect(() =>
|
||||
assertDoesNotNullifyDefaultValueForNonNullableField({
|
||||
isNullable: false,
|
||||
defaultValueFromUpdate: null,
|
||||
}),
|
||||
).toThrow();
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,19 @@
|
||||
import {
|
||||
FieldMetadataException,
|
||||
FieldMetadataExceptionCode,
|
||||
} from 'src/engine/metadata-modules/field-metadata/field-metadata.exception';
|
||||
|
||||
export const assertDoesNotNullifyDefaultValueForNonNullableField = ({
|
||||
isNullable,
|
||||
defaultValueFromUpdate,
|
||||
}: {
|
||||
isNullable: boolean;
|
||||
defaultValueFromUpdate?: any;
|
||||
}) => {
|
||||
if (!isNullable && defaultValueFromUpdate === null) {
|
||||
throw new FieldMetadataException(
|
||||
'Default value cannot be nullified for non-nullable field',
|
||||
FieldMetadataExceptionCode.INVALID_FIELD_INPUT,
|
||||
);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user