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,
|
FieldMetadataException,
|
||||||
FieldMetadataExceptionCode,
|
FieldMetadataExceptionCode,
|
||||||
} from 'src/engine/metadata-modules/field-metadata/field-metadata.exception';
|
} 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 { 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 { generateNullable } from 'src/engine/metadata-modules/field-metadata/utils/generate-nullable';
|
||||||
import { ObjectMetadataService } from 'src/engine/metadata-modules/object-metadata/object-metadata.service';
|
import { ObjectMetadataService } from 'src/engine/metadata-modules/object-metadata/object-metadata.service';
|
||||||
@ -310,6 +311,11 @@ export class FieldMetadataService extends TypeOrmQueryService<FieldMetadataEntit
|
|||||||
|
|
||||||
assertMutationNotOnRemoteObject(objectMetadata);
|
assertMutationNotOnRemoteObject(objectMetadata);
|
||||||
|
|
||||||
|
assertDoesNotNullifyDefaultValueForNonNullableField({
|
||||||
|
isNullable: existingFieldMetadata.isNullable,
|
||||||
|
defaultValueFromUpdate: fieldMetadataInput.defaultValue,
|
||||||
|
});
|
||||||
|
|
||||||
if (
|
if (
|
||||||
objectMetadata.labelIdentifierFieldMetadataId ===
|
objectMetadata.labelIdentifierFieldMetadataId ===
|
||||||
existingFieldMetadata.id &&
|
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