Skip to content

Commit

Permalink
[Fix] Object names should be camel cased (twentyhq#5571)
Browse files Browse the repository at this point in the history
as per title
  • Loading branch information
ijreilly authored May 25, 2024
1 parent 936ac40 commit def1774
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,26 @@ describe('validateObjectName', () => {
validateObjectMetadataInputOrThrow(invalidObjectInput),
).toThrow();
});

it('should throw if nameSingular is not camelCased', async () => {
const invalidObjectInput = {
...validObjectInput,
nameSingular: 'notACamelCase1a',
};

expect(() =>
validateObjectMetadataInputOrThrow(invalidObjectInput),
).toThrow();
});

it('should throw if namePlural is a not camelCased', async () => {
const invalidObjectInput = {
...validObjectInput,
namePlural: 'notACamelCase1b',
};

expect(() =>
validateObjectMetadataInputOrThrow(invalidObjectInput),
).toThrow();
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { InvalidStringException } from 'src/engine/metadata-modules/errors/Inval
import { CreateObjectInput } from 'src/engine/metadata-modules/object-metadata/dtos/create-object.input';
import { UpdateObjectPayload } from 'src/engine/metadata-modules/object-metadata/dtos/update-object.input';
import { validateMetadataName } from 'src/engine/metadata-modules/utils/validate-metadata-name.utils';
import { camelCase } from 'src/utils/camel-case';

const coreObjectNames = [
'appToken',
Expand Down Expand Up @@ -41,6 +42,9 @@ export const validateObjectMetadataInputOrThrow = <
>(
objectMetadataInput: T,
): void => {
validateNameCamelCasedOrThrow(objectMetadataInput.nameSingular);
validateNameCamelCasedOrThrow(objectMetadataInput.namePlural);

validateNameCharactersOrThrow(objectMetadataInput.nameSingular);
validateNameCharactersOrThrow(objectMetadataInput.namePlural);

Expand All @@ -56,6 +60,14 @@ const validateNameIsNotReservedKeywordOrThrow = (name?: string) => {
}
};

const validateNameCamelCasedOrThrow = (name?: string) => {
if (name) {
if (name !== camelCase(name)) {
throw new ForbiddenException(`Name should be in camelCase: ${name}`);
}
}
};

const validateNameCharactersOrThrow = (name?: string) => {
try {
if (name) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -416,8 +416,8 @@ export class RemoteTableService {
: plural(localTableBaseName);

const objectMetadata = await this.objectMetadataService.createOne({
nameSingular: localTableNameSingular,
namePlural: localTableNamePlural,
nameSingular: camelCase(localTableNameSingular),
namePlural: camelCase(localTableNamePlural),
labelSingular: camelToTitleCase(camelCase(localTableBaseName)),
labelPlural: camelToTitleCase(plural(camelCase(localTableBaseName))),
description: 'Remote table',
Expand Down

0 comments on commit def1774

Please sign in to comment.