mirror of
				https://github.com/lingble/twenty.git
				synced 2025-10-31 04:37:56 +00:00 
			
		
		
		
	Adding the DefaultCountry in the backend
This commit is contained in:
		| @@ -5,6 +5,7 @@ import { | ||||
|   IsEnum, | ||||
|   IsInt, | ||||
|   IsOptional, | ||||
|   IsString, | ||||
|   Max, | ||||
|   Min, | ||||
|   validateOrReject, | ||||
| @@ -23,7 +24,7 @@ enum ValueType { | ||||
|   NUMBER = 'number', | ||||
| } | ||||
|  | ||||
| class SettingsValidation { | ||||
| class NumberSettingsValidation { | ||||
|   @IsOptional() | ||||
|   @IsInt() | ||||
|   @Min(0) | ||||
| @@ -32,7 +33,9 @@ class SettingsValidation { | ||||
|   @IsOptional() | ||||
|   @IsEnum(ValueType) | ||||
|   type?: 'percentage' | 'number'; | ||||
| } | ||||
|  | ||||
| class TextSettingsValidation { | ||||
|   @IsOptional() | ||||
|   @IsInt() | ||||
|   @Min(0) | ||||
| @@ -40,6 +43,12 @@ class SettingsValidation { | ||||
|   displayedMaxRows?: number; | ||||
| } | ||||
|  | ||||
| class AddressSettingsValidation { | ||||
|   @IsOptional() | ||||
|   @IsString() | ||||
|   defaultCountry?: string; | ||||
| } | ||||
|  | ||||
| @Injectable() | ||||
| export class FieldMetadataValidationService< | ||||
|   T extends FieldMetadataType | 'default' = 'default', | ||||
| @@ -55,17 +64,22 @@ export class FieldMetadataValidationService< | ||||
|   }) { | ||||
|     switch (fieldType) { | ||||
|       case FieldMetadataType.NUMBER: | ||||
|         await this.validateSettings(NumberSettingsValidation, settings); | ||||
|         break; | ||||
|       case FieldMetadataType.TEXT: | ||||
|         await this.validateSettings(settings); | ||||
|         await this.validateSettings(TextSettingsValidation, settings); | ||||
|         break; | ||||
|       case FieldMetadataType.ADDRESS: | ||||
|         await this.validateSettings(AddressSettingsValidation, settings); | ||||
|         break; | ||||
|       default: | ||||
|         break; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   private async validateSettings(settings: any) { | ||||
|   private async validateSettings(validator: any, settings: any) { | ||||
|     try { | ||||
|       const settingsInstance = plainToInstance(SettingsValidation, settings); | ||||
|       const settingsInstance = plainToInstance(validator, settings); | ||||
|  | ||||
|       await validateOrReject(settingsInstance); | ||||
|     } catch (error) { | ||||
|   | ||||
| @@ -28,11 +28,16 @@ type FieldMetadataDateTimeSettings = { | ||||
|   displayAsRelativeDate?: boolean; | ||||
| }; | ||||
|  | ||||
| type FieldMetadataAddressSettings = { | ||||
|   defaultCountry?: string; | ||||
| }; | ||||
|  | ||||
| type FieldMetadataSettingsMapping = { | ||||
|   [FieldMetadataType.NUMBER]: FieldMetadataNumberSettings; | ||||
|   [FieldMetadataType.DATE]: FieldMetadataDateSettings; | ||||
|   [FieldMetadataType.DATE_TIME]: FieldMetadataDateTimeSettings; | ||||
|   [FieldMetadataType.TEXT]: FieldMetadataTextSettings; | ||||
|   [FieldMetadataType.ADDRESS]: FieldMetadataAddressSettings; | ||||
| }; | ||||
|  | ||||
| type SettingsByFieldMetadata<T extends FieldMetadataType | 'default'> = | ||||
|   | ||||
| @@ -0,0 +1,81 @@ | ||||
| import { FieldMetadataSettings } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface'; | ||||
|  | ||||
| import { FieldMetadataValidationService } from 'src/engine/metadata-modules/field-metadata/field-metadata-validation.service'; | ||||
| import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; | ||||
| import { FieldMetadataException } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; | ||||
|  | ||||
| describe('FieldMetadataValidationService', () => { | ||||
|   let service: FieldMetadataValidationService; | ||||
|  | ||||
|   beforeAll(() => { | ||||
|     service = new FieldMetadataValidationService(); | ||||
|   }); | ||||
|  | ||||
|   it('should validate NUMBER settings successfully', async () => { | ||||
|     const settings = { decimals: 2, type: 'number' } as FieldMetadataSettings; | ||||
|  | ||||
|     await expect( | ||||
|       service.validateSettingsOrThrow({ | ||||
|         fieldType: FieldMetadataType.NUMBER, | ||||
|         settings, | ||||
|       }), | ||||
|     ).resolves.not.toThrow(); | ||||
|   }); | ||||
|  | ||||
|   it('should throw an error for invalid NUMBER settings', async () => { | ||||
|     const settings = { type: 'invalidType' } as FieldMetadataSettings; | ||||
|  | ||||
|     await expect( | ||||
|       service.validateSettingsOrThrow({ | ||||
|         fieldType: FieldMetadataType.NUMBER, | ||||
|         settings, | ||||
|       }), | ||||
|     ).rejects.toThrow(FieldMetadataException); | ||||
|   }); | ||||
|  | ||||
|   it('should validate TEXT settings successfully', async () => { | ||||
|     const settings = { displayedMaxRows: 10 } as FieldMetadataSettings; | ||||
|  | ||||
|     await expect( | ||||
|       service.validateSettingsOrThrow({ | ||||
|         fieldType: FieldMetadataType.TEXT, | ||||
|         settings, | ||||
|       }), | ||||
|     ).resolves.not.toThrow(); | ||||
|   }); | ||||
|  | ||||
|   it('should throw an error for invalid TEXT settings', async () => { | ||||
|     const settings = { | ||||
|       displayedMaxRows: 'NotANumber', | ||||
|     } as FieldMetadataSettings; | ||||
|  | ||||
|     await expect( | ||||
|       service.validateSettingsOrThrow({ | ||||
|         fieldType: FieldMetadataType.TEXT, | ||||
|         settings, | ||||
|       }), | ||||
|     ).rejects.toThrow(FieldMetadataException); | ||||
|   }); | ||||
|  | ||||
|   it('should validate ADDRESS settings successfully', async () => { | ||||
|     const settings = { defaultCountry: 'France' } as FieldMetadataSettings; | ||||
|  | ||||
|     await expect( | ||||
|       service.validateSettingsOrThrow({ | ||||
|         fieldType: FieldMetadataType.ADDRESS, | ||||
|         settings, | ||||
|       }), | ||||
|     ).resolves.not.toThrow(); | ||||
|   }); | ||||
|  | ||||
|   it('should throw an error for invalid ADDRESS settings', async () => { | ||||
|     const settings = { defaultCountry: 123 } as FieldMetadataSettings; | ||||
|  | ||||
|     await expect( | ||||
|       service.validateSettingsOrThrow({ | ||||
|         fieldType: FieldMetadataType.ADDRESS, | ||||
|         settings, | ||||
|       }), | ||||
|     ).rejects.toThrow(FieldMetadataException); | ||||
|   }); | ||||
| }); | ||||
		Reference in New Issue
	
	Block a user
	 guillim
					guillim