diff --git a/src/workspace-data/data-table/shared/RenameColumnModal.test.ts b/src/workspace-data/data-table/shared/RenameColumnModal.test.ts index 7f47708916..625e5b46ea 100644 --- a/src/workspace-data/data-table/shared/RenameColumnModal.test.ts +++ b/src/workspace-data/data-table/shared/RenameColumnModal.test.ts @@ -52,4 +52,16 @@ describe('RenameColumnModal', () => { // Assert expect(renameModal.getByText(/already exists as an attribute name/)); }); + + it('Errors on column name starting with sys_', async () => { + // Arrange + const renameProps = { ...defaultRenameColumnModalProps }; + // Act + const renameModal = render(h(RenameColumnModal, renameProps)); + // User enters 'attribute2' + const input = screen.getByLabelText(/New Name/); + await userEvent.type(input, 'sys_attribute'); + // Assert + expect(renameModal.getByText(/Column name cannot start with "sys_"/)); + }); }); diff --git a/src/workspace-data/data-table/shared/RenameColumnModal.ts b/src/workspace-data/data-table/shared/RenameColumnModal.ts index 9e7abeb59a..5ab945e08a 100644 --- a/src/workspace-data/data-table/shared/RenameColumnModal.ts +++ b/src/workspace-data/data-table/shared/RenameColumnModal.ts @@ -36,13 +36,14 @@ export const RenameColumnModal = (props: RenameColumnModalProps): ReactNode => { message: 'Column name is required', }, format: { - pattern: `^(?!name$|entityType$|${entityType}_id$)[A-Za-z0-9_-]+$`, + pattern: `^(?!name$|entityType$|${entityType}_id$|sys_)[A-Za-z0-9_-]+$`, flags: 'i', message: Utils.cond( [ ['name', 'entityType', `${entityType}_id`].includes(newAttributeName), () => `Column name cannot be "name", "entityType" or "${entityType}_id".`, ], + [newAttributeName.startsWith('sys_'), () => 'Column name cannot start with "sys_".'], () => 'Column name may only contain alphanumeric characters, underscores, and dashes.' ),